【学习】数据挖掘-公开课学习

https://www.bilibili.com/video/av26063625/?p=52

https://www.bilibili.com/video/av16075220/?p=2

(其实都是混着来的。。由第一期课程看到第二期去了)

2 数据挖掘标准流程

https://www.cnblogs.com/Yuanjing-Liu/p/9408460.html

  • CRISP-DM过程描述

CRISP-DM(cross-industry standard process for data mining) 模型为一个KDD(只是发现:Knowledge Discovery in Database)工程提供了一个完整的过程描述。一个数据挖掘项目的生命周期包含六个阶段。这六个阶段的顺序是不固定的,我们经常需要前后调整这些阶段。这依赖每个阶段或是阶段中特定任务的产出物是否是下一个阶段必须的输入。
业务理解(Business Understanding)→数据理解(Data Understanding)→数据准备(Data Preparation)→建模(Modeling)→评估(Evaluation)→部署(Deployment)


image.png

3 简易医疗挖掘案例(决策树)

人体重的变化与6个指标有关,建立6个指标和体重的预测模型


image.png

4 银行贷款风控案例和精准营销案例(朴素贝叶斯)

4.1 银行贷款风控

银行对申请贷款的客户建立的档案包含四个指标,分别是三个关键参数和是否违约。需要利用这个模型对参与贷款的客户进行违约可能性判定。


image.png
  • 案例中对连续数值型的数据进行了离散化,把贷款额度分为几个类别区间、受雇时间也分为几个时段区间。


    image.png
  • 最后的决定,实际上是要进行比率或者阈值判定的。


    image.png
4.2 精准营销

银行金融衍生部门最新上限一款金融理财产品,销售目标为用户群中对产品兴趣度最高的前20%用户。


image.png

交易信息表中的交易金额是“购买用户”、“未购买用户”标签。

