标签:
由本人能力所限,本文不注重原理,主要内容是如何运用这种技术。
数据挖掘和机器学习是做什么用的?
主要是识别和预测。手写输入、人脸识别、指纹识别都是基于识别的。预测的就更多了,股票、天气等等。
机器学习的一般作用原理
一般来讲,给出条件和推导过程,就能推出结果。
数据作为条件,对数据处理的方法就是推导过程,经推导得到的目标数据即为我们需要的结果。
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 “hello world”而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
标签:
原文地址:http://www.cnblogs.com/mahyblog/p/5814242.html