第一次在大神云集的CSDN写博客,以前都是在新浪上随便写一写,当作平时的遇到的一些问题的总结。
自己从这里学到了很多知识,也解决了很多问题。
自学的时候会遇到很多问题,由于没有时间系统的学习知识,都是遇到什么问题就查什么,所以多去动手查资料还是很重要的。
学习的过程就是需要不断的去发现问题,解决问题。
再次声明自己也是新手,遇到的一些问题在大牛看来都不值一提,所以在网上也经常找不到解决的办法,其实这样也锻炼我们自己动手思考的能力,凡事都有好坏,我写这个大部分还是记录自己思考的进程,也请大家多指教。
废话不多说,开始切入正题。
python的开发环境搭建,网上已经有很多教程什么的了,而且基本上都是可行的。我个人还是推荐:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
廖雪峰的博客,环境搭建和一些基本知识都有。大概看一遍,了解一下,动手去做的时候,遗忘的再回去看。
下面我主要介绍下,我学习《机器学习实战》这本书遇到的一些问题和解决办法。
首先是安装numpy。
我的python版本是2.7.10一开始装的numpy版本是numpy—1.5,后来装matplotlib的时候提示版本太低,后来又陆续装了1.6,1.7,1.8,还好1.8可以正常使用了。
http://sourceforge.net/projects/numpy/files/NumPy/这里各个版本的都有。
下载的exe的直接运行就可以。
直接下一步下一步完成就可以了,还可以通过pip install **.whl来安装,但是不知道为什么我安装别的都行就是安装不了numpy,现在不管它了,反正可以通过其他办法安装。
需要注意的是我的电脑是64位的但是安装numpy的时候是选择的32位的安装的。
哎 本人也是新手有好多不懂的,要是大神看到了也帮我回答下。
最后import numpy 没问题就行了!
装上numpy后,我也是迫不及待的想跑一下程序试试,就把程序清单2.0(其实没有2.0,它也算不得一个程序,因为在2.1之前,就称它为清单2.0吧)我遇到了第一的问题,直接导入(import kNN)提示找不到这个文件。原因是没有指明路径,python不知道你的这个文件在哪。
解决的办法有两个(就我目前知道的):一个是把kNN.py保存到python的安装目录下,这样的话可以直接运行。
第二个是实用sys命令添加一个目录。
>>> import sys
>>> sys.path.append('D:\Komodospace')
>>> import Text
Hello World
这样就可以在python自带的python GUI中导入模板了。
>>> import kNN
>>> group,labels = kNN.createDataSet()
>>> group
array([[ 1. , 1.1],
[ 1. , 1. ],
[ 0. , 0. ],
[ 0. , 0.1]])
>>> labels
['A', 'A', 'B', 'B']
刚开始就会遇到很多问题,一些函数不知道是做什么的,最后发王道,尽管它是英文的。
python 2.7.10函数文档
想程序清单2.1中的shape,tile(在numpy文档里面),sorted函数等等。
numpy官方文档下载
程序2.1亲测可行!!
>>> import kNN
>>> group,labels = kNN.createDataSet()
>>> group
array([[ 1. , 1.1],
[ 1. , 1. ],
[ 0. , 0. ],
[ 0. , 0.1]])
>>> labels
['A', 'A', 'B', 'B']
>>> kNN.classify0([0,0],group,labels,3)
'B'
>>> kNN.classify0([1,1],group,labels,3)
'A'
正如书中所说,这些代码只是测试用的,实际没有任何意义,不过自己测试成功还是很开心的。接下来的程序2.2就是需要导入数据,为接下来的kNN算法实战做准备了。
程序2.2有点小问题,就是numpy.zeros生成的数据不能接受字符串赋值,没有太好解决的办法,网上有位大牛做了简单的修改,我贴出来大家也指导我下,因为我不知道为什么。
def file2matrix(filename):
fr = open(filename)
numberOfLines = len(fr.readlines()) #get the number of lines in the file
returnMat = zeros((numberOfLines,3)) #prepare matrix to return
classLabelVector = [] #prepare labels return
fr = open(filename)
index = 0
for line in fr.readlines():
line = line.strip()
listFromLine = line.split('\t')
returnMat[index,:] = listFromLine[0:3]
classLabelVector.append(int(listFromLine[-1]))
index += 1
return returnMat,classLabelVector
python的基本语法还是比较重要的,否则读起程序来还是很费劲的。
列表,元组的迭代,赋值以及别的一些特性,还有对字典的排序都需要自己提前学习下。
程序中用到的代码和数据,网上的大神也给了,我就分享下。
[《机器学习实战》源代码](http://pan.baidu.com/s/13G55O
>>> datingDataMat,datingLabels = kNN.file2matrix('datingTestSet2.txt')
>>> datingDataMat
array([[ 4.09200000e+04, 8.32697600e+00, 9.53952000e-01],
[ 1.44880000e+04, 7.15346900e+00, 1.67390400e+00],
[ 2.60520000e+04, 1.44187100e+00, 8.05124000e-01],
...,
[ 2.65750000e+04, 1.06501020e+01, 8.66627000e-01],
[ 4.81110000e+04, 9.13452800e+00, 7.28045000e-01],
[ 4.37570000e+04, 7.88260100e+00, 1.33244600e+00]])
>>> datingLabels[0:20]
[3, 2, 1, 1, 1, 1, 3, 3, 1, 3, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3]
程序2.2亲测可行
今天先写到这,欢迎大家指教,后续还会有自己对机器学习实战和python的学习总结。