python实现KNN分类算法

浅浅的花香味﹌ 2022-12-20 11:10 299阅读 0赞
  1. import sklearn
  2. import numpy as np
  3. from sklearn.neighbors import KNeighborsClassifier
  4. import sklearn.datasets as data
  5. import matplotlib as mpl
  6. import matplotlib.pyplot as plt
  7. from matplotlib.colors import ListedColormap
  8. import pandas as pd
  9. from tensorboard.notebook import display
  10. import svgTest
  11. class KNN:
  12. def __init__(self, k):
  13. self.k = k
  14. def fit(self, X, y):
  15. self.X = np.asarray(X)
  16. self.y = np.asarray(y).astype(int)
  17. def predict(self,X):
  18. X = np.asarray(X)
  19. result = []
  20. for i in X:
  21. # 计算距离
  22. dis = np.sqrt(np.sum((i - self.X) ** 2, axis=1))
  23. # 对距离按索引排序
  24. index = dis.argsort()
  25. # 找出设定的近邻 k 前几项
  26. index = index[:self.k]
  27. # 元素必须是非负整数 采用距离的倒数权重增加 二版本,添加权重
  28. count = np.bincount(self.y[index], weights=1 / dis[index])
  29. result.append(count.argmax())
  30. return np.asarray(result)
  31. if __name__ == '__main__':
  32. iris = data.load_iris()
  33. x_train = iris.data
  34. y_train = iris.target
  35. My = KNN(k=3)
  36. plt.figure(figsize=(10, 10))
  37. # My.fit(x_train, y_train)
  38. # print(My.predict(x_train))
  39. # print((y_train == My.predict(x_train)) + 0)
  40. # print(np.array(x_train))
  41. # print(y_train[:, np.newaxis])
  42. data = np.c_[x_train, y_train[:,np.newaxis]]
  43. data = pd.DataFrame(data)
  44. t0 = data[data.iloc[:,4]==0]
  45. t1 = data[data.iloc[:,4]==1]
  46. t2 = data[data.iloc[:,4]==2]
  47. print(type(t0))
  48. t0 = t0.sample(len(t0), random_state=0)
  49. t1 = t1.sample(len(t1), random_state=0)
  50. t2 = t2.sample(len(t2), random_state=0)
  51. Train_x = pd.concat([t0.iloc[:40,:-1], t1.iloc[:40,:-1], t2.iloc[:40,:-1]],axis=0)
  52. Train_y = pd.concat([t0.iloc[:40,-1], t1.iloc[:40,-1], t2.iloc[:40,-1]],axis=0)
  53. Test_x = pd.concat([t0.iloc[40:,:-1], t1.iloc[40:,:-1], t2.iloc[40:,:-1]],axis=0)
  54. Test_y = pd.concat([t0.iloc[40:,-1], t1.iloc[40:,-1], t2.iloc[40:,-1]],axis=0)
  55. My.fit(Train_x, Train_y)
  56. result = My.predict(Test_x)
  57. print(np.sum(result == Test_y) / len(result))
  58. # 设置中文字体,随便一个字体就可以不一定是黑体 后面那个是不使用unicode负号
  59. mpl.rcParams['font.family'] = 'SimHei'
  60. mpl.rcParams['axes.unicode_minus'] = False
  61. # 绘图操作
  62. plt.scatter(x=t0[0][:40], y = t0[1][:40], c='r', label = '数据1')
  63. plt.scatter(x=t1[0][:40], y = t0[1][:40], c='g', label = '数据2')
  64. plt.scatter(x=t2[0][:40], y = t0[1][:40], c='b', label = '数据3')
  65. right = Test_x[result == Test_y]
  66. wrong = Test_x[result != Test_y]
  67. print(right)
  68. print("*************")
  69. print(wrong)
  70. plt.scatter(x=right[0][:40], y=right[1][:40], c='c', marker='x',label = '数据4')
  71. plt.scatter(x=wrong[0][:40], y=wrong[1][:40], c='m', marker='x', label='数据5')
  72. plt.legend()
  73. plt.show()

发表评论

表情:
评论列表 (有 0 条评论,299人围观)

还没有评论,来说两句吧...

相关阅读

    相关 [分类] KNN算法

    KNN算法 KNN,K-NearestNeighbor——K最近邻(不常用) 是什么? 是机器学习中有监督机器学习下的一种简单的分类算法. K最近邻,就是k个

    相关 KNN分类算法

    KNN分类算法 最简单最初级的分类器,就是将全部的训练数据所对应的类别都记录下来,当测试对象的属性和某个训练对象的属性完全匹配时,便可以对其进行分类 K近邻(k-nea

    相关 Python实现KNN算法

    Python实现KNN算法 KNN算法的实际用处很多,主要用于分类阶段,是一个基础的分类算法。KNN主要基于距离的计算,一般可以在原始的欧氏空间中计算样本之间的距离。改进版