机器学习:问题设置
一般来说,一个学习问题通常会考虑一系列 n 个 样本 数据,然后尝试预测未知数据的属性。 如果每个样本是 多个属性的数据 (比如说是一个多维记录),就说它有许多“属性”,或称 features(特征) 。
我们可以将学习问题分为几大类:
- 监督学习 , 其中数据带有一个附加属性,即我们想要预测的结果值.
- 分类 : 样本属于两个或更多个类,我们想从已经标记的数据中学习如何预测未标记数据的类别。 分类问题的一个例子是手写数字识别,其目的是将每个输入向量分配给有限数目的离散类别之一。 我们通常把分类视作监督学习的一个离散形式(区别于连续形式),从有限的类别中,给每个样本贴上正确的标签。
- 回归 : 如果期望的输出由一个或多个连续变量组成,则该任务称为 回归 。 回归问题的一个例子是预测鲑鱼的长度是其年龄和体重的函数。
- 无监督学习, 其中训练数据由没有任何相应目标值的一组输入向量x组成。这种问题的目标可能是在数据中发现彼此类似的示例所聚成的组,这种问题称为 聚类 , 或者,确定输入空间内的数据分布,称为 密度估计 ,又或从高维数据投影数据空间缩小到二维或三维以进行 可视化 .
训练集和测试集
机器学习是从数据的属性中学习,并将它们应用到新数据的过程。 这就是为什么机器学习中评估算法的普遍实践是把数据分割成 训练集 (我们从中学习数据的属性)和 测试集 (我们测试这些性质)。
加载示例数据集
scikit-learn 提供了一些标准数据集,例如 用于分类的 iris 和 digits 数据集 和 波士顿房价回归数据集 .
from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()
可以获取很多数据,例如图中所示,按上面的方法既可以获取到数据。
数据集是一个类似字典的对象,它保存有关数据的所有数据和一些元数据。 该数据存储在 .data
成员中,它是 n_samples, n_features
数组。 在监督问题的情况下,一个或多个响应变量存储在 .target
成员中。
数据数组的形状
数据总是二维数组,形状 (n_samples, n_features)
,尽管原始数据可能具有不同的形状。
学习和预测
在数字数据集的情况下,任务是给出图像来预测其表示的数字。 我们给出了 10 个可能类(数字 0 到 9)中的每一个的样本,我们在这些类上 拟合 一个 估计器 ,以便能够 预测 未知的样本所属的类。
在 scikit-learn 中,分类的估计器是一个 Python 对象,它实现了 fit(X, y)
和 predict(T)
等方法。
估计器的一个例子类 sklearn.svm.SVC
,实现了 支持向量分类 。 估计器的构造函数以相应模型的参数为参数,但目前我们将把估计器视为黑箱即可:
from sklearn import svm
clf = svm.SVC(gamma=0.001, C=100.)
选择模型的参数
在这个例子中,我们手动设置 gamma
值。不过,通过使用 网格搜索 及 交叉验证 等工具,可以自动找到参数的良好值。
我们把我们的估计器实例命名为 clf
,因为它是一个分类器(classifier)。它现在必须拟合模型,也就是说,它必须从模型中 learn(学习) 。 这是通过将我们的训练集传递给 fit 方法来完成的。作为一个训练集,让我们使用数据集中除最后一张以外的所有图像。 我们用 [:-1] Python 语法选择这个训练集,它产生一个包含 digits.data 中除最后一个条目(entry)之外的所有条目的新数组。
clf.fit(digits.data[:-1], digits.target[: