理论加案例,一文读懂数据分析中的分类建模
一、什么是分类
分类,是数据建模领域的重要分支,你每天也都会接触。
手机垃圾短信过滤,就是分类算法给短信打的标签,比如0代表正常短信,1代表垃圾短信。
在医学领域,根据影像检查判断肿瘤是良性还是恶性。在工业领域,根据设备工作特征做故障诊断。在材料领域,根据配方快速预测新材料的特性是否符合要求。
前面这些例子大多是二分类,即只有两个标签,更细的还有多分类。
比如电子邮件分为正常邮件、广告邮件、垃圾邮件或钓鱼邮件。贷款风险评估,分类为高风险中风险低风险。工厂的质量控制,分类为一级品、二级品以及废品。
二、分类算法
分类算法的核心逻辑是找到数据中特征与标签之间的映射关系。简单来说,就是找到一个“函数”,根据输入数据的特征,准确地判断数据所属的类别。
根据算法原理和实现方式,分类算法可以分为线性算法,非线性算法和集成学习算法。这三类算法分别适合不同的建模场景,训练出的模型复杂度一般也越来越高。
针对每一大类,数据建模软件DTEmpower也内置了多种算法。
比如线性算法里的逻辑回归算法Logistic,它的优点是简单高效计算成本低,且可解释性强,比如你能通过模型看出某个特征的重要性。
但线性算法更适合特征与目标变量之间存在线性关系的场景。所谓线性关系,就是因变量y可以写成y=ax1+bx2+cx3...这种形式。
非线性分类算法里的比较著名的KNN,K近邻算法。它的优点是原理简单且能处理非线性数据,对异常值不敏感。但缺点就是计算效率低,处理大数据时比较慢,因此也更适合数据量不大且数据集维度不高的情况。
集成学习算法里,RandomForest随机森林算法很有代表性,它最显著的优点是抗过拟合能力强。
所谓过拟合,指的是模型在训练数据上表现非常好,精度很高。但遇到新数据,精度就崩了。
除了抗过拟合,随机森林算法的鲁棒性也很强。如果数据存在异常值,模型也不会有明显的精度下降。
当然凡事都有两面性。随机森林算法的缺点之一就是模型训练过程的计算量大,而且得到的模型是一个黑箱模型。
相比线性模型,黑箱模型的可解释性差多了,你给它输入,它给你输出。这个结果的精度可能很高,但如果我问你它为什么输出这个结果,你很难解释清的。
下面我列出常见分类算法的优缺点以及适用场景,就不逐个介绍了。
之所以不逐个介绍,第一是我怕你睡着。
第二,即使你知道了每种算法的优缺点,当接触一个新场景或者拿到一组新数据,你也还依然不知道用什么算法。
比如我给你一个数据集,你怎么会知道变量之间是线性还是非线性关系呢?
实际的算法选择过程,都有一定的尝试成分。从易到难,从简到繁,最终在模型精度和计算量之间做权衡。
在实际操作时,我们推荐逻辑回归和决策树这两个基线算法。它们操作简单,易上手且性能尚可。当你不知道用什么算法时,就可以尝试用基线算法。
如果基线算法不满足要求,或者你想做更进一步的探索,可以再尝试其它的进阶算法。
比如集成学习算法里的Bagging算法,就可以作为首选的进阶算法。这种算法操作简单,且鲁棒性高,在处理高维度数据时表现不错。
三、分类模型可视化工具
你多次尝试之后,关键的问题来了,如何判断模型的好坏呢?
接下来介绍决策边界、混淆矩阵和ROC 曲线三个可视化工具,它们构成了判断模型精度的“黄金三角”。
第一个,决策边界。
假设你有一堆手办,共分为两种,一种会打篮球,一种不会。现在你画一条线,把它们分成了两类。这条线,就是我们今天要讲的决策边界。
简单来说,决策边界就是分类模型用来区分不同类别数据的“分界线”。
第二个,混淆矩阵。
混淆矩阵其实是一个表格,展示了分类模型预测标签和实际标签之间的关系。
对于二分类,它就是一个2X2的表格,左上表示实际为正,预测也为正,预测对了,True Positive,简称TP。
右下表示实际为负,预测也为负数,也预测对了,True Negative, 简称TN。
那么另外两个区域,就表示预测错了,一个叫False Negative, FN。另一个叫False Positive, FP。
显然,TP+TN通常越大越好。因此判定模型的好坏,也有一个定量指标叫准确率。另外还有精确率、召回率和F1分数这几个指标,也都比较常用。
第三个,ROC曲线,全称叫受试者工作特征曲线(Receiver Operating Characteristic Curve)。
ROC曲线所在坐标的横轴叫假阳性率,也就是实际为负,但被预测为正的比例。纵轴是召回率,也就是实际为正,且被预测为正的比例。
下面说说这个曲线是如何生成的。
分类模型在做预测分类时,你觉得它对预测结果有百分百的信心吗?显然不会。
它实际是通过概率判断的,比如计算发现某个样本属于A类的概率是70%,你如果设置阈值是50%,那么你就可以输出结果判定这个样本属于A类。
当然,如果计算之后发现这个样本属于A类的概率只有40%,那你就能输出结果,判定它不属于A类。
所以,你设定的阈值不同,模型的表现也不同。
OK,下面做三件事。
第一,选择一系列不同的阈值。
第二,对于每一个阈值,计算出当前的假阳性率和召回率。
第三,把这些点连起来,就得到了ROC曲线。
如果你不做数据建模,而是随机猜测的,也就是分类正确的概率是50%,那么生成的ROC曲线就是从(0,0)到(1,1)的一条直线。
从ROC曲线的定义可知,这个曲线越靠近左上角,表示模型精度越高。所以ROC曲线也有个定量值,叫曲线下面积,简称AUC。显然,曲线下的面积AUC越大,也表示曲线越靠近左上角。
介绍完三种工具,那么最终如何判断呢?
通常情况下,你看混淆矩阵时,左上角和右下角的数越大越好。看ROC曲线时,曲线上方的面积越小越好。
为什么说通常情况下?因为分类模型好坏的判断,必须要结合业务背景。
举个例子,在地震预测时,我们希望尽可能预测到所有的地震,哪怕这些预测到的地震中只有少数真正发生了,这个时候我们就可以牺牲精确率。宁愿发出100 次警报但只对 10 次,也不希望预测了 10 次,但只有 8 次正确而漏掉2次,因为只要有 1 次地震没预测到都会造成巨大的损失。这是一个 “宁可抓错,不可放过” 的场景。
但另一个场景,垃圾邮件分类,我们虽然希望模型能够找到所有的垃圾邮件,但一旦有一封正常邮件被分到了垃圾信箱里,你肯定很生气。所以这时候宁可漏掉垃圾邮件,也不能把正常邮件分错。这就是一个“宁可放过,不可抓错” 的场景。
能体会出来吧?在不同的场合,我们在建模时需要根据实际情况,通过查看不同的参数指标来判断分类模型质量。
四、分类建模案例
理论部分讲解差不多了,下面做一个实际的数据建模分类案例。
工程背景是某种新材料的研制,这种材料由很多种配方组成,不同的组成对应不同的材料性能。
工厂经过多年的积累,已经有了大量数据。其中前83列是原材料,后面几列是配方对应的材料性能。而我们关心的是最后一列,耐弯折性。1表示耐弯折性达标,0表示不达标。
我们数据建模想做的事,是得到一个分类模型。基于这个模型,你输入一种新的配方,让模型判断配方组成的新材料的耐弯折性是否达标,省去做实验测试的过程。
开始操作。启动DTEmpower,新建工程选择专业模式,之后在画布上依次拖入数据读取、变量剔除、空值处理、变量设定、数据分割节点,然后依次连线,表示数据传递。
数据读取、变量剔除就不解释了,字面意思很简单。
空值处理的作用是删除存在空值的数据行,而数据分割是将数据分为训练集和测试集,默认按照3:1的比例分割。训练集用来训练模型,测试集用来测试模型精度。
再然后,拖入分类算法节点。这里我拖入极端随机树算法,节点配置保持默认。
注意,软件默认是打开交叉验证的,交叉验证是数据建模领域的一个重要概念,也是DTEmpower软件的底层能力。
交叉验证核心思想是:将数据集分成若干份,轮流使用其中一份作为验证集,其余的作为训练集,最后对模型进行多次的训练和评估,以检验模型的泛化能力。当然,打开交叉验证之后,也会增加训练时间。
最后再拖入模型对比节点,模型对比节点能给出分类算法的定量精度值。而计算计算精度值时,基于的数据就是数据分割节点分出来的测试集。
模型训练结束后,单击得到的分类模型,能看到模型信息,包括决策边界、ROC曲线以及混淆矩阵。
决策边界,能看出来有一条曲线,把界面分成了两部分,能大概展示模型对训练集的拟合程度。
混淆矩阵,可以看出来实际为0且预测为0的数据有26个。实际为1预测也为1的值有36个。
ROC曲线,它绘制了两条曲线,分别是0和1的。同时也给出了AUC的值,巧了,都是0.86。这个表现还不错,说明模型具有良好的区分能力。
这就是我们用随机树算法训练得到的分类模型,你如果感兴趣的话,可以尝试用其它算法试试,看能不能得到精度更高的模型。
欢迎前往天洑官网下载软件,免费试用30天,即下即用。