http://blog.csdn.net/pipisorry/article/details/52251305

scikit-learn 教程导航

简介:使用scikit-learn进行机器学习

  • 机器学习:问题设定
  • 加载样例数据集
  • 学习和预测
  • 模型持久化
  • 惯例

统计学习教程

  • 统计学习:scikit-learn中的配置和estimator对象
  • 有监督学习:预测高维观测对象
  • 模型选择:选择estimator和参数
  • 无监督学习:寻找数据特征
  • 连接所有流程
  • 帮助

文本分析

  • 设置
  • 加载“Twenty Newsgroups”数据集
  • 抽取text文件的特征
  • 训练分类器
  • 建立管道
  • 评估测试集的表现
  • 使用网格搜索调整参数
  • 练习1:语言识别
  • 练习2:影评情感分析
  • 练习3:CLI文本分类应用
  • 路在何方

选择合适的estimator

通常机器学习最难的一部分是选择合适的estimator。

不同的estimator适用于不同的数据集和问题。

在本节中,sklearn官方文档提供了一个图,可以快速地根据你的数据和问题选择合适的estimator。单击相应的区域还可以获得更具体的内容。

推荐到官网看看flowchart  ,很有意思,具有简单的普适性


其他的资源,视频和讨论

  • python 统计学新手
  • 其他的教程
  • 视频

具体参见官方文档External Resources, Videos and Talks — scikit-learn 0.24.2 documentation

[scikit-learn Tutorials]*

皮皮blog

如何开启机器学习之路

通常用Pandas包去进行主数据分析会比较好,而且这很容易你自己完成。所以,让我们集中精力在实现上。为了确定性,我们假设有一个特征-对象矩阵作为输入,被存在一个*.csv文件中。

数据加载

首先,数据要被加载到内存中,才能对其操作。Scikit-Learn库在它的实现用使用了NumPy数组,所以我们将用NumPy来加载*.csv文件。让我们从UCI Machine Learning Repository下载其中一个数据集。

import numpy as np
import urllib
# url with dataset
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
# download the file
raw_data = urllib.urlopen(url)
# load the CSV file as a numpy matrix
dataset = np.loadtxt(raw_data, delimiter=",")
# separate the data from the target attributes
X = dataset[:,0:7]
y = dataset[:,8]
我们将在下面所有的例子里使用这个数据组,换言之,使用X特征物数组和y目标变量的值。

数据标准化

我们都知道大多数的梯度方法(几乎所有的机器学习算法都基于此)对于数据的缩放很敏感。因此,在运行算法之前,我们应该进行标准化,或所谓的规格化。标准化包括替换所有特征的名义值,让它们每一个的值在0和1之间。而对于规格化,它包括数据的预处理,使得每个特征的值有0和1的离差。Scikit-Learn库已经为其提供了相应的函数。

from sklearn import preprocessing
# normalize the data attributes
normalized_X = preprocessing.normalize(X)
# standardize the data attributes
standardized_X = preprocessing.scale(X)

特征的选取

毫无疑问,解决一个问题最重要的是是恰当选取特征、甚至创造特征的能力。这叫做特征选取和特征工程。虽然特征工程是一个相当有创造性的过程,有时候更多的是靠直觉和专业的知识,但对于特征的选取,已经有很多的算法可供直接使用。如树算法就可以计算特征的信息量。

from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)
# display the relative importance of each attribute
print(model.feature_importances_)

其他所有的方法都是基于对特征子集的高效搜索,从而找到最好的子集,意味着演化了的模型在这个子集上有最好的质量。递归特征消除算法(RFE)是这些搜索算法的其中之一,Scikit-Learn库同样也有提供。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
# create the RFE model and select 3 attributes
rfe = RFE(model, 3)
rfe = rfe.fit(X, y)
# summarize the selection of the attributes
print(rfe.support_)
print(rfe.ranking_)

算法的开发

正像我说的,Scikit-Learn库已经实现了所有基本机器学习的算法。让我来瞧一瞧它们中的一些。

逻辑回归

大多数情况下被用来解决分类问题(二元分类),但多类的分类(所谓的一对多方法)也适用。这个算法的优点是对于每一个输出的对象都有一个对应类别的概率。

