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\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]]))

猜你喜欢

转载自www.cnblogs.com/learning-logs/p/12930485.html