典型的精准营销二分问题,流程:
数据准备(缺失值替换、变量离散、重复占比特征剔除、维度缩放(权重优化,因为是用欧式距离来算近似度的,缩放的成都就是权重程度)、分类平衡(两类或多类数据的比例平衡,暂时不研究)→ROC曲线来调整阈值

  • ROC曲线问题
    https://www.jianshu.com/p/2ca96fce7e81文章讲得很清楚
    image.png

    还有这个:https://www.jianshu.com/p/7919ef304b19

有几个点:recall(sensitivity)召回率、precision精确率、accuracy准确率、f-measure:
a.recall是相对真实的答案而言: true positive / golden set 。假设测试集里面有100个正例,你的模型能预测覆盖到多少,如果你的模型预测到了40个正例,那你的recall就是40%。
b.precision是相对你自己的模型预测而言:true positive /retrieved set。假设你的模型一共预测了100个正例,而其中80个是对的正例,那么你的precision就是80%。我们可以把precision也理解为,当你的模型作出一个新的预测时,它的confidence score 是多少,或者它做的这个预测是对的的可能性是多少。
甚至可以更粗暴的理解为,precision是模型的精度(预测值中有多少是正确的),而recall是相对真实概率的(贝叶斯)精度(有一百个数据,你能预测准多少个)
c.对于给定的测试数据集,分类器正确分类的样本数与总样本数之比,相对真实概率的总精度。
d.f-measure是一种统计量,F-Measure又称为F-Score,F-Measure是Precision和Recall加权调和平均,是IR(信息检索)领域的常用的一个评价标准,常用于评价分类模型的好坏。

roc曲线X轴是假阳的precision概率(1-阳precision),Y轴是真阳的recall概率,x的术语是1-特异度(1-特异度=误诊率=1-阳precision),y的术语是灵敏度(灵敏度=1-漏诊率=阳recall)。理论上当然是x=0,y=1最好啊(灵敏度足够高,误诊率足够低),但是两者实际上是由相互制约的关系,而ROC曲线实际上是通过阈值调整来实现的。比如阈值很低,当高于这个阈值,判定为阳,低于则判定为阴,那么阈值越低,阳recall的概率会越大(因为很容易判定为阳,所以本身为阳的样本很容易就被判为阳了),但随之很多阴的样本也被判定为阳了,此时y灵敏度变高,x误诊率也变高了。所以ROC曲线最终的终点都会是(1,1),表示所有的数据都会被判定为阳,那么阳recall概率肯定为1,阳precision趋于0,则1-阳precision的概率也会趋于1。

有了ROC曲线,会对模型有一个定性的分析,如果要对模型进行量化的分析,此时需要引入一个新的概念,就是AUC(Area under roc Curve)面积,这个概念其实很简单,就是指ROC曲线下的面积大小,而计算AUC值只需要沿着ROC横轴做积分就可以了。真实场景中ROC曲线一般都会在在0.5~1之间。AUC的值越大,说明该模型的性能越好。(面积越大,说明曲线越偏左,表示真阳概率高,假阴概率低啊!找到那个阈值,不就很好了么)
最佳界值的确定常用“尤登指数”,即敏感性+特异性-1(Y-X的最大值,相当于阳recall+阳precision的最大值),该指数值的取最大值处就是最佳的界值。

  • 数据平衡问题
    一般来说,正负种类的数据样本,比例在1:3至3:1之间会比较合适,即较少类别至少占比25%。而实现种类平衡的方法比较简单的有两种:
    a、抽样选择样本数目
    b、克隆样本

  • 训练集和测试集数目问题
    文中说的是训练集占0~0.7左右,表示存疑。

5 关联推荐算法(图书推荐案例)

图书推荐案例没有什么好讲的,另外有两个简单的知识点

  • 支持度和置信度
  • 关联规则
    就是指发现支持度大于minsup、置信度大于minconf的规则。

6 kmeans聚类算法(医疗挖掘案例)

image.png

采用的DB指数评价的聚类效果。各种聚类评价指标参见:
https://blog.csdn.net/sinat_33363493/article/details/52496011
image.png

7 文本挖掘案例(朴素贝叶斯和SVM)

image.png

案例也没啥好说的。。
经过分词以后,维度太高,一般来说解决高纬度的问题,朴素贝叶斯和svm会比较适合。

8 语言识别(还是贝叶斯吧)

image.png

可以根据分词来判断属于某种语言的概率,但是其实内部会有很多判断条件,直接编程序进行先行判断会更直接一点:


image.png

9 回顾特征选择+随机森林

9.1 特征选择
  • PCA和特征选择
    都是实现降维的方法,PCA不讲,特征选择有一种MRMR方法,Minimum-redundancy-maximum-relevance (MRMR) feature selection,也译作最大相 关最小冗余特征选择算法。


    image.png
  • weight权重
    有大量的权重选择方法,例如基于gini系数的权重、基于信息增益、信息
    增益比的权重选择方法,甚至基于SVM的权重选择方法、乃至于基于relief权重选择。
    但是其实维度的缩放,本身也是一种权重选择啊,缩放得越厉害,维度的影响就越小了。
9.2 随机森林
image.png

简单理解以下哈,随机森林就是包含有很多科决策树的决策树算法,最终的分类是根据各个分类器的投票决定的。。。

image.png

参数选择很重要:没科决策树的枝干数目(特征数目),以及树的数量。

10 天体物理小案例和生物制药案例(强调特征选择)

10.1 天体物理

捕捉到的宇宙粒子中,大约10000颗粒子被记录 才能捕获到10个中微子,所以我们需要通过别的方式来高效、准确地确认如何利用观测数 据来分辨中微子。


image.png

流程:MRMR降维→随机森林决策。
然而参数的选择,可能比算法本身更重要。


image.png
10.2 生物制药
image.png

引入了三种方法来进行特征选择:
向前选择,向后淘汰(这两个就像剪枝一样),定向搜索。
整个过程其实是优化过程呐。。。因为这个案例的目的就是选择最典型的特征

  • 特征选择后的随机验证


    image.png
image.png

并没有理解其中的算法逻辑,可能是因为也没有看到他优化目标函数。

11 异常检测

异常检测可以说没有固定的算法,文中给出了一个聚类的异常检测方法:
判断某一个点到该聚类中心点的距离,如果过大,可能就是异常。

12 科学验证、集成学习、逻辑回归

12.1 科学验证
image.png
  • 数据处理步骤的选择
  • 算法的选择
  • 算法参数的选择
  • 交叉验证模型季度
  • 验证结果的方法选择
  • 其他选择
12.2 集成学习

集成算法就是多个决策 者在特定的规则下进行预测的学习方法。
https://cloud.tencent.com/developer/news/229098

  • Bagging算法:通过选取抽样得到训练集Sn,进而得到模型Hn,最终根据多次模型结果进行 投票分类任务学习,或者平均值来预测连续值。(随机森林是一种基于决策树的bagging)

  • Boosting算法:通过不停地改变样本分布来选择最佳弱分类器;改变样本即总是分类正确的 样本权重降低,总是分类错误的样本权重增加,从而使得弱分类器能够准确预测每个样本(Adaboost,GBDT,xgboost)

https://www.cnblogs.com/willnote/p/6801496.html
https://blog.csdn.net/jingshuiliushen_zj/article/details/83350215

12.3 adaboost

https://www.bilibili.com/video/av56033745?t=1591
利用加法模型来构造一个由多个基函数(最简单的一种情况就是多平面切分)叠加而成的集成决策模型。

image.png

adaboost的算法是利用前向分布加法算法把原始的经验风险极小化模型简化了,每一步的决策只用针对当前步进行优化,因此是不用考虑整体最小化的。问题:

  • 是一个权重系数,与有关,而与第n轮各个训练集的权重以及采用最优分类方式得到的集合错误率有关,为需要采用损失函数不断更新得到:


    image.png

    image.png
  • ℎ()是利用当前分类方法得到的训练接x所属的种类(一个+1和-1的集合)

上面是简要的步骤,现在来回看是否合理:
设定损失函数为L,当y值和预测的H(x)完全一致时,确实是有最小值的,所以优化目标为损失函数最小是可行的。


image.png

本轮优化目标为损失函数最小,转化为保证本轮yH(x)最大,则转化为保证本轮最大。重点在于是一个迭代式,他与本身损失函数(这是一个指数函数)的构成形式是有关的,所以经过推导(省略了推导过程),得出每一轮的求解为:


image.png

简单的来看,为分类误差率,越小,则越大,这是符合损失函数的最优化要求的。而实际上每轮的需要利用前几轮的分类结果更新权重,并结合这一轮的最优分类方式得到。

ps:adboost是讲损失函数设为了指数函数,并依次推导出了每一轮的求解方式,所以如果损失函数不是这个指数函数的话,迭代方式也是不同的

12.4 GDBT

https://www.bilibili.com/video/av64320212/?p=35
https://blog.csdn.net/qq_24519677/article/details/82020863

GDBT是梯度提升树(决策树的一种),相对而言的是传统提升树,两者都是将分类问题转化为回归问题,区别在于传统提升树是利用残差进行反复迭代(提升),而GDBT是利用梯度(一阶导数)方式来进行迭代。
设定损失函数(所以这里是设定的平方差为损失函数,方便求梯度。如果是一阶绝对值差为损失函数,同时迭代方式是绝对值残差的话,就是传统提升树了):


image.png

首先,每一轮损失函数最优化的求解方法就是找到最好的决策树,即叶节点的最佳预测为叶节点残差均值:


image.png

其次是每一轮迭代的问题,一阶泰勒近似展开:
image.png

还是按照前向分布加法的理论,上式右边的第一项已经不用管了(因为是前n-1轮的步骤),只用管最后一项,而最后一项的右边也不用管了,因为与前n-1项的损失函数有关,偏导求出来是一个常数,需要管的只是fn(xi),xi是残差,而fn则是这一轮需要构建的决策树所预测的结果。所以优化问题最后就变成了,以残差作为输入,寻找最优决策树使得损失函数最小(感觉上式还有个隐含的偏导部分和fn关系的信息,所以才可以把求解fn变为求解新一轮的损失函数最小),这下问题就很简单了。
  • 每一轮还是以残差作为最新一轮的输入构造决策树;
  • 梯度体现在一阶泰勒的近似展开上面(中间应该是可以证明利用一阶泰勒展开后,新的一轮直接用残差进行迭代可以保证不断收敛,这里没有仔细研究);
12.5 xgboost

xgboost相对gdbt其实就是把一阶泰勒展开为二阶泰勒,同时引入一个混合正则项(一个0范数和一个二范数):

image.png

f(x)仍然是新一轮决策树所构造的结果,用w表示:
image.png

如果是GDBT的情况的话,是去寻找w(fx)的最优解,但xgboost是把最优情况下的w带回去(实际上可能都无法求解这个值)计算还有没有必要进行新一轮决策(因为有正则项的存在)。所以这里将最优的w带回去求解这一轮的损失函数值:
image.png

理论上,如果这一轮最优的值还要与上一轮的结果相对比,如果gain为负(或者很小),那么都不用求解了,如果gain为正的话,则需要改变树的结构来寻找一个相对优秀的w,并判断此时的gain是否合理。
image.png

可以看出,xgboost需要额外设定正则项的和。
gdbt和xgboost的大致原理是这样,但是因为没有实际算例,所以还很虚。

12.6 逻辑回归LR

https://zhuanlan.zhihu.com/p/74874291
https://www.bilibili.com/video/av37498638?from=search&seid=14818943844000234844(这个手动推导的很详细)
逻辑回归是假设对于任意输入一组X,可以得到属于1类的概率P(0类的概率就是1-P),如果P大于0.5,则分为1类,否则分为1类。同时假定这个概率函数可以用sigmoid来模拟这个概率函数,关键就是要求解w值(其实是与输入X相对应的一个向量矩阵):

image.png

image.png

ps:其实从表达式中就可以知道,x分布满足-∞~+∞的分布(因为用的是wx而不是wx+b,所以涉及到一个x的均值问题),且线性可分的话效果会更好,所以可以根据情况把输入标准化为正态分布,而如果已经知道本身不线性可分的话,可以直接考虑不用LR算法了。

如何求解W值?参考概率估计极大似然估计法那一套,认定训练集的数据分布是有一个最优W值得到的:


image.png

极大似然取对数再进行求解的是因为不会影响W的求结过程。
得到极大似然估计函数(损失函数)之后有几种方法求解:

  • 梯度下降法
    最常用的方法,其实就是爬坡法:
    https://www.jianshu.com/p/c7e642877b0e(文章讲的很详细)
    通过设定迭代的步长然后反复迭代,梯度下降法需要注意是找最大值还是最小值,涉及到一个负号的问题(所以其实是梯度下降或者上升)

  • 牛顿法
    梯度下降有点像泰勒一阶展开,而牛顿法是二阶展开来求解,有一个海森矩阵:


    image.png
  • 以及其他求解方法

为了避免过拟合,同时减小模型难度,引入了正则化。本质上就是让w矩阵稀疏一些(不需要那么多精确的w,一些不重要的特征为0,或者有一个很小的值就可以了,计算起来也不用那么麻烦),所以才考虑引入了正则化。正则化是一种通用的方法,本质上是利用范数构建惩罚函数,对所有算法都可以使用。

ps:0范数是非零元素的个数,1范数是向量元素绝对值之和,2范数是欧氏距离。
L1正则式就是1范数的惩罚函数,L2是2范数的惩罚函数。那引入了正则式之后如何求解?
https://zhuanlan.zhihu.com/p/74874291
可以参考一下这里面的过程,暂时不深究了

还需要注意一点,L1更容易得到稀疏解,这一点是经过证明的,不过也可以根据下图进行简单理解

image.png

左边是L1正则式,右边是L2正则式,左边容易在坐标轴上取得最优解,所以更加稀疏。

你可能感兴趣的:(【学习】数据挖掘-公开课学习)