[Machine Learning step by step] 1 统计学习:scikit-learn机器学习简介

译自scikit-learn官方文档,原文地址:http://scikit-learn.org/stable/tutorial/basic/tutorial.html

译者:李景鑫,微博:http://weibo.com/u/3322686494

非周期性更新,转载请注明出处。

本节内容

本节介绍机器学习术语并给出了简单的示例。

1.1 机器学习:

总体而言,所谓学习问题,是指观察由n个样本组成的集合,并根据这些数据来预测未知数据的性质。如果每一个样本数量大于一,比如,多维数据(又名,多元变量数据),这个样本则称为包含多个属性或特征

我们可以将学习问题分为如下几类:

一、有监督学习

这种情况下,数据是带有标注的(点此进入scikit-learn有监督学习页面)。有监督学习可分为两类:

 其一、分类:样本属于两个或者更多的类,我们希望学习已经标注的数据,从而将未标注的数据分类。例如,手写数字识别,我们将每个输入向量分到某个类别。从另外一个角度,也可以把分类问题看作是一种离散式(相对于连续)的有监督学习。在此,分类的数量是有限的,对于每一个样本,我们都试着给他们标注正确的类别。

其二、回归:如果我们想要的结果是由一个或者多个连续变量组成时,我们则称其为回归。例如,通过三文鱼的年龄和重量来推测它的长度。

二、无监督学习

这种情况下,训练数据是一个集合,该集合由未标注目标值的向量X组成。此类问题的目标有几种。要么是要将数据划分为相似的几组,这种叫做聚类;要么是确定数据的分布,这种叫做密度估计;要么是将数据从高维度空间投射到二、三维空间里,这种叫做可视化。(点此进入Scikit-Learn无监督学习页面)

训练集和测试集

机器学习会学习数据集的某些属性,并运用于新数据。这就是为什么习惯上会把数据分为两个集合,由此来评价算法的优劣。这两个集合,一个叫做训练集,我们从中获得数据的性质;一个叫做测试集,我们在此测试这些性质。

1.2. 载入数据集

scikit-learn自带了一些标准数据集,比如,分类问题有鸢尾花数据集数字数据集,回归问题有波士顿房价数据集

[python]  view plain copy print ?
  1. >>> from sklearn import datasets  
  2. >>> iris = datasets.load_iris()  
  3. >>> digits =datasets.load_digits()  

数据集是类似于字典的对象,其中存有全部数据以及关于这些数据的元数据。数据储存在.data成员中,该成员是一个含有n_samplesn_features的数列。对于有监督学习,解释性的变量存于.target成员中。不同数据集的更多细节请参阅相关章节

例如,对于数字数据集,digits.data给出了可以用来分类数字数据样本的特征。

[python]  view plain copy print ?
  1. >>> print digits.data   
  2. [[ 0.   0.   5. ...,  0.   0.   0.]  
  3.  [ 0.   0.   0. ..., 10.   0.   0.]  
  4.  [ 0.   0.   0. ..., 16.   9.   0.]  
  5.  ...,  
  6.  [ 0.   0.   1. ...,  6.   0.   0.]  
  7.  [ 0.   0.   2. ..., 12.   0.   0.]  
  8.  [ 0.   0.  10. ..., 12.   1.   0.]]  

digits.target则给出数字数据集的基本情况,也就是每张数字图像对应的编号。

[python]  view plain copy print ?
  1. >>> digits.target  
  2. array([012, ..., 898])  

数据数列的形状

尽管源数据形式各异,sklearn中的数据总是二维数列,有n_samplesn_features。在数字这个例子中,每一个样本都是8X8的规格。可由如下命令获取:

[python]  view plain copy print ?
  1. >>> digits.images[0]  
  2. array([[ 0.,   0.,   5.13.,   9.,   1.,  0.,   0.],  
  3.       [  0.,   0.13.,  15.,  10.15.,   5.,   0.],  
  4.       [  0.,   3.15.,   2.,   0.11.,   8.,   0.],  
  5.       [  0.,   4.12.,   0.,   0.,  8.,   8.,   0.],  
  6.       [  0.,   5.,  8.,   0.,   0.,  9.,   8.,   0.],  
  7.       [  0.,   4.11.,   0.,   1.12.,   7.,   0.],  
  8.       [  0.,   2.14.,   5.,  10.12.,   0.,   0.],  
  9.       [  0.,   0.,  6.,  13.,  10.,  0.,   0.,   0.]])  

这个简单的例子演示了如何将源数据转换为scikit-learn可以使用的数据。

1.3. 学习和预测

