Notes_on_MLIA_kNN

# k-nearest neighbor algorithm
# function classify0
# arguments: 
# 	inX: the new observation which is to be labeled by the algorithm
#	dataSet: train sample
#	labels: label for train sample
#	k: k in knn
def classify0(inX, dataSet, labels, k):
	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.iteritems(), key = operator.itemgetter(1), reverse=True)
	return sortedClassCount[0][0]
.shape用于计算array各维度的长度,在python中都是从0开始的。
tile函数是numpy包中的,用于重复array,比如上面代码中的tile(inX,(dataSetSize,1)),表示重复inX,其行重复dataSetSize次,而列不重复
.sum是numpy中用于计算一个array内部行列求和,axis=1表示按列求和,即把每一行的元素加起来
.argsort是numpy中对array进行排序的函数,排序是升序
classCount = {} 其中{}表示生成的是字典,在字典这个类中,有方法get,对classCount元素赋值,其实是个计数器
sorted是内置函数,可以help(sorted)查看用法
operator模块下的itemgetter函数,顾名思义就是提取第X个元素的意思
这段代码里给出了字典排序的经典方法,还可以使用lambda函数,来进行字典的排序,具体python中的排序方法可以参考:https://wiki.python.org/moin/HowTo/Sorting/
2.2 读入txt文件的函数里有一个小bug
def file2matrix(filename):
	fr = open(filename)
	arrayOLines = fr.readlines()
	numberOfLines = len(arrayOLines)
	returnMat = zeros((numberOfLines, 3))
	classLabelVector = []
	index = 0
	for line in arrayOLines:
		line = line.strip()
		listFromLine = line.split('\t')
		returnMat[index,:] = listFromLine[0:3]
		classLabelVector.append(int(listFromLine[-1]))
		index += 1
	return returnMat, classLabelVector
这里用到了一个函数line.strip(),里面没有设置参数,会把'\t'也去掉,后面使用tab分割字符就会失效。要改成line.strip('/n')。而且丫循环那块就没写冒号。
还有一个bug,是生成label标签的时候,不能加int
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值