Sklearn 用户手册 一:机器学习初体验

来源:互联网 发布:淘宝客服每天工作内容 编辑:程序博客网 时间:2024/05/20 22:41

近期学着用python机器学习库Scikit-learn做一些小项目,翻文档时豁然发现,这篇用户手册它不仅仅是一篇用户手册,还集成了很多贴心的机器人生小感悟啊。于是便有了翻译她这个很小冒的念头。当然作为一名有追求的机器学习者,是不能做逐字逐句的翻译这种一下子就被识破的事情,所以决定。。几句并一句的翻,机智如我。

一: 当我们遇到一个机器学习问题

就解决问题而言,机器学习的思想与小学时候做的应用题并无两样,首先,需要清楚想要求解什么,其次,理清你的已知条件是什么,然后想方设法利用你的已知条件去得到结果。

So,根据机器学习想要的结果。可以把问题分为:分类/聚类问题,或者是回归问题。

分类和聚类:如给成绩分个A/B/C,数学语言为离散。

回归:不给分等,但是要求有具体成绩,是69.0、还是80.9. 数学语言为连续。

当然分类和聚类又有区别,如果事先告诉电脑80以上就是A,70-80就是B,它只用老老实实照着这个给定标准来,这就是分类。但是如果这次考试很难,老师也不知道大家考的怎么样啊,然后就说电脑你随便分吧,只要把成绩相近的放一起,然后分出三个等级出来,这就是聚类了。用机器学习的语言就是,分类模型给电脑的学习数据是有标签的,俗称label。而聚类的没有。


二:那就加载一个数据集看看吧

from sklearn import datasetsiris = datasets.load_iris()digits = datasets.load_digits()print digits.data[[  0.   0.   5. ...,   0.   0.   0.] [  0.   0.   0. ...,  10.   0.   0.] [  0.   0.   0. ...,  16.   9.   0.] ...,  [  0.   0.   1. ...,   6.   0.   0.] [  0.   0.   2. ...,  12.   0.   0.] [  0.   0.  10. ...,  12.   1.   0.]]
datasets是一个字典格式的数据集,包含了数据的信息以及他们的元数据信息,比如:

load_iris():  那朵著名的鸾尾花的数据

load_digits(): 可用于训练的数字图片数据集

digits.data: 数据集的特征,也就是矩阵X

digits.target: 数据集的标签,也就是矩阵y

data始终会是个二维矩阵,每一行是个样本,每一列是特征。每个样本的其它具体数据可以通过其它的方式得到。如:

digits.image[0]:第一张图片的数据信息,print一下可发现是个8*8维的数据


三:我们的目标是--争当最强算命师(学习与预测)

有了一堆X,还有了y,现在要做的就是找到一个适当的模型,输入X, 然后输出y。再给一个没见过的X,猜出y。sklearn里这两步基本就是通过fit()和predict()来做了,对于每个模型都如此。相信他们是为了更人性,绝对不是因为偷懒。举例:

<span style="font-size:14px;">from sklearn import svm</span>
<span style="font-size:14px;">#建立一个新模型clf = svm.SVC(gamma=0.001, C=100.)</span>
<span style="font-size:14px;">#喂入数据,为了验证模型的有效性,把最后一个样本去掉,以便在下一步用于预测clf.fit(digits.data[:-1], digits.target[:-1])</span>
<span style="font-size:14px;">#clf已经是个训练好的模型了,将最后一个数据放入其预测函数clf.predict(digits.data[-1])</span>


四:保存工作成果

这个模型你已经满意了,现在当然是希望能把它保存起来,否则每次都要重新训练,想想就很累啊。

import picklefrom sklearn.externals import joblib#存入变量s = pickle.dumps(clf)#load回来clf2 = pickle.loads(s)#存入文件joblib.dump(clf, 'whatever.pkl')#load回来clf = joblib.load('whatever.pkl')
使用joblib时,存下的是一系列的文件,包括每个变量。load的时候也要保证这堆东西还在一起。

0 0