在数字数据集的例子中,给定一张图像,我们要去预测这个图像上的数字。已知有10个类别(从0到9),我们拟合估计器,让它去预测这个未知图像的类别。

在scikit-learn中,分类问题的估计器是一个Python对象。这个对象有两个方法,fit(X,y)以及predict(T)

以下是估计器的例子,sklearn.svm.SVC类实现了支持向量机分类。估计器的构造函数把模型的参量作为参数,不过目前为止,我们可以把估计器看作是一个黑匣子:

[python]  view plain copy print ?
  1. >>> from sklearn import svm  
  2. >>> clf = svm.SVC(gamma=0.001,C=100.)  

选择模型参数

在本例中,我们人为设置好gamma参数。当然自动为参数赋值也是有可能的,比如用网格搜索交叉检验

我们将估计器的实例命名为clf。现在它必须和模型拟合,也就是说,要从模型中将它学习出来。要做到这一点,可以将训练集数据传递给fit方法。以下我们将使用训练集中除了最后一张外所有的图像。

[python]  view plain copy print ?
  1. >>> clf.fit(digits.data[:-1],digits.target[:-1])   
  2. SVC(C=100.0, cache_size=200,class_weight=None, coef0=0.0, degree=3,  
  3.  gamma=0.001, kernel='rbf', max_iter=-1, probability=False,shrinking=True,  
  4.  tol=0.001, verbose=False)  
现在你可以预测新的值了,也就是说我们可以让分类器告诉我们该数据集最后一张图像的数字是什么(也就是没用来训练分类器的那张)。

[python]  view plain copy print ?
  1. >>> clf.predict(digits.data[-1])  
  2. array([8])  

图像如下:


如你所见,任务颇具挑战性:图像分辨度很低。你同意分类器的结论吗?

你可以运行并学习这个分类问题的完整例子:手写数字识别

 1.4. 模型持久化

可以用Python内建的持久化模型pickle将scikit的模型保存。

[python]  view plain copy print ?
  1. >>> from sklearn import svm  
  2. >>> from sklearn import datasets  
  3. >>> clf = svm.SVC()  
  4. >>> iris = datasets.load_iris()  
  5. >>> X, y = iris.data, iris.target  
  6. >>> clf.fit(X, y)   
  7. SVC(C=1.0, cache_size=200,class_weight=None, coef0=0.0, degree=3, gamma=0.0,  
  8.  kernel='rbf', max_iter=-1, probability=False, shrinking=True, tol=0.001,  
  9.  verbose=False)  
  10.    
  11. >>> import pickle  
  12. >>> s = pickle.dumps(clf)  
  13. >>> clf2 = pickle.loads(s)  
  14. >>> clf2.predict(X[0])  
  15. array([0])  
  16. >>> y[0]  
  17. 0  

在某些情况下,用joblib代替pickle可能更有意思(joblib.dump &joblib.load),因为对于大数据它效率更高,但只能保存在硬盘上,不能保存为字符串。

[python]  view plain copy print ?
  1. >>> from sklearn.externals importjoblib  
  2. >>> joblib.dump(clf,'filename.pkl')  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Machine Learning: Step-by-Step Guide To Implement Machine Learning Algorithms with Python By 作者: Rudolph Russell ISBN-10 书号: 1719528403 ISBN-13 书号: 9781719528405 出版日期: 2018-05-22 pages 页数: 106 This book contains illustrations and step-by-step explanations with bullet points and exercises for easy and enjoyable learning. Benefits of reading this book that you’re not going to find anywhere else: Introduction to Machine Learning Classification How to train a Model Different Models Combinations CHAPTER1 INTRODUCTION TO MACHINE LEARNING Theory What is machine learning? Why machine learning? When should you use machine learning? Types of Systems of Machine Learning Supervised and unsupervised learning Reinforcement Learning Batch Learning Online Learning Instance based learning Model-based learning Bad and Insufficient Quantity of Training Data Poor-Quality Data Irrelevant Features Testing Overfitting the Data Underfitting the Data EXERCISES SUMMARY REFERENCES CHAPTER2 CLASSIFICATION Installation The MNIST Measures of Performance Confusion Matrix Recall Recall Tradeoff ROC Multi-class Classification Training a Random Forest Classifier Error Analysis Multi-label Classifications Multi-output Classification EXERCISES REFERENCES CHAPTER3 HOW TO TRAIN A MODEL Linear Regression Computational Complexity Gradient Descent Batch Gradient Descent Stochastic Gradient Descent Mini-Batch Gradient Descent Polynomial Regression Learning Curves Regularized Linear Models EXERCISES SUMMARY REFERENCES Chapter4 Different models combinations
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值