k近邻
1、(Python 3)在Python中安装numpy sciPy 和matplotlib模块时,直接使用pip模块再cmd->users/administrator中输入pip install numpy即可
注意:使用import命令导入时,matplotlib可能遇到依赖问题,所以需要安装其他软件:six、dateutil、pyparsing等也是要提前装好的。
2、tile(A,rep) 功能:重复A的各个维度,rep:A沿着各个维度重复次数
3、argsort() 功能:函数返回的是数组值从小到大的索引值
4、 python字典的items方法作用:是可以将字典中的所有项,以列表方式返回。因为字典是无序的,所以用items方法返回字典的所有项,也是没有顺序的。
python字典的iteritems方法作用:与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器。
5、operator.itemgetter函数和sorted函数
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子。
a = [1,2,3]
>>> b=operator.itemgetter(1) //定义函数b,获取对象的第1个域的值
>>> b(a)
2
>>> b=operator.itemgetter(1,0) //定义函数b,获取对象的第1个域和第0个的值
>>> b(a)
(2, 1)
要注意,operator.itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值。
sorted函数,Python内置的排序函数sorted可以对list或者iterator进行排序
函数原型sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True(升序)或者 reverse = False(降序),有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
6、 运行Python应用或引用Python模块,Python解释器要有一个查找的过程。但是,对于有要处理的数据集来说,要把.txt文件放在安装包的根目录下面才可以读到。
解决方法:
1)通过设置一个环境变量PYTHONPATH为Python增加一个搜索路径,以方便查找到相关Python模块;通过Python的sys.path属性获得当前搜索路径的配置。
2) 通过sys模块的append方法在Python环境中增加搜索路径。
3)将.py文件放到 python安装包目录下的site_packages 子目录下。
4)在调用文件中添加sys.path.append("模块文件目录")。
5)直接使用集成开发环境Anaconda等。
7、继续写k-近邻算法函数,保存到kNN.py之后,输入命令:kNN.classify0([0,0],group,labels,3) 报错:module' object has no attribute 'classify0'
解决方法:重启Python IDLE
9、scatter(datingDataMat[:,1],datingDataMat[2,:],15.0*array(datingLabels),15.0*array(datingLabels))第三个和第四个参数分别代表大小和颜色,按照数组中已分好的类别1,2,3,分别给予不同的大小和颜色值加以区别。
本节中,画散点图的代码:
10、numpy数组中min()函数的用法
- import numpy as np
- a = np.array([[1,5,3],[4,2,6]])
- print(a.min()) #无参,所有中的最小值 ,1
- print(a.min(0)) # axis=0; 每列的最小值 ,[1,2,3]
- print(a.min(1)) # axis=1;每行的最小值 ,[1,2]
11、python在安装时,默认的编码是ascii,当程序中出现非ascii编码时,python的处理常常会报这样的错UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128),python没办法处理非ascii编码的,此时需要自己设置将python的默认编码,一般设置为utf8的编码格式。查询系统默认编码可以在解释器中输入以下命令:
Python代码
- >>>sys.getdefaultencoding()
设置python的默认编码:在程序中加入以下代码(但是只能在本次运行程序中起作用,并不能一劳永逸):
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:
Python代码- # encoding=utf8
- import sys
- reload(sys)
- sys.setdefaultencoding('utf8')
此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。
注意:修改之后会有unknown encoding: cp0问题,百度说是版本anaconda2的bug,有人用了版本3说是可以解决这个unknown encoding: cp0问题,但是我换成用pycharm了(因为安装包是现成的)。
声明:文章是在看机器学习实战这本书时,自己出错的一些地方