让机器学习人类分类—Scikit-learn(献给初学者的机器学习案例)

  • 2019 年 12 月 19 日
  • 筆記

作者Nature

出品AI机器思维

人类一直梦想让机器帮助人类提升生活品质,解放人类是人类科技应用的一个目标。

通过python中的模块Scikit-learn是机器学习领域一个非常强大的模块,它是在Numpy、Scipy和Matplotlib三个模块上编写的,是数据挖掘和数据分析的一个简单的工具。

具有六大功能:分类(Classification)、回归(Regression)、聚类(Clustering)、降维(Dimensionality Reduction)、模型选择(Model Selection)和预处理(Preprocessing)。

通过机器学习算法,我们可以对 n个样本(Sample)的数据集进行预测未知数据的属性。

现实中的问题有历史的标准数据和无标准的数据,对这些数据的预测在统计学中称为有监督学习(Supervised Learning)和无监督学习(Unsupervised Learning)。

有监督学习(Supervised Learning):是指数据中已经包含了想要预测的属性,即目标变量,分类(Classification)和回归(Regression)都属于有监督学习。

分类:通过从已标记类别的数据学习,来预测未标注数据的分类。

回归:根据数据输出一个或多个连续的变量。

无监督学习(Unsupervised Learning):无监督学习的训练数据包括了输入向量的集合,但没有相应的目标变量。

从未知发掘数据中相似样本的分组,也称为聚类(Clustering);也可以通过数据集合向量确定输入样本空间中的数据分布,称为密度估计(Density Estimation);还可以将数据从高维空间投射到两维或三维空间,从而可以方便数据可视化。

首先安装sklearn模块。通过pip install sklearn语句安装。

Sklearn有一些标准的数据集,就像SAS一样在一些逻辑库里自带了帮助学习者学习的数据集,从而方便学习者学习。

比如用于分类的数据集digits数据集和iris数据集以及用于回归的波士顿房价(Boston Houser Prices)数据集等。大家看下面我要导入数据集截图,就能看到自带的数据集,直接可以引用学习。

本案例以digists数据集为例,这个数据集是给定一个8*8像素数组,通过程序预测这64个像素代表那个数字。下面程序是导入并加载数据集到python环境中,通过print()查看数据集分类样本的数据特征:

运行结果可以查看到输出的数据集:

上面的程序语句帮助查看数据变量类型,执行后结果显示如下:

我们可以看到有监督学习分类的目标变量,下面程序查看目标变量:

运行后程序输出的目标分类变量为10个数字的目标分类变量集:

案例完整程序如下:

程序运行后预测出来的数字为8:

本案例中模型参数说明:

gamma:核函数的参数,当核函数为rbf、poly和sigmoid可用,默认为auto,自动设置为1/n_features(分类数)。越大,支持向量越少。gamma值越小,支持向量越多。

C: float惩罚参数,默认值为1.0:对分类精度的设置,分错情况下的惩罚系数,C越大即对分错样本的惩罚程度越大,因此在训练样本中准确率越高;C越小,容许训练样本中有一些误分类错误样本,泛化能力强。对于训练样本带有噪声的情况,一般采用后者,把训练样本集中错误分类的样本作为噪声。

说明:上面整个程序运用机械学习模型根据因变量输出预测目标变量的输出。经过有标准的训练得到目标变量,新的输出套入并加载到模型中,进行分类预测。通过给定一幅新像素图案,预测其表示的数字。对于这个有监督学习的分类问题,总共有10个可能的分类,分类数字为0至9的数字。首先我们要训练一个预测器来预测未知样本所属分类。

在sklearn中,分类的预测器是一个python对象,具有fit(x,y)(用给定的数据训练模型)和predict(x)方法预测样本的类别。本案例中这个预测器的例子是sklearn.svm.SVC,实现了支持向量机分类。

Svc中模型参数设置说明可以参考帮助文档,下面是常用的模型参数说明:

cache_size:核函数缓存大小,默认为200(MB)。

class_weight:每个类所占的权重,不同的类设置不同的惩罚参数C, 默认为缺省(自适应)。

coef0:核函数的常数项,当核函数为poly和sigmoid可用,默认为0.0。

decision_function_shape:处理多分类问题,一对一用ovo,一对多用ovr,默认为ovr。

degree:核函数的维度,当核函数为poly 可用,默认为3。

kernel:核函数,可选linear、poly、rbf、sigmoid、precomputed,默认为rbf。

max_iter:最大迭代次数,默认为-1(无限制)。

probability:是否采用概率估计,默认为False。

random_state:数据随机洗牌时的种子值,默认为缺省(使用np.random)。

shrinking:是否采用神秘方法(我是不懂-_-),默认为true。

tol:停止训练的容许度,默认为0.001。

verbose:允许详细输出,多线程不建议开启,默认为False。

主要调整的参数有:C、gamma和kernel。

希望大家根据案例学习,同时对案例中的参数自己亲自动手实验,只有这样才能真正领悟机器学习算法。