Python机器学习库:Scikit-Learn简介
如果你是一名Python程序员,并且你正在寻找一个强大的库将机器学习引入你的项目,那么你可以考虑使用Scikit-Learn库。
在这篇文章中,你能得到scikit-learn库的概述,以及有关相关参考资料的获取方案。
它的诞生
Scikit-learn产生于David Cournapeau在2007年Google代码之夏的项目中。
后来Matthieu Brucher加入了这个项目,并把它作为他论文的一部分。2010年,在INRIA是得到了第一次公开(v0.1 beta),并于2010年1月下旬发布。
该项目现在有超过30个活跃的贡献者,并且从INRIA,Google,Tinyclues和Python软件基金会获得了赞助。
什么是Scikit-Learn?
Scikit-learn提供了一系列有监督和无监督的Python机器学习算法。
它的发行遵循BSD许可协议,并存在于众多Linux发行版当中,鼓励学术和商业用途。
该库基于SciPy库(Scientific Python)上,在使用scikit-learn之前必须安装包括:
- NumPy:基本的N维数组包
- SciPy:科学计算基础库
- Matplotlib:全面2D / 3D绘图库
- IPython:增强的交互式控制
- Sympy:符号数学
- Pandas:数据结构和分析
基于SciPy的模块或扩展常被命名为SciKits。因此,由于该模块提供了机器学习算法将其命名为scikit-learn。
这个版本的库的目的是为项目系统中的应用提供强大的支持。这意味着对诸如易用性,代码质量,协作,文档和性能等方面的深入考虑。
虽然接口是Python的,但 c-libraries对性能起着举足亲重的作用,例如数组和矩阵的操作, LAPACK, LibSVM,以及被谨慎使用的cython。
有什么特点?
库擅长数据建模。它不擅长数据的加载,操作和汇总。有关这些功能,请使用NumPy和Pandas。
scikit-learn提供的一些通用模型功能包括:
- 聚类(Clustering):用于分组如KMeans的未标记的数据。
- 交叉验证(Cross Validation):用于估计不可见数据的监督模型的性能。
- 数据集(Datasets):用于测试数据集和用于生成具有特定属性的数据集,以及用于研究模型行为。
- 降维(Dimensionality Reduction):用于减少汇总数据中的属性数量,可视化和特征选择,如主要成分分析。
- 集合方法(Ensemble methods):结合多个监督模型的预测。
- 特征提取(Feature extraction):用于提取图像和文本数据中的属性。
- 特征选择(Feature selection):用于识别创建监督模型的选取属性。
- 参数调整(Parameter Tuning):充分利用监督模型。
- 流形学习(Manifold Learning):用于总结和描绘复杂的多维数据。
- 监督模型(Supervised Models):广泛的支持包括但不限于广义线性模型,歧视分析,朴素贝叶斯,懒惰方法,神经网络,支持向量机和决策树。
示例:分类与回归实验
我在这里想给出一个例子,告诉大家使用这个库是多么简单。
在这个例子中,我们使用分类和回归分析决策树(CART)算法来模拟Iris flower数据集。
该数据集作为示例数据集提供给库并加载。分类器调整数据,然后对训练数据进行预测。
最后打印分类精度和混淆矩阵。
# 决策树分类样本
from sklearn import datasets
from sklearn import metrics
from sklearn.tree import DecisionTreeClassifie
# 加载iris数据集
dataset = datasets.load_iris()
# 对数据用CART模型拟合
model = DecisionTreeClassifier()
model.fit(dataset.data, dataset.target)
print(model)
# 做出预测
expected = dataset.target
predicted = model.predict(dataset.data)
# 总结模型拟合
print(metrics.classification_report(expected, predicted))
print(metrics.confusion_matrix(expected, predicted))
运行这个例子会产生下面的输出,根据一些常用度量和模糊矩阵的模型方案,显示训练模型的细节。
DecisionTreeClassifier(class_weight=None, criterion='gini', max_depth=None,
max_features=None, max_leaf_nodes=None, min_samples_leaf=1,
min_samples_split=2, min_weight_fraction_leaf=0.0,
presort=False, random_state=None, splitter='best')
precision recall f1-score support
0 1.00 1.00 1.00 50
1 1.00 1.00 1.00 50
2 1.00 1.00 1.00 50
avg / total 1.00 1.00 1.00 150
[[50 0 0]
[ 0 50 0]
[ 0 0 50]]
谁在使用它?
该scikit-learn页面列出INRIA,Mendeley,wise.io,Evernote的,巴黎高等电信学校和AWeber用户。
如果这仅仅是使用它的公司的一小部分,那么很可能有几十到几百大型组织正在使用这个库。
它具有良好的测试覆盖率和管理版本,适用于原型和生产项目。
资源
如果您有兴趣了解更多信息,请查阅Scikit-Learn主页上的相关文档资料。
您可以从github存储库获取代码,并在Sourceforge项目上找到可用的历史版本。
文档
我建议从快速入门教程开始,通过用户指南和示例库浏览您感兴趣的算法。
最终,scikit-learn是一个库,API参考是最佳的文档。
- 快速入门教程 http://scikit-learn.org/stable/tutorial/basic/tutorial.html
- 用户指南 http://scikit-learn.org/stable/user_guide.html
- API参考 http://scikit-learn.org/stable/modules/classes.html
- 示例图片库 http://scikit-learn.org/stable/auto_examples/index.html
文件
如果您有兴趣了解更多关于项目的信息,那么可用查阅这些论文:
- Scikit-learn: Machine Learning in Python (2011)
- API design for machine learning software: experiences from the scikit-learn project (2013)
图书
如果你正在寻找一本好书,我极力推荐《Building Machine Learning Systems with Python
》。写得很好,例子也很有趣。
- Learning scikit-learn: Machine Learning in Python (2013)
- Building Machine Learning Systems with Python (2013)
- Statistics, Data Mining, and Machine Learning in Astronomy: A Practical Python Guide for the Analysis of Survey Data (2014)
沮丧与Python机器学习?
在数分钟内开发你自己的模型
...只需几行scikit-learn代码
了解如何在我的新电子书: 机器学习掌握与Python
涵盖自学教程和端对端项目,如: 加载数据,可视化,建模,调优等等...
最后把机器学习带给 你自己的项目
跳过学者。结果。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法