#返回目录
K近邻原理
- 目录
- 模型介绍
- 投票机制
- sklearn实现
模型介绍
样本分类的另一种方法,从样本属性出发,区别于感知机样本权重乘以权重.
投票机制
顿时想起了poll仰卧起坐的代码
topKList = np.argsort(np.array(distList))[:topK] #升序排序
#建立一个长度时的列表,用于选择数量最多的标记
#3.2.4提到了分类决策使用的是投票表决,topK个标记每人有一票,在数组中每个标记代表的位置中投入
#自己对应的地方,随后进行唱票选择最高票的标记
labelList = [0] * 10
#对topK个索引进行遍历
for index in topKList:
#trainLabelMat[index]:在训练集标签中寻找topK元素索引对应的标记
#int(trainLabelMat[index]):将标记转换为int(实际上已经是int了,但是不int的话,报错)
#labelList[int(trainLabelMat[index])]:找到标记在labelList中对应的位置
#最后加1,表示投了一票
labelList[int(trainLabelMat[index])] += 1
#max(labelList):找到选票箱中票数最多的票数值
#labelList.index(max(labelList)):再根据最大值在列表中找到该值对应的索引,等同于预测的标记
return labelList.index(max(labelList))
sklearn实现
from sklearn import datasets, neighbors, linear_model
X_digits, y_digits = datasets.load_digits(return_X_y=True)
X_digits = X_digits / X_digits.max()
n_samples = len(X_digits)
X_train = X_digits[:int(.9 * n_samples)]
y_train = y_digits[:int(.9 * n_samples)]
X_test = X_digits[int(.9 * n_samples):]
y_test = y_digits[int(.9 * n_samples):]
knn = neighbors.KNeighborsClassifier()
logistic = linear_model.LogisticRegression(max_iter=1000)
print('KNN score: %f' % knn.fit(X_train, y_train).score(X_test, y_test))
print('LogisticRegression score: %f'% logistic.fit(X_train, y_train).score(X_test, y_test))