【sklearn第二讲】基于sklearn的机器学习

机器学习训练营——机器学习爱好者的自由交流空间(qq群号:696721295)

什么是机器学习?

通常,一个机器学习问题考虑一个包括 n 个样本的数据集,试图根据该数据集预测未知数据的某些属性。如果每个样本的维度高于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-learndatasets.load_files函数作为文本文件的字典加载形式。在这种加载形式,每一个字典名是每一个类的名,而字典里的每一个文件则对应来自该类的一个样本。

提示:如果你管理自己的数值型数据,我们推荐使用一个优化过的文件格式,例如,HDF5, 这样可以减少数据加载时间。当你加载的外部数据很大时,这种方式尤其有用。不同的python库,例如,H5Py, PyTables, pandas都提供读写HDF5格式的数据的接口。

阅读更多精彩内容,请关注微信公众号:统计学习与大数据

猜你喜欢

转载自blog.csdn.net/wong2016/article/details/80584935
今日推荐