KNN近邻算法
Posted learning-logs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KNN近邻算法相关的知识,希望对你有一定的参考价值。
存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输人没有标签的新数据后,将新数据的每个特征与样本集中数据对应的 特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们 只选择样本数据集中前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 Predict:%s‘% (label[y_test[i*100]], label[y_[i*100]]), fontdict=dict(fontsize=20, color=‘r‘)) 10 axes.set_title(‘True: %s Predict:%s‘% (label[y_test[i*100]], label[y_[i*100]]))
以上是关于KNN近邻算法的主要内容,如果未能解决你的问题,请参考以下文章