机器学习实战--KNN

按照机器学习实战这本书学习的,本人小白。

之前没有接触过python,所以会穿插自己对于python语法的学习。

所用ide为Pycharm社区版,win,python3.6

如书:首先在KNN.py中增加如下代码

from numpy import*
import operator
def creatDataSet():
group =array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1],[0,0.1]])
labels=['A','A','B','B']
return group,labels

保存好脚本文件就在python控制台输入

import KNN

bug1:报错没有numpy库。解决办法是File->Settings->Project Inerpreter->+然后输入numpy,Install Package

(PS:这里一定要保证网络通畅,我智障地没连网然后一直和我提示pip not installed。。。然后我一直在看我pip是不是有问题。。。

接着跟着书做就没问题了

bug2:line4 少外面那个中括号。(好多别的也有讲的,囧

保存了修改正确的脚本依然报错。解决办法是退出整个ide然后重新import KNN 等等命令就对了。

继续如书往KNN.py里面堆代码

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
    sortedDisIndicies=distances.argsort()
    classCount={}
    for i in range(k):
        voteIlabel=labels[sortedDisIndicies[i]]
        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

bug3:'dict' object has no attribute 'iteritems'解决办法,是由于python的版本导致的,在python3.5以后这里面iteritems改成items即可

由于对python不熟,

笔记1:shape()

https://blog.csdn.net/Mr_Cat123/article/details/78841747?utm_source=blogxgwz0

这里shape[0]意味着只读第一维的数目,比如这里如果是要读刚group的第一维度数目就应该是4。

笔记2:tile()

这里做一点笔记: https://blog.csdn.net/Alis_xt/article/details/53117965

http://blog.sina.com.cn/s/blog_6bd0612b0101cr3u.html

比较形象的是这个帖子:https://www.jianshu.com/p/9519f1984c70

参考楼上这些前辈的帖子,这里tile(inX,(dataSetSize,1))是将inX这个矩阵在纵向复制dataSetSize个,

笔记3:  diffMat=tile(inX,(dataSetSize,1))-dataSet这一句表示将输入向量inX按照训练样本集的第一维度扩展成与dataSet完全维度一样,然后求平方

https://blog.csdn.net/dake13/article/details/80917932

笔记4:sum(),没有参数时,所有全加;axis=0,按列加;axis=1,按行加

笔记5:argsort()返回的是数组从小到大的索引值

笔记6:python中的字典

https://www.cnblogs.com/scios/p/8108243.html

笔记7:get()

get()返回指定键的值,如果值不在字典中返回默认值。dict.get(key,default)

https://blog.csdn.net/weixin_38705903/article/details/79231551

笔记8:sorted()

sorted(iterable[, cmp[, key[, reverse]]])

iterable -- 可迭代对象。

cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。

key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。

reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回是排序后的列表。

这里补充一点由于原书中是python2,用的是iteritems(),在python3中需要将其改成items()否则会报错。

猜你喜欢

转载自blog.csdn.net/weixin_40501169/article/details/83216773