这个分析笔记由Jake Vanderplas编辑汇总。 源代码和license文件在GitHub。 中文翻译由派兰数据在派兰大数据分析平台上完成。 源代码在GitHub上。
在本节中会介绍Scikit-learn的基本原理,它是一个集成了很多机器学习工具并被广泛使用的包,用Python实现。详情请参考http://scikit-learn.org 。
Scikit-Learn是一个采用简洁并灵活的 API,向用户提供广为人知的机器学习算法的Python包。它由上百个贡献者所开发,并且已经广泛运用至工业界和学术界中。
Scikit-Learn依赖于Python的 NumPy (Numerical Python) 和 SciPy (Scientific Python)库,它们为Python中高效的数值和科学计算提供了支持。scikit-learn本身并不是为极大的数据集量身定做的,但是也有一些工作是基于此的。
在这个教程中,我将会主要关注于Scikit-learn中,运用于中小型数据集的问题。
In [1]:
%matplotlib inline
# 设置 seaborn 绘图库的默认参数.
# 可以安全地注释掉
import seaborn; seaborn.set()
In [2]:
# 导入样例
import matplotlib.pyplot as plt
from fig_code import plot_sgd_separator
plot_sgd_separator()
这些可能看起来是很小的任务,但是它体现了一个非常重要的概念。通过画出分割线,我们已经学习了一个可以生成新数据的模型。如果您往这张图上添加一个没有被分类的点,这个算法现在可以预测它应是一个红色的点还是一个蓝色的点。
如果你希望看到生成这个的源代码,你也可以在fig_code
文件夹中打开代码,或者你可以用%load
命令加载这段代码。
下一个简单的例子我们看一个回归的算法,为一组数据拟合一条最佳的直线。
In [4]:
from fig_code import plot_linear_regression
plot_linear_regression()
这也是一个从数据中建立模型的例子,所以这个模型可以被用来生成新的数据。这个模型从训练数据中被学习出来,而且可以用来预测测试数据的结果:我们给出一个点的x坐标值,这个模型可以让我们去预测对应的y坐标值。同样的,这看起来是一个简单的例子,但是它是机器学习算法的一个基础的操作。
在Scikit-learn中,大多数的机器学习算法的数据在二维的数组或者矩阵中存储。这些数据可能是numpy
数组,在某些情况下也可能是scipy.sparse
矩阵。数组的大小应该是[样本数,特征数]
(【译者注】sample - 样本,feature - 特征)
特征数必须提前确定。但是对于给定的样本,特征可以是很大(百万级)的一个零占大多数的集合。这种情况下,scipy.sparse
矩阵就派上了用场,用这个矩阵比numpy矩阵在存储上会更加高效。
(图片来自 Python Data Science Handbook) !
In [5]:
from IPython.core.display import Image, display
display(Image(filename='images/iris_setosa.jpg'))
print("Iris Setosa\n")
display(Image(filename='images/iris_versicolor.jpg'))
print("Iris Versicolor\n")
display(Image(filename='images/iris_virginica.jpg'))
print("Iris Virginica")
In [6]:
from sklearn.datasets import load_iris
iris = load_iris()
In [7]:
iris.keys()
Out[7]:
In [8]:
n_samples, n_features = iris.data.shape
print((n_samples, n_features))
print(iris.data[0])
In [9]:
print(iris.data.shape)
print(iris.target.shape)
In [10]:
print(iris.target)
In [11]:
print(iris.target_names)
这个数据是四维的,但是我们可以使用简单的scatter-plot一次显示出两维的数据:
In [12]:
import numpy as np
import matplotlib.pyplot as plt
x_index = 0
y_index = 1
# 这段代码使用iris的名字来标注颜色条(colorbar)
formatter = plt.FuncFormatter(lambda i, *args: iris.target_names[int(i)])
plt.scatter(iris.data[:, x_index], iris.data[:, y_index],
c=iris.target, cmap=plt.cm.get_cmap('RdYlBu', 3))
plt.colorbar(ticks=[0, 1, 2], format=formatter)
plt.clim(-0.5, 2.5)
plt.xlabel(iris.feature_names[x_index])
plt.ylabel(iris.feature_names[y_index]);
它们分为如下三种:
sklearn.datasets.load_*
去下载它sklearn.datasets.fetch_*
中找到。sklearn.datasets.make_*
中找到你可以通过IPython的TAB自动补全来发现可能的数据集生成和加载工具。在从sklearn
导入datasets
之后,
键入
datasets.load_ + TAB
或者
datasets.fetch_ + TAB
或者
datasets.make_ + TAB
可以看到一列函数的组合。
In [13]:
from sklearn import datasets
In [14]:
# Type datasets.fetch_<TAB> or datasets.load_<TAB> in IPython to see all possibilities
# datasets.fetch_
In [15]:
# datasets.load_
在下一节,我们将会使用一些数据集来研究机器学习的基本规则。