监督学习初探-理论与实践

一、理论篇

机器学习涉及到的领域内容很多,甚至不同学科之间也在交叉借鉴,发展到现在也是百花齐放,各有仲秋。本篇文章旨在介绍监督学习的一些概念内容,去了解下冰山一角,并带大家进行实地地处理对比下不同算法。

根据训练方法的不同,机器学习可以分为:监督学习(半监督学习)、无监督学习、强化学习。其中强化学习是自我强化的,在最开始强化学习没有任何有标签的数据,但在给出判断或者决策之后,会接受到外界反馈的数据,根据反馈进行再学习,然后做出下一次决策再得到新的反馈,循环迭代中成长。也可按算法种类,简单划分成回归、分类、聚类、关联规则挖掘,离群点检测等。

监督学习方法又分生成方法(Generative approach)和判别方法(Discriminative approach),所学到的模型分别称为生成模型(Generative Model)和判别模型(Discriminative Model)。

判别模型:直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。包括k近邻,感知级,决策树,支持向量机,高斯混合模型,人工神经网络等。

生成模型:学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型。有:朴素贝叶斯和隐马尔科夫模型等。

比如说要确定一只羊是山羊还是绵羊,用判别模型的方法是先从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。换一种思路,我们可以根据山羊的特征首先学习出一个山羊模型,然后根据绵羊的特征学习出一个绵羊模型。然后从这只羊中提取特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

利用贝叶斯公式发现两个模型的统一性:

