机器学习实战笔记——k近邻

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) 

>>> 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:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
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
8、Python中,圆括号()表示函数调用方括号[]表示列表值的引用,当括号使用出现问题时容易报错:can't assign to function call
9、scatter(datingDataMat[:,1],datingDataMat[2,:],15.0*array(datingLabels),15.0*array(datingLabels))第三个和第四个参数分别代表大小和颜色,按照数组中已分好的类别1,2,3,分别给予不同的大小和颜色值加以区别。

本节中,画散点图的代码:

10、numpy数组中min()函数的用法
  1. import numpy as np  
  2. a = np.array([[1,5,3],[4,2,6]])  
  3. print(a.min()) #无参,所有中的最小值   ,1
  4. print(a.min(0)) # axis=0; 每列的最小值  ,[1,2,3]
  5. 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代码     
  1. >>>sys.getdefaultencoding()  
设置python的默认编码:在程序中加入以下代码(但是只能在本次运行程序中起作用,并不能一劳永逸): 
  1. import sys  
  2. reload(sys)  
  3. sys.setdefaultencoding('utf8')   

 另一个方案是在python的Lib\site-packages文件夹下新建一个sitecustomize.py,内容为:

Python代码     
  1. # encoding=utf8  
  2. import sys    
  3. reload(sys)  
  4. sys.setdefaultencoding('utf8')   
此时重启python解释器,执行sys.getdefaultencoding(),发现编码已经被设置为utf8的了,多次重启之后,效果相同,这是因为系统在python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动的加上解决代码,属于一劳永逸的解决方法。
注意:修改之后会有unknown encoding: cp0问题,百度说是版本anaconda2的bug,有人用了版本3说是可以解决这个unknown encoding: cp0问题,但是我换成用pycharm了(因为安装包是现成的)。
声明:文章是在看机器学习实战这本书时,自己出错的一些地方
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值