在模式识别领域中,最近邻居法(k-Nearest Neighbors algorithm,KNN算法,又译K-近邻算法)是一种用于分类和回归的非参数统计方法。
k-NN分类
输入:包含特征空间中的 k 个最接近的训练样本。
输出:一个分类族群。
k-NN回归
输入:包含特征空间中的 k 个最接近的训练样本。
输出:该对象的属性值。该值是其 k 个最近邻居的值的平均值。
TODO
文本分类,聚类分析,数据挖掘,机器学习,预测分析,减少维度,模式识别,图像处理
然而k最近邻居法因为计算量相当的大,所以相当的耗时,Ko与Seo提出一算法TCFP(text categorization using feature projection),尝试利用特征投影法来降低与分类无关的特征对于系统的影响,并借此提升系统效能,其实实验结果显示其分类效果与k最近邻居法相近,但其运算所需时间仅需k最近邻居法运算时间的五十分之一。
除了针对文件分类的效率,尚有研究针对如何促进k最近邻居法在文件分类方面的效果,如Han等人于2002年尝试利用贪心法,针对文件分类实做可调整权重的k最近邻居法WAkNN(weighted adjusted k nearest neighbor),以促进分类效果;而Li等人于2004年提出由于不同分类的文件本身有数量上有差异,因此也应该依照训练集合中各种分类的文件数量,选取不同数目的最近邻居,来参与分类。
思路
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 KNN方法虽然从原理上也依赖于极限定理,但在类别决策时,只与极少量的相邻样本有关。由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
步骤
Scikit-Learn
http://scikit-learn.org/stable/modules/neighbors.html
KNN分类器使用sklearn.neighbors.KNeighborsClassifier
,参数设置参考 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html
python
X = [[0, 100], [1, 99], [99, 1], [100, 0]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=3)
classifier.fit(X, y)
print(classifier.predict([[10, 90], [90, 10]]))
print(classifier.predict_proba([[10, 90], [90, 10]]))
print(classifier.kneighbors([[10, 90], [90, 10]], return_distance=False))
text
>>> print(classifier.predict([[10, 90], [90, 10]]))
[0 1]
>>> print(classifier.predict_proba([[10, 90], [90, 10]]))
[[ 0.66666667 0.33333333]
[ 0.33333333 0.66666667]]
>>> print(classifier.kneighbors([[10, 90], [90, 10]], return_distance=False))
[[1 0 2]
[2 3 1]]
KNN回归器使用sklearn.neighbors.KNeighborsRegressor
,参数设置参考 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsRegressor.html
python
X = [[0], [1], [2], [3]]
y = [0, 0, 1, 1]
from sklearn.neighbors import KNeighborsRegressor
regressor = KNeighborsRegressor(n_neighbors=2)
regressor.fit(X, y)
print(regressor.predict([[1.5]]))
text
[ 0.5]
TODO
联系客服