机器学习训练营——机器学习爱好者的自由交流空间(qq群号:696721295)
什么是机器学习?
通常,一个机器学习问题考虑一个包括
个样本的数据集,试图根据该数据集预测未知数据的某些属性。如果每个样本的维度高于1,那么每一个维度称为属性或特征。机器学习可以分成有监督学习(supervised learning
)和无监督学习(unsupervised learning
)两大类。其中,
有监督学习 数据带有额外的属性,这些额外属性正是我们想预测的。典型的有监督学习包括:
分类(
classification
): 已知样本属于两个或多个类,我们想从标签已知的数据中预测标签未知的数据所属的类别。举一个分类问题的例子,手写数字的识别。在本例中,我们要把每一个输入向量分配到有限数量的离散类之一。回归(
regression
): 如果想要的输出由一个或多个连续变量组成,那么这个任务被称作回归。举一个回归问题的例子,根据一个大马哈鱼的年龄和重量,预测它的长度。
无监督学习 训练数据由一个输入向量集组成,目标可能是发现相似的数据例子组,称为聚类(
clustering
);也可能是确定输入空间的数据分布,称为密度估计(density estimation
);或者出于数据可视化的目的,将来自高维空间的数据投射到低维空间上去。
训练集和检验集
简言之,机器学习是学习一个数据集的属性,然后将这些属性应用到新的数据上。因此,在评价一个算法优劣性的机器学习里,普遍的操作是:将数据集分割为两个子集,在一个子集上学习属性,称为训练集;在另一个子集上检验这些属性,称为检验集。
加载一个例子数据集
scikit-learn
自带几个标准数据集。例如,用于分类的iris
, digits
数据集,和用于回归的波士顿房价数据集。下面,我们从shell
启动python
解释器,练习加载iris
, digits
数据集。
python
环境里的数据集是一个类似字典型的对象,包括全部数据和描述数据属性的元数据(metadata
), 数据存储在对象的.data
成员里,实际上是一个包括样本和特征的数组。在有监督问题里,一个或多个xiangxiang响应变量被存储在.target
成员里。例如,在上面加载的digits
数据集,digits.data
可以访问用于分类digits
样本的的特征。
from sklearn import datasets
iris = datasets.load_iris()
digits = datasets.load_digits()
print(digits.data)
而digits.target
则给出了正确分类的digits
数据集,即,对应每一个数字图像的正确数字。
print(digits.target)
数据总是以一个二维数组的形式组织,通常,行代表样本,列代表特征。在digits
数据集里,每一个原始样本是一个形如(8, 8)的数组。例如,访问代表数字0的图像
print(digits.images[0])
加载外部数据集
scikit-learn
将任何数值型数据存储为numpy
数组或scipy
稀疏矩阵。其它可以转换为numpy
数组的类型也可以。下面介绍几种推荐的数据加载方式:
pandas.io
提供了一组工具,利用它们读取包括CSV
,Excel
,JSON
,SQL
等常见格式的数据集。pandas
很适合处理不同类型的数据,并且能够把这些数据转为适合的数值数组。scipy.io
专门处理在科学计算中常用的二进制形式,例如,.mat
,.arff
numpy/routines.io
是列形数据进入numpy
数组的标准加载形式。scikit-learn
的datasets.load_files
函数作为文本文件的字典加载形式。在这种加载形式,每一个字典名是每一个类的名,而字典里的每一个文件则对应来自该类的一个样本。
提示:如果你管理自己的数值型数据,我们推荐使用一个优化过的文件格式,例如,HDF5
, 这样可以减少数据加载时间。当你加载的外部数据很大时,这种方式尤其有用。不同的python
库,例如,H5Py
, PyTables
, pandas
都提供读写HDF5
格式的数据的接口。
阅读更多精彩内容,请关注微信公众号:统计学习与大数据