from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

朴素贝叶斯

它也是最有名的机器学习的算法之一,它的主要任务是恢复训练样本的数据分布密度。这个方法通常在多类的分类问题上表现的很好。

from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
model = GaussianNB()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

k-最近邻

kNN(k-最近邻)方法通常用于一个更复杂分类算法的一部分。例如,我们可以用它的估计值做为一个对象的特征。有时候,一个简单的kNN算法在良好选择的特征上会有很出色的表现。当参数(主要是metrics)被设置得当,这个算法在回归问题中通常表现出最好的质量。

from sklearn import metrics
from sklearn.neighbors import KNeighborsClassifier
# fit a k-nearest neighbor model to the data
model = KNeighborsClassifier()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

决策树

分类和回归树(CART)经常被用于这么一类问题,在这类问题中对象有可分类的特征且被用于回归和分类问题。决策树很适用于多类分类。

from sklearn import metrics
from sklearn.tree import DecisionTreeClassifier
# fit a CART model to the data
model = DecisionTreeClassifier()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

支持向量机

SVM(支持向量机)是最流行的机器学习算法之一,它主要用于分类问题。同样也用于逻辑回归,SVM在一对多方法的帮助下可以实现多类分类。

from sklearn import metrics
from sklearn.svm import SVC
# fit a SVM model to the data
model = SVC()
model.fit(X, y)
print(model)
# make predictions
expected = y
predicted = model.predict(X)
# summarize the fit of the model
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))

除了分类和回归问题,Scikit-Learn还有海量的更复杂的算法,包括了聚类, 以及建立混合算法的实现技术,如Bagging和Boosting。

如何优化算法的参数

在编写高效的算法的过程中最难的步骤之一就是正确参数的选择。一般来说如果有经验的话会容易些,但无论如何,我们都得寻找。幸运的是Scikit-Learn提供了很多函数来帮助解决这个问题。

作为一个例子,我们来看一下规则化参数的选择,在其中不少数值被相继搜索了:

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.grid_search import GridSearchCV
# prepare a range of alpha values to test
alphas = np.array([1,0.1,0.01,0.001,0.0001,0])
# create and fit a ridge regression model, testing each alpha
model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas))
grid.fit(X, y)
print(grid)
# summarize the results of the grid search
print(grid.best_score_)
print(grid.best_estimator_.alpha)

有时候随机地从既定的范围内选取一个参数更为高效,估计在这个参数下算法的质量,然后选出最好的。

import numpy as np
from scipy.stats import uniform as sp_rand
from sklearn.linear_model import Ridge
from sklearn.grid_search import RandomizedSearchCV
# prepare a uniform distribution to sample for the alpha parameter
param_grid = {'alpha': sp_rand()}
# create and fit a ridge regression model, testing random alpha values
model = Ridge()
rsearch = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)
rsearch.fit(X, y)
print(rsearch)
# summarize the results of the random parameter search
print(rsearch.best_score_)
print(rsearch.best_estimator_.alpha)

至此我们已经看了整个使用Scikit-Learn库的过程,除了将结果再输出到一个文件中。这个就作为你的一个练习吧,和R相比Python的一大优点就是它有很棒的文档说明。

[基于 Python 和 Scikit-Learn 的机器学习介绍]

皮皮blog

scikit-learn机器学习实例

[基于Scikit-Learn的五个文本分类案例研究]

[Kaggle入门——使用scikit-learn解决DigitRecognition问题]

from: Scikit-learn:scikit-learn快速教程及实例_皮皮blog-CSDN博客

ref:  [[译]使用scikit-learn进行机器学习的简介(教程1)]

[[译]针对科学数据处理的统计学习教程(scikit-learn官方教程2)]

