目录
1、导入实验所需的sklearn包,导入numpy,进行矩阵计算
KNN是通过测量不同特征值之间的距离进行分类。它的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。
- # 从sklearn 导入KNeighborsClassifier方法
- from sklearn.neighbors import KNeighborsClassifier
- import numpy as np
- X = np.array([[1, 1], [1, 1.5], [2, 2.5], [2.5, 3], [1.5, 1], [3, 2.5]])
- y = ['A', 'A', 'B', 'B', 'A', 'B']
根据sklearn提供的包,创建knn算法对象
n_neighbors=5
int 型参数 knn算法中指定以最近的几个最近邻样本具有投票权,默认参数为5
algrithm='auto'
str参数 即内部采用什么算法实现。有以下几种选择参数:
'ball_tree':球树、'kd_tree':kd树、'brute':暴力搜索、'auto':自动根据数据的类型和结构选择合适的算法。
默认情况下是‘auto’。暴力搜索就不用说了大家都知道。具体前两种树型 数据结构哪种好视情况而定。KD树是对依次对K维坐标轴,以中值切分构造 的树,每一个节点是一个超矩形,在维数小于20时效率最高。
ball tree 是为了克服KD树高维失效而发明的,其构造过程是以质心C和半径r分割样本空间,每一个节点是一个超球体。一般低维数据用 kd_tree速度快,用ball_tree相对较慢。超过20维之后的高维数据,用kd_tree效果反而不佳,而ball_tree效果要好,具体构造过程及优劣势的理论大家有兴趣可以去具体学习。
model = KNeighborsClassifier(n_neighbors=4, algorithm='ball_tree')
- """
- fit 就是训练模型
- fit()
- 训练函数,它是最主要的函数。接收参数只有1个,就是训练数据集,
- 每一行是一个样本,每一列是一个属性。它返回对象本身,即只是修
- 改对象内部属性,因此直接调用就可以了,后面用该对象的预测函数
- 取预测自然及用到了这个训练的结果。其实该函数并不是
- KNeighborsClassifier这个类的方法,
- 而是它的父类SupervisedIntegerMixin继承下来的方法。
- """
- model.fit(X, y)
- # 预测
- print(model.predict([[1.75, 1.75]])) # 输出分类结果
- print(model.predict_proba([[1.75, 1.75]])) # 返回预测属于某标签的概率
- print(model.score(X, y)) # 输出模型训练结果