码迷,mamicode.com
首页 > 编程语言 > 详细

KNN近邻算法

时间:2020-05-21 14:53:03      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:i+1   数值   plt   title   knn   min   figure   tar   span   

存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们 只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类

 1 import sklearn.datasets as datasets
 2 iris = datasets.load_iris()
 3 data = iris.data
 4 target = iris.target
 5 # 导入一个数据拆分的包
 6 from sklearn.model_selection import train_test_split
 7 X_train, x_test, y_train, y_test = train_test_split(data,target, test_size=0.1)
 8 # 训练
 9 knn = KNeighborsClassifier()
10 knn.fit(X_train, y_train)
11 # 预测
12 knn.predict(x_test)
13 #预测精度
14 knn.score(x_test,y_test)
15 knn.score(X_train, y_train)

如果维度里数值是字符串型的话,需要将字符串型转成数值型。如果不是字符串数字的话,可以用以下函数进行替换:

1 cols = [ workclass, education,  marital_status, occupation,  race, sex, native_country]
2 for col in cols:
3     unique = data[col].unique()
4     def convert(item):
5         return np.argwhere(unique==item)[0,0]
6     data[col] = data[col].map(convert)

如果需要正则化,则需要在训练模型之前,将data正则化:

1 def normalized(x):
2     
3     return (x - x.min()) / (x.max() - x.min())

如果需要可视化预测结果:

 1 plt.figure(figsize=(4*4, 5 * 6))
 2 for i in range(30):
 3     #30是最多的预测结果,不可超过预测结果个数的最大值
 4     axes = plt.subplot(6,5,i+1)
 5     axes.plot(X_test[i*100])
 6 
 7     if y_test[i*100] != y_[i*100]:
 8     #用红色字体标识预测错误结果
 9         axes.set_title(True: %s\nPredict:%s% (label[y_test[i*100]], label[y_[i*100]]), fontdict=dict(fontsize=20, color=r))
10     axes.set_title(True: %s\nPredict:%s% (label[y_test[i*100]], label[y_[i*100]]))

 

KNN近邻算法

标签:i+1   数值   plt   title   knn   min   figure   tar   span   

原文地址:https://www.cnblogs.com/learning-logs/p/12930485.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!