Scikit-learn:scikit-learn快速教程及实例相关推荐

  1. CAD教程:CAD快速查找替换实例教程

    浩辰CAD软件中除了CAD绘图还有一些针对CAD图纸的操作,比如CAD快速查找替换可以帮助我们快速的在CAD图纸中找到相应的文字以及对齐进行替换操作,以下的CAD教程我们就给CAD制图初学入门者来介绍 ...

  2. unity learn—— ML_Agent:Hummingbirds中文教程 自译(六——准备训练)

    由于官方教程是全英版,本文为根据个人理解做的中文版,并对出现的相关问题进行了解答 (能力有限,有问题的地方还望指出,同时欢迎志同道合的朋友参与讨论,谢谢!) 官方教程:https://learn.un ...

  3. photoshop抠图技巧之快速抠毛发实例教程

    打开一张图片,我们现在任务是将图片中的人物包括头发全部抠出来. photoshop抠图技巧之快速抠毛发实例教程 在工具样上依次点击"选择"-"主体"将蓝图片主体 ...

  4. 发布《Linux工具快速教程》

    发布<Linux工具快速教程> 阶段性的完成了这本书开源书籍,发布出来给有需要的朋友,同时也欢迎更多的朋友加入进来,完善这本书: 本书Github地址:https://github.com ...

  5. python的spider程序下载_PHPspider爬虫10分钟快速教程(内附python教程分享)

    说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的.php一贯简洁.易用,亲测使用PHPspider框架10分钟就能写出一个简单的爬虫程序. 一.PHP环境安装 和 ...

  6. FX Composer 2 中文版快速教程

    本文版权归 博客园 Baesky 所有!转载请按如下方式于明显位置标明原文作者及出处,以示尊重!! ========================= 作者:Baesky 原文:FX Composer ...

  7. C#基础教程-c#实例教程,适合初学者

    C#基础教程-c#实例教程,适合初学者. 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和W ...

  8. 正点原子提供免费开源的的连接机智云平台开发教程和实例源码

    相信使用过云平台开发物联网产品的同学对国内领先的机智云平台都不陌生了.2017年6月,正点原子与机智云正式签订战略合作,推出机智云系列教程,所有正点原子的开发板都可以轻松连云了,几小时搞定远程控制. ...

  9. fluentd教程(含实例)

    fluentd是一个开源的日志收集系统,能够收集各式各样的日志, 并将日志转换成方便机器处理的json格式. 安装 不同操作系统的安装方式不同,具体可以参考: 官方文档: Installation 另 ...

  10. python爬虫十分钟速学教程_PHPspider爬虫10分钟快速教程

    说到做爬虫,大家都可能第一时间想到的是python,其实php也是可以用来写爬虫程序的.php一贯简洁.易用,亲测使用PHPspider框架10分钟就能写出一个简单的爬虫程序. 一.PHP环境安装 和 ...

最新文章

  1. 改名 Meta,打元宇宙牌,老龄化的 Facebook 能否再换新颜
  2. Mysql my.cnf配置文件记录
  3. firefox英文网页乱码解决方法
  4. [NTU-Machine-learning-note]1 Introduction(2)
  5. hdu 2275 Kiki Little Kiki 1 水题
  6. android转web,Android 转 web app 笔记一:Touch事件
  7. tf.keras.layers.Permute
  8. boost 容器tuple 信号signal2测试
  9. 正则的简单学习与应用
  10. mysql选择前12周_第十二周作业
  11. Ubuntu 11.10 系统启动默认进入终端
  12. 软件测试之常见性能测试流程
  13. python中lstrip函数_python中strip(),lstrip(),rstrip()函数的使用讲解
  14. Linux dos攻击服务器,Linux服务器如何防止DoS攻击
  15. MacOS 显示隐藏文件快捷键
  16. 牛客小白月赛2 H 武 【Dijkstra】
  17. Linux系统中三处profile的作用
  18. 蓝叠模拟器的通讯录位置
  19. 软件如何进行压力测试,软件如何进行压力测试?
  20. C# 判断两张图片是否一致,极快速。

热门文章

  1. DesiredCapabilities内容详解--Appium服务关键字
  2. ArcEngine 固定比例放大缩小
  3. 最常用的10种CSS BUG解决方法与技巧-浏览器兼容教程
  4. 经典英语1000句(转)
  5. 开发框架:AdminLTE
  6. internet信息服务(IIS)管理器 在哪里?
  7. Struts2.1.6 + Spring2.5+Hibernate3.2整合
  8. python学习 数据类型之序列
  9. postgresql查看表的创建者和表的权限
  10. 【学术】施一公分享自身经验:如何提高自己的专业英文文献阅读能力