KNN:通过计算待分类数据点,与
已有数据集中的所有数据点的距离。取距离最小的前K个点,根据“少数服从多数“的原则,将这个数据点划分为出现次数最多的那个类别。
在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier
创建一个K近邻分类器,主要参数有:
• n_neighbors:用于指定分类器中K的大小(默认值为5,注意与kmeans的区别)。
• weights:设置选中的K个点对分类结果影响的权重(默认值为平均权重“uniform”,可以选择“distance”代表越近的点权重越高,或者传入自己编写的以距离为参数的权重计算函数)。
• algorithm:设置用于计算临近点的方法,因为当数据量很大的情况下计算当前点和所有点的距离再选出最近的k各点,这个计算量是很费时的,所以(选项中有ball_tree、kd_tree和brute,分别代表不同的寻找邻居的优化算法,默认值为auto,根据训练数据自动选择)。
X=[[0], [1], [2], [3]]
y=[0, 0, 1, 1]
from sklearn.neighbors import KNeighborsClassifier
neigh = KNeighborsClassifier(n_neighbors=3)
neigh.fit(X,y)
print(neigh.predict([[1.1]]))
在实际使用时,我们可以使用所有训练数据构成特征 X 和标签 y,使用
fit() 函数进行训练。在正式分类时,通过一次性构造测试集或者一个一个输入
样本的方式,得到样本对应的分类结果。有关K 的取值:
• 如果较大,相当于使用较大邻域中的训练实例进行预测,可以减小估计误差,
但是距离较远的样本也会对预测起作用,导致预测错误。
• 相反地,如果 K 较小,相当于使用较小的邻域进行预测,如果邻居恰好是噪
声点,会导致过拟合。
• 一般情况下,K 会倾向选取较小的值,并使用交叉验证法选取最优 K 值。
网友评论