由于我们关注的是y的离散值结果中哪个概率大(比如山羊概率和绵羊概率哪个大),而并不是关心具体的概率(奥卡姆剃刀(Occam's razor)原理),因此上式改写为:

这就是人们所熟知的最大后验估计(MAP)原理。

机器学习(监督学习)的最主要目标,是要让算法的最终结果跟实际真实值之间的损失函数值最小,可以将机器学习过程分解成三个部分:

1.模型(model)

如上介绍的两大类模型。

特征选择(Feature selection):假设我们想对维度为n的样本点进行回归,然而n可能远远大于训练样例数m,此时就需要降维。机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。如主成分分析法(PCA)。

过滤特征选择(Filter feature selection):过滤特征选择方法的想法是针对每一个特征,计算相对于类别标签的信息量,得到n个结果,然后将n个结果按照从大到小排名,输出前k个特征。

2.策略(strategy)

损失函数:一般而言,常用的损失函数有:0-1损失函数(0-1 loss function),平方损失函数(quadratic loss function),绝对损失函数(absolute loss function),对数损失函数(logarithmic loss function)。

风险函数:由于损失函数度量的是某一次预测结果的好坏,我们希望衡量一下平均情况,这个平均情况也被称为经验风险(empirical risk)或者说经验损失(empirical loss)。因为样本容量较小时,容易产生过拟合的现象,需要用结构风险来度量过拟合。

3.算法(algorithm)

算法是指如何找出最佳参数组合,求解最优解的过程,也就是可以理解为调参的过程。算法的目标就是找到全局最优解,以及求解过程的高效率和低开销。

监督的机器学习说白了就是minimizeyour error while regularizing your parameters,也就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。训练误差小并不是我们的最终目标,我们的目标是希望模型的测试误差小,也就是能准确的预测新的样本。我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能,而模型“简单”就是通过规则函数来实现的。另外,规则项的使用还可以约束我们的模型的特性,这样就可以将人对这个模型的先验知识融入到模型的学习当中,强行地让学习到的模型具有人想要的稀疏、低秩、平滑等特性。规则化是结构风险最小化策略的实现,是在经验风险上加一个正则化项(regularizer)或惩罚项(penalty term),这些就是我们常说的L0范数、L1范数、L2范数和核范数规则化。

在监督的机器学习(ML)领域,评估(Evaluation)也是一个必要的工作,在分类领域的指标主要有:准确率(Accuracy),精确率(Precision),召回率(Recall),F-Measure,ROC曲线等。具体公式可以先看下面的混肴矩阵

其中准确率(accuracy) == (TP+TN)/(TP+FN+FP+TN),所有被预测对的。

精确率(precision) = TP/(TP+FP),在被识别为正类别的样本中,确实为正类别的比例是多少。

召回率(recall) = TP/(TP+FN),在所有正类别样本中,被正确识别为正类别的比例是多少。

从准确率上,我们的确可以在一些场合,从某种意义上得到一个分类器是否有效,但它并不总是能有效的评价一个分类器的工作。要全面评估其有效性,必须同时检查精确率和召回率,但精确率和召回率往往是此消彼长的情况,这时我们可以通过F-measure来评估,F-measure是精准率和召回率的调和平均数的2倍。

至于无监督的聚类算法等,以及最近流行的自主强化学习算法在此不在赘述。

二、实践篇

对本文涉及的一些算法用JAVA重写了一遍,具体算法实现上可参见BLOG,为了便于操作简单地做了个软件。如下图所示,因时间仓促只是具有一些流行算法的实现,数据可视化也做的不好。

当然也可以用如R、Tanagra等分析预测软件去跑一些数据集,去对比不同人实现的不同版本的算法,看看算法的分析预测效果。

以加州大学的数据集为挑选目标,如下:

选择segment-challenge数据集,大致属性如下图

跑C4.5算法,看到输出如下:

=== Summary===

CorrectlyClassified Instances 1436 95.7333 %

IncorrectlyClassified Instances 64 4.2667 %

Kappastatistic 0.9502

Meanabsolute error 0.0138

Root meansquared error 0.1057

Relativeabsolute error 5.6471 %

Rootrelative squared error 30.2115%

TotalNumber of Instances 1500

===Detailed Accuracy By Class ===

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class

0.956 0.004 0.975 0.956 0.966 0.960 0.981 0.954 brickface

1.000 0.001 0.995 1.000 0.998 0.997 1.000 0.995 sky

0.942 0.018 0.895 0.942 0.918 0.905 0.975 0.889 foliage

0.941 0.009 0.945 0.941 0.943 0.933 0.978 0.946 cement

0.877 0.017 0.891 0.877 0.884 0.866 0.961 0.881 window

0.987 0.001 0.996 0.987 0.991 0.990 0.997 0.992 path

0.990 0.000 1.000 0.990 0.995 0.994 1.000 1.000 grass

WeightedAvg. 0.957 0.007 0.958 0.957 0.957 0.951 0.985 0.952===Confusion Matrix ===

a b c d e f g

196 0 3 1 5 0 0 | a = brickface

0 220 0 0 0 0 0 | b = sky

0 1196 2 9 0 0 | c = foliage

2 0 4 207 6 1 0 | d = cement

3 0 16 6 179 0 0 | e = window

0 0 0 3 0233 0 | f = path

0 0 0 0 2 0 205 | g = grass

也就是说这个模型的准确度有95%左右。也许还需要对原属性进行处理,或者修改算法的参数来提高准确度。,继续选择随机森林算法去跑数据集会有什么结果呢?结果如下:

=== Summary===

CorrectlyClassified Instances 1468 97.8667 %

IncorrectlyClassified Instances 32 2.1333 %

Kappastatistic 0.9751

Meanabsolute error 0.02

Root meansquared error 0.0786

Relativeabsolute error 8.1639 %

Rootrelative squared error 22.4623%

TotalNumber of Instances 1500

===Detailed Accuracy By Class ===

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class

0.990 0.001 0.995 0.990 0.993 0.992 1.000 1.000 brickface

1.000 0.001 0.995 1.000 0.998 0.997 1.000 1.000 sky

0.966 0.009 0.948 0.966 0.957 0.950 0.998 0.988 foliage

0.968 0.006 0.964 0.968 0.966 0.960 0.998 0.993 cement

0.926 0.008 0.950 0.926 0.938 0.928 0.997 0.983 window

0.996 0.001 0.996 0.996 0.996 0.995 1.000 1.000 path

1.000 0.000 1.000 1.000 1.000 1.000 1.000 1.000 grass

WeightedAvg. 0.979 0.003 0.979 0.979 0.979 0.975 0.999 0.995

===Confusion Matrix ===

a b c d e f g

203 0 0 0 2 0 0 | a = brickface

0 220 0 0 0 0 0 | b = sky

0 1201 2 4 0 0 | c = foliage

0 0 2 213 4 1 0 | d = cement

1 0 9 5 189 0 0 | e = window

0 0 0 1 0235 0 | f = path

0 0 0 0 0 0 207 | g = grass

看到预测率已经快达到了98%,当然我们知道预测率仅仅是一方面,可以看到ROC曲线面积也都接近1,F参数值也都好于C4.5算法。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180716G16IC400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券