前言

KNN算法系列文章加上总结共六篇笔记,已全部完成。本篇笔记做一个总结,随手再举个西瓜书上的例子。
转载请注明出处:http://blog.csdn.net/rosetta

总结

实际上KNN算法只要把数据准备好给分类函数就可以了。MLiA中的分类函数是classify0(),sklearn中由neigh.fit(normMat, datingLabels)完成,另外注意下前者直接输入待预测数据,后者通过调用neigh.predict()完成,并没有实际区别。从中也可以发现输入参数都是一样的数据类型,都是ndarray。normMat是样本的属性相关的,datingLabels是每个样本对应的标签,两者0维要一样,即有N条样本就要有N条标签,至于属性个数可大可少。

使用KNN算法对西瓜的好坏进行预测

随便就举个例子,西瓜书上第4页有个表1.1西瓜数据集,里面通过西瓜的一些特征判定其是否是好瓜,我们用KNN实现一个用来预测是否是好瓜代码来做个测试,以巩固所学知识。

原始数据如下:

编号色泽根蒂敲声好瓜
1青绿蜷缩浊响是
2乌黑蜷缩浊响是
3青绿硬挺清脆否
4青绿稍蜷沉闷否

因为是中文,我们做一下转换(后续可通过代码来做转换):
色泽:青绿 0;乌黑1
根蒂:蜷缩 0; 稍蜷1, 硬挺2
敲声:浊响 0; 清脆 1,沉闷 2
好瓜:是 1;否 0

所以变成如下数据:

编号色泽根蒂敲声好瓜
10001
21001
30210
40120

原代码如下:

# 色泽:青绿 0;乌黑1
# 根蒂:蜷缩 0; 稍蜷1, 硬挺2
# 敲声:浊响 0; 清脆 1,沉闷 2
# 好瓜:是 1;否 0
def good_watermelon():
    resultList = ['否', '是']
    datingDataMat,datingLabels = file2matrix('watermelon.txt')
    print(datingDataMat,datingLabels)

    inArr = np.array([0, 1, 1])#青绿、稍蜷、清脆
    #inArr = np.array([0, 1, 0])#青绿、稍蜷、浊响
    neigh = KNeighborsClassifier(n_neighbors=3)
    neigh.fit(datingDataMat, datingLabels) #这里不需要做归一化处理。

    classifierResult = neigh.predict([inArr])[0]

    print("瓜的特征:",inArr)
    print("这个是不是一个好西瓜?答:", resultList[classifierResult])

watermelon.txt内容如下:
0 0 0 1
1 0 0 1
0 2 1 0
0 1 2 0

运行结果:
当输入数据为inArr = np.array([0, 1, 1])#青绿、稍蜷、清脆
预测西瓜好坏结果1

预测西瓜好坏结果2

如有疑问之处欢迎加我微信交流,共同进步!请备注“CSDN博客”
这里写图片描述

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