首页 > 代码库 > 机器学习实践初步总结
机器学习实践初步总结
由本人能力所限,本文不注重原理,主要内容是如何运用这种技术。
数据挖掘和机器学习是做什么用的?
主要是识别和预测。手写输入、人脸识别、指纹识别都是基于识别的。预测的就更多了,股票、天气等等。
机器学习的一般作用原理
一般来讲,给出条件和推导过程,就能推出结果。
数据作为条件,对数据处理的方法就是推导过程,经推导得到的目标数据即为我们需要的结果。
x1=1,x2=2作为条件,x1+x2是推导方法,结果是3。当然只要懂加法,无论条件怎么变化,上面那个算式都能准确的预测结果。
真实的情况往往是我们有一批数据作为条件,推导方法并不明确。
正是通过机器学习技术来得出推导的方法。
机器学习的一般流程
(1)收集数据
(2)准备数据
(3)分析数据
(4)训练算法
(5)测试算法
(6)使用算法
参见《机器学习实战》一书。
机器学习实践
(1)工具及环境
市面上的书籍以python和R语言为例的居多。本文以python为例,操作系统为windows。
python语言环境一般以2.7和3.5居多,又分为32版本和64位版本。
环境搭建这里给初学者造成的困扰最多。本人也是得同事朱波的指点才走出困境。
一看网上的介绍多是选择下载.exe,点击安装即可。安装完成后会出现各种版本不兼容的问题。如下错误:
from ._sparsetools import csr_tocsc, csr_tobsr, csr_count_blocks, \
ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
还有一些是缺少vc编译环境等莫名其妙的错误。
python环境搭建:
官网上下载https://www.python.org/downloads/
python3.5 64位版本。现在使用32位系统的开发人员比较少了。当然,你的系统是32位的就要选择32的python环境。
很多同学装的python2.7的环境,建议您升级。python2.7的环境可能(只是可能)在安装sklearn库的时候会造成版本不兼容的问题。
2.7和3.5的版本在语法上有些不同,如python2.5打印使用print “helloworld”而python3.5写法是print(“hello world”)。
依赖库的安装:
numpy:处理数值数组和矩阵运算得基础库。
scipy:使用NumPy做科学计算的库。
matplotlib:数学绘图的语言扩展。
pandas:数据格式化处理工具,也是基于NumPy的。
python-sklearn:机器学习与数据挖掘的算法库。
库的安装方法:
不建议下载exe文件点击下一步安装,一是容易漏掉一些依赖的库导致安装不成功,二是容易安装上一些不兼容的库。
建议采用pip工具安装。
切换目录到python的环境目录下,找到script文件夹,当然也可以将此文件夹配置到环境变量中。执行pip install 命令,如下图:
本人本地使用的是zwpython,里面已经集成了很多库。其它库的安装方法以此类推。当然,要在您的计算机已连接互联网的状态下这样安装。
开发使用的IDE:
用eclipse的python插件是可以的。
JetBrains PyCharm也是不错的选择。
zwpython貌似网上的下载资源没有了。
IDE的安装和选择就不在赘述,比较简单,搜索下载安装即可。
笔者本地装的是PyCharm和zwpython。
一个例子:
足球比赛的预测。如果真的准确,呵呵,你懂的。一般足球联赛有积分、排名、两队曾经的比赛结果、还有近6场比赛的胜负平等等数据。
(1)收集数据
以某彩票网站数据为例:
可以使用PQuery或者httplib2和lxml去解析网页信息并抓取数据。
抓取信息代码示例如下:
from lxml import etree response, content = http.request(‘http://www.xxxxxx.com’, ‘GET‘)
|
lxml解析html网上示例很多。
抓取完成后可将数据保存为csv文件或者保存到mysql数据库中备用均可。
这里就不贴完整的代码了。
(2)准备数据
经过第一步抓取来的数据整理成了一个csv文件,如下表:
win | draw | lost | win_rq | draw_rq | lost_rq | jiaozhanscore | dorder | d_score | resulenum |
1.29 | 4.7 | 7.1 | 2.02 | 3.55 | 2.84 | 6 | 7 | 7 | 1 |
2.26 | 3.1 | 2.75 | 5.15 | 4 | 1.46 | 6 | -2 | -3 | 1 |
2.4 | 3.15 | 2.55 | 5.5 | 4.2 | 1.41 | 6 | -7 | -7 | 1 |
1.81 | 3.5 | 3.45 | 3.47 | 3.75 | 1.74 | 10 | 4 | 4 | -1 |
3.13 | 3.15 | 2.03 | 1.58 | 3.7 | 4.45 | 4 | -12 | -13 | 0 |
1.62 | 3.8 | 4.02 | 2.9 | 3.65 | 1.96 | 2 | 10 | 11 | 2 |
1.57 | 3.65 | 4.6 | 2.95 | 3.35 | 2.04 | 6 | 1 | 1 | 3 |
1.24 | 4.9 | 8.5 | 1.88 | 3.6 | 3.13 | 12 | 7 | 6 | -1 |
1.83 | 3.42 | 3.45 | 3.52 | 3.8 | 1.72 | 6 | 1 | 3 | -1 |
6 | 4.3 | 1.37 | 2.53 | 3.55 | 2.22 | -2 | -2 | -2 | -1 |
5.4 | 4.35 | 1.4 | 2.42 | 3.45 | 2.35 | 2 | -16 | -17 | -2 |
3.35 | 3.15 | 1.95 | 1.63 | 3.6 | 4.2 | 6 | -2 | -1 | 1 |
4.3 | 3.85 | 1.57 | 2.04 | 3.65 | 2.75 | 0 | -10 | -8 | -1 |
3.1 | 3.4 | 1.95 | 1.63 | 3.8 | 3.95 | 4 | -12 | -10 | -2 |
3.15 | 3.05 | 2.08 | 1.55 | 3.95 | 4.32 | -2 | -4 | -5 | 1 |
2.6 | 3.2 | 2.32 | 6.4 | 4.3 | 1.35 | 6 | -3 | -3 | 2 |
2.44 | 3.25 | 2.44 | 5.75 | 4.25 | 1.39 | 0 | 3 | 1 | 3 |
1.59 | 3.6 | 4.5 | 3.05 | 3.32 | 2 | 8 | 7 | 6 | 0 |
1.34 | 4.5 | 6.25 | 2.15 | 3.5 | 2.64 | 14 | 1 | 0 | -1 |
最后一列(resulenum)为比赛的结果,主队赢球的数量。前面几列为双方球队几个维度的实力数据。
准备数据相关代码:
import pandas as pd
|
(3)分析数据
略
(4)训练算法
from sklearn import cross_validation from sklearn.ensemble import RandomForestClassifier import datetime clf = RandomForestClassifier(n_estimators = 100)#随机森林 clf = clf.fit(data_train, target_train)#训练算法 |
简单吧,就一个fit()函数。
(5)测试算法
pred = clf.predict(data_test)#将测试数据集传入,用于计算准确度,下面打印的是算法的得分情况 print("%s Score: %0.2f" % (‘forest’,clf.score(data_test, target_test))) |
输出:
forest Score: 0.19 forest Cross Avg. Score: 0.25 (+/- 0.23) |
可以看到得分很低,0.19,命中率19%。嘻嘻,不如蒙的准。。。
(6)使用算法
再预测8场比赛,数据如下:
win | draw | lost | win_rq | draw_rq | lost_rq | jiaozhanscore | dorder | d_score |
3.7 | 3.45 | 1.76 | 1.79 | 3.5 | 3.52 | 6 | -6 | -10 |
2.89 | 2.93 | 2.26 | 1.46 | 3.8 | 5.5 | 10 | -3 | -2 |
3.24 | 3.4 | 1.9 | 1.66 | 3.75 | 3.84 | -4 | -13 | -14 |
1.58 | 3.9 | 4.16 | 2.78 | 3.65 | 2.02 | 0 | 6 | 6 |
1.92 | 3.2 | 3.38 | 4.15 | 3.55 | 1.65 | -2 | 11 | 9 |
3.52 | 3.65 | 1.75 | 1.8 | 3.7 | 3.3 | -2 | -3 | -1 |
3.76 | 3.5 | 1.73 | 1.82 | 3.75 | 3.2 | 2 | -4 | -6 |
2.98 | 3.15 | 2.1 | 1.54 | 3.95 | 4.4 | -6 | 4 | 3 |
代码:
df = pd.read_csv(‘ d:\\sklearn\\csv\\20160827_prej1.csv‘) |
输出:
[ 1 1 2 0 -1 0 0 1] |
有些同学可能会问,你这些数据都是什么含义啊,其实具体含义对于学习机器学习本身并不重要。大可把它们理解为长方体的长宽高,或者预测天气的温度、湿度、气压等数据。
关于机器学习的算法和原理推荐大家读《机器学习实战》一书。另外,拿这么简单数据预测比赛并不靠谱,请不要误入歧途。
其它资料:
pandas入门:http://www.cnblogs.com/chaosimple/p/4153083.html
sklearn学习两篇:
http://blog.csdn.net/yuanyu5237/article/details/44278759
http://blog.csdn.net/a6225301/article/details/50484604
机器学习实践初步总结