机器学习入门书籍:《机器学习实践》读书笔记(一)kNN
这里是书上的第一段代码
嗯,虽然很简单,但是写出来真的很有成就感的说(毕竟这里是大一的零基础(自闭
书上是要将电影分类,数据的结构如下:
【标签(labels):【横坐标:亲吻次数】【纵坐标:打斗场景】】
数据是用小数字取代了的,这样方便计算
东西全写在注释里面了呀~
代码段:
// 这里是源码君
>>> from numpy import*
>>> import operator
>>> def createDataSet():
dataset = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])//初始化数据集,每一行都是一个二维坐标
labels = ["爱情片","爱情片","动作片","动作片"]//初始化标签
return dataset,labels//设定返回值
>>> a,b=createDataSet()
>>> def classifier(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0]//找出数据集的行数
diffMat = tile(inX,(dataSetSize,1)) - dataSet//用numpy自带函数tile将inX,也就是欲将考察的点坐标“以行为单位,重复dataset的行数那么多遍”
sqDiffMat=diffMat**2//“**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]
输入 :
// 这里是输入君
classifier([0,0],a,b,3)
输出:
// 这里是输出君
“动作片”