机器学习笔记(8)---K-近邻算法(6)---KNN算法学习总结
前言
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
所以变成如下数据:
| 编号 | 色泽 | 根蒂 | 敲声 | 好瓜 |
|---|---|---|---|---|
| 1 | 0 | 0 | 0 | 1 |
| 2 | 1 | 0 | 0 | 1 |
| 3 | 0 | 2 | 1 | 0 |
| 4 | 0 | 1 | 2 | 0 |
原代码如下:
# 色泽:青绿 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])#青绿、稍蜷、清脆
如有疑问之处欢迎加我微信交流,共同进步!请备注“CSDN博客”
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)