目录
(一)python实现
(二)使用scikit-learn包实现
编辑:
校对:
版本:
Jiangnan
Jiangnan
python3
python实现
根据上一篇的例子我们可以写出K-近邻算法的伪代码,如下:
对未知类别的数据集中的每个数据进行以下操作:
(1)计算已知数据集中的每个数据与未知类别数据的距离。
(2)按照距离进行递增排序。
(3)选取与未知数据最近的K个数据。
(4)计算前K个数据所属分类出现的频率。
(5)返回前K个数据出现频率最高的分类作为未知数据的分类。
K近邻算法:
from numpy import *
#将函数库中的所有模块导入
import operator
#导入运算符模块
def createDataSet():
group = array([[1.0,1.1],[1.0,1.0],
[0,0],[0,0.1]])
#四个数据每个数据两个特征
labels = ['A','A','B','B']
#四个标签
return group, labels
def classify0(inX, dataSet, labels, k):
#inx 为未知数据,dataset 已知数据集,
# labels 已知数据集分类
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort()
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = \
sorted(classCount.items(),
key=operator.itemgetter(1),
reverse=True)
return sortedClassCount[0][0]
使用scikit-learn包实现
scikit-learn是python中的机器学习工具包,它包含了分类、回归、聚类、降维、模型选择、预处理的子模块。我们可以使用分类模块中的最近邻来时现与上面代码一样的功能。
from sklearn.neighbors import KNeighborsClassifier
# 导入sklearn.neighbors模块中KNN类
import numpy as np
group = np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
#四个数据每个数据两个特征
labels = ['A','A','B','B']
#四个标签
knn = KNeighborsClassifier(n_neighbors=3)
# 定义一个knn分类器对象,k=3
knn.fit(group,labels)
# 调用该对象的训练方法,主要接收两个参数:
# 训练数据集及其样本标签
y_predict = knn.predict([[0,0]])
#预测[[0,0]]的分类
print('y_predict = ')
print(y_predict)
# 输出预测的结果
思考——学而不思则罔
sklearn 中的k-近邻除了fit(),predict()还有那些函数是经常使用到的?

理解编程语言,探索数据奥秘
每日练习|干货分享|新闻资讯|公益平台。
每天学习一点点,你将会见到全新的自己。

长按识别二维码关注




