机器学习基础总结

目录

机器学习概念性

机器学习与数学的关系

机器学习的训练过程可以理解为一个统计过程,即已知数据求数据服从哪种分布的过程;而机器学习的预测过程可以理解为一个概率问题,即已知数据分布后对一个实例求概率,通过概率最大化得到最可能的预测值。而机器学习的训练过程往往转化为参数优化问题(在合理的假设下,给定历史数据,期望求得数据服从哪种分布,是一个参数估计的过程),这时就与代数、高数关系密切。因此,统计、概率、代数、高数将贯穿于机器学习的整个过程中,在后续的算法介绍中您将逐步感受到它们的影子。

机器学习与深度学习

深度学习的理念:一种端到端的学习方式,即让算法自动完成特征工程的工作,然后进行模型训练。

  • 机器学习的建模流程:数据清洗、特征工程、模型训练与参数优化、模型上线运行;
  • 深度学习的建模流程为数据清洗、模型训练与参数优化、模型上线运行。可见,深度学习去掉了特征工程的部分。
  • 两者区别总结:深度学习是机器学习的一个分支;深度学习主要是DNN网络、CNN网络、RNN网络、LSTM网络及相互结合而形成的混合网络;不同结构类型的数据源用不同的网络模型,在实际应用中须结合数据源结构类型与任务需求合理取舍。
  • 深度学习模型更适合完成图像、视频数据和时序数据的建模,实际应用中的大部分任务也都是由CNN和LSTM模型相互配合来完成的。现在,nlp和图像上都流行transformer!(基于self-attention)

在机器学习任务中,针对不同输入结构的输入数据,采用不同的机器学习方法。

  • 独立同分布数据:独立同分布类数据是指样本间在时间上没有相互关联,每个样本的行为不受其他样本影响。机器学习中的大部分方法都是为了解决这种独立同分布的数据而提出的,而且建模的假设就是认为样本是独立同分布的,如线性回归模型、决策树、支持向量机模型、神经网络模型等。深度学习的DNN网络可以很好地完成建模任务。在独立同分布数据中,传统的机器学习和深度学习应用没有本质区别。

  • 时序数据:时序数据与独立同分布数据相反,样本间有较强的关系。但这种相关只是在时间上的相关,即当前样本的状态与历史的一个或多个状态有关,样本间不是相互独立的

    股票数据当前的价格与历史的价格有很强的相关性,不能将其看作是样本无关的数据。另外,文本数据也是样本相关的,某一个单词与左右相邻的单词强相关,这里通常称为上下文相关。

    • 传统的机器学习中处理时序数据的方法有ARMA模型HMM模型
    • 为了能够采用支持向量机、Xgboost等模型,需要将原始的时序数据进行重构,使其满足独立同分布的数据特点。为了保证模型的预测效果,往往需要复杂的特征工程提取时间切片相关特征并需要行业知识的支持加粗样式,比如窗口切片的统计特征有均值、方差、峭度和偏度等。
    • 深度学习模型在处理时序数据时会比传统的方法好很多。在深度学习中用RNN网络和LSTM网络处理时序数据。并且不需要人工特征工程,其模型可以自行提取特征,实现端到端的学习过程。

      RNN和LSTM的优缺点:
      RNN网络考虑到HMM模型在计算当前状态时只考虑一阶历史信息的问题而进行了改进,该网络会考虑更多的历史状态(甚至是全部的历史状态)来确定当前状态。但是由于RNN没有遗忘功能,过早的历史信息对当前的状态已经没有影响。LSTM网络,增加了模型的遗忘功能,使模型可以有选择性地记住更有用的特征。LSTM模型的简化模型GRU模型,同时在处理文本数据时增加了上下文关联性的考虑而提出了双向GRU等模型。

    • 在LSTM模型中加上Attention机制,在时序数据的表现中非常优异。

机器学习基本过程

好文:https://www.jianshu.com/p/afa0facbe625
在这里插入图片描述
机器学习的建模流程:数据清洗、特征工程、模型训练与参数优化、模型上线运行

模型选择和模型评价

模型选择是在某个模型类中选择最好的模型,而模型评价对这个最好的模型进行评价。模型评价阶段不做参数调整而是客观地评价模型的预测能力。

分类模型指标

二分类

主流方法有ROC曲线、KS曲线两种。
roc曲线由命中率(真阳率tpr)和假阳率fpr绘制,横坐标为fpr,纵坐标为tpr。

TPR考虑的是第一行,实际都是正例,FPR考虑的是第二行,实际都是负例

一个优秀的客户流失预警模型,命中率(TPR)(召回率)应尽可能高,即能尽量揪出潜在流失客户,同时假警报率(FPR)应尽可能低,即不要把未流失客户误判为流失客户
在这里插入图片描述
accuracy(整体准确度), precision(精准度), recall, f-score(f1=2tp/(2tp + fp + fn),对不平衡率比较有效)
在这里插入图片描述
我们希望在阈值相同的情况下,假警报率尽可能小,命中率尽可能高,即ROC曲线尽可能陡峭,其对应的AUC值(ROC曲线下方的面积)尽可能高。
真正例率是在所有正例中,你将多少预测为了正例,这是你希望最大化的,也可以看作收益;假正例率是在所有负例中,你又将多少预测为了正例,这是你希望最小化的,也可以看作代价

AUC值能达到0.75以上就已经可以接受,如果能达到0.85以上,就是非常不错的模型

模型搭建完成后,有时还需要知道各个特征变量的重要程度,即哪些特征变量在模型中发挥的作用更大,这个重要程度称为特征重要性。

分类两种曲线PR和ROC
ROC曲线和PR曲线。她们也基于混淆矩阵。

ROC曲线通过不断移动分类器的“截断点”来生成曲线上的一组关键点。截断点就是指区分正负样本的阈值。在ROC图上绘制出每个截断点对应的位置再连接所有点就能得到最终的ROC曲线
AUC值是ROC曲线下的面积大小。

PR曲线,是精确度(precision)和召回率(recall)的关系曲线。横轴是召回率,纵轴的精确率。

为什么ROC曲线不受样本不均衡问题的影响
PR曲线会受样本不均衡的影响

PR中,TP/(TP+FP),实际包括正例和负例,正负样本数量的变化会引起该值的变化。因此影响PR曲线对对分类器的评价。
ROC曲线不会受样本不均衡的影响。
在正负样本数量不均衡的时候,比如负样本的数量增加到原来的10倍,那TPR不受影响,FPR的各项也是成比例的增加,并不会有太大的变化。因此,在样本不均衡的情况下,同样ROC曲线仍然能较好地评价分类器的性能,这是ROC的一个优良特性,也是为什么一般ROC曲线使用更多的原因。

F1

F1分数(F1-Score),又称为平衡F分数(BalancedScore),它被定义为精确率和召回率的调和平均数。
在这里插入图片描述

多分类时,看micro-f1和macro-f1
micro-F1
第一种计算出所有类别总的Precision和Recall,然后计算F1。这种方式被称为Micro-F1微平均。
二分类的micro-F1 score和Accuracy的值相等https://blog.csdn.net/weixin_44839047/article/details/112460705

macro-F1
是计算出每一个类的Precison和Recall后计算F1,最后将F1平均。这种范式叫做Macro-F1宏平均。

weighted
对每一类别的f1_score进行加权平均, 权重为各类别数在y_true中所占比例。

应用
商业实战中应用广泛,如信用卡评分模型。

线性回归

根据特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。
最小二乘法
在这里插入图片描述
拟合的目的是使残差平方和尽可能小,即实际值和预测值尽可能接近。
数学上通过最小二乘法和梯度下降法来求解系数。

通过对残差平方和进行求导(对a和b进行求导),导数为0时,该残差平方和将取极值,此时便能获得拟合需要的系数a和截距b了。

代码:查看系数、常数项

regr,coef_
regr.intercept_

线性模型评估

常用: R 2 R^2 R2(R-squared)来衡量线性拟合的优劣,P值用来衡量特征变量的显著性。
R 2 R^2 R2取值范围是0~1,越接近1则拟合程度越高。

在这里插入图片描述
另外,xgboost, lightGBM可以用r2_score()来打印出r2结果。

优点

  • 可解释性强、建模速度快

缺点

  • 模型相对简单
  • 主要针对线性数据,局限性较大

逻辑回归

介绍

评估事件发生概率的分类模型,适用于计算二分类问题。

前提假设是样本符合伯努利分布(离散型机率分布)。很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型

假设数据服从伯努利分布,通过极大似然函数,运用梯度下降来求解参数,来达到数据二分类的目的。

逻辑回归就是线性回归+sigmoid进行非线性转换,得到一个0~1之间的 概率值。

离散特征的增加和减少都很容易,易于模型的快速迭代

离散化后的特征对异常数据有很强的鲁棒性,能增强泛化能力

特征离散化以后,起到了简化了逻辑回归模型的作用,降低了模型过拟合的风险

在逻辑回归里,应用到sigmoid函数作为预测函数,将ax+b加权和(在线性回归基础上)映射到0-1的范围空间里。在进行分类判断时,设定一个概率的阈值,大于阈值则样本预测值为1,小于阈值则样本预测为0。

线性回归优化目标函数用的最小二乘法

最小二乘法:误差平方和最小

sigmoid函数:在z=0的时候十分敏感,而在z>>0和z<<0的时候都不敏感。

目标函数利用**极大似然估计法(对数似然函数作为损失函数),结合梯度下降法**来估计逻辑回归的参数。

极大似然估计:利用已知样本信息结果,反推最有可能(最大概率)导致这些样本结果出现的模型参数值(模型已定,参数未知)

对数极大似然ylogy+(1-y)log(1-y)

优缺点

优点:

  • 模型输出即为样本的概率分布、构建的模型可解释性高
  • 不需要太多变量,比较稳定,但是有时不够精确

缺点:

  • 预测结果呈S型分布,两端的概率变化非常小,中间的概率变化十分剧烈,难以找到阈值

  • 拟合能力不好只能处理线性可分类的问题

应用

  • 二分类领域,得出概率值,适用于根据分类概率排名的领域,比如搜索排名
  • 实际应用:广告点击行为预测、借款人评估、测量市场营销的成功度、预测某个产品的受益、特定的某天是否会发生地震、客户流失预警
  • 商业实战中常以基于逻辑回归的评分卡模型为基础(稳定性强,半年到一年更新一次,但不够精确,KS值不够大),再结合决策树等树模型(不太稳定,可能要一个月更新一次,但拟合度强,区分度高,可以在第一拨快速去掉违约人员)。

探索性分析

连续变量不同样本下的分布情况
离散变量,观察变量的每个可能取值的分布情况,即占比信息;还可以计算每个可能取值下的坏样本率,即哪个可能的取值下更容易出现违约情况。

数据预处理

在实际工作中获取到的数据往往不那么理想,可能会存在非数值类型的文本数据、重复值、缺失值、异常值及数据分布不均衡等问题。

无监督编码

常用的三种无监督编码——Get_dummies哑变量处理Label Encoding编号处理One-hot编码

离散变量分为可排序和不可排序变量。

哑变量dummy variable
使用pd.get_dummies()来构建哑变量处理非数值型数据。
构造哑变量容易产生高维数据,因此,哑变量常和PCA(主成分分析)一起使用,即构造哑变量产生高维数据后采用PCA进行降维。

与One-hot编码相比

  • 哑变量编码可以用更小的空间去表示离散变量的值
  • 但当离散变量较稀疏时,编码后依然存在与One-hot编码相同的编码矩阵过于稀疏的问题
  • 计算哑变量编码后的欧氏距离发现,编码后变量的距离不相等(如男、女、不确定)。

    因此,不可排序变量在数值化的过程中,如果希望保持这种等距特性,推荐使用One-hot编码方法完成离散变量数值化

pandas的哑变量编码也认为缺失值是一种特征

Label Encoding编号处理

可排序的变量的数值化转换时,如果希望保留等级大小关系,则需要用标签编码(Label编码)来完成。函数只支持单变量的标签编码,如果是多个变量,需要则需要逐个循环对变量进行编码。

使用LabelEncoder()函数将文本类型的数据转换成数字。但Label Encoding的一个缺点——可能会产生一些没有意义的关系。树模型(如决策树、随机森林及XGBoost等集成算法)能很好地处理这种转化,因此对于树模型来说,这种奇怪的现象是不会影响结果的。

另外,scikit-learn中的标签编码方式不支持变量等级设置,因此,遇到比如学历的编码时,通常认为博士比本科具有更高的编码评分,这种情况就要采用自定义字典的方式进行变量数值化

哑变量编码、labelencoder编码总结
Get_dummies的优点是它的值只有0和1,缺点是当类别的数量很多时,特征维度会很高,此时可以配合使用下一章要讲解的PCA(主成分分析)来减少维度。

  • 如果类别数量不多,可以优先考虑使用Get_dummies
  • 其次考虑使用Label Encodingreplace()函数;
  • 但如果是基于树模型的机器学习模型,用Label Encoding也没有太大关系。

onehot编码

onehot很方便计算变量之间的欧氏距离,保持了离散变量的等距性。

看这个解说:https://www.cnblogs.com/king-lps/p/7846414.html

红、黄、蓝编码,用one-hot表示就是红色:1 0 0 ,黄色: 0 1 0,蓝色:0 0 1 。如此一来每两个向量之间的距离都是根号2,在向量空间距离都相等,所以这样不会出现偏序性加粗样式,基本不会影响基于向量空间度量算法的效果。

独热编码(哑变量 dummy variable)是因为大部分算法是基于向量空间中的度量来进行计算的,为了使非偏序关系的变量取值不具有偏序性,并且到圆点是等距的。

对离散变量做One-hot编码后的结果是一个与变量种类M相关的N×M的稀疏矩阵,N为样本总数。如果离散变量的种类很多,则编码后的矩阵异常稀疏,维度特别高。

优缺点

  • 优点:
    • 独热编码解决了分类器不好处理属性数据的问题,在一定程度上也起到了扩充特征的作用。
    • 它的值只有0和1,不同的类型存储在垂直的空间。
    • 使离散变量间的距离可计算,具有离散变量数值化的效果。并且具有等距性
    • 增加了模型的非线性
  • 缺点:
    • 矩阵系数,维度很高。
    • 当类别的数量很多时,特征空间会变得非常大。在这种情况下,一般可以用PCA来减少维度。而且one hot encoding+PCA这种组合在实际中也非常有用
    • 存储上的消耗。DNN这样的网络参数过多会很耗时
    • 可以进行变量合并再one-hot编码,变量合并用分箱。(合并-onehot-PCA)

自然状态码
但是one-hot编码有稀疏性,所以还有自然状态码,比如0,1,2,3,4,5它们的编码为

自然状态码为:000,001,010,011,100,101
独热编码为:000001,000010,000100,001000,010000,100000

有监督编码

考虑目标变量,则变量编码的过程可能会使离散变量的数值化过程更具有方向性,这就是有监督编码。

WOE编码
WOE编码是评分卡中最常用的有监督编码方法。WOE编码既可以对离散变量编码,也可以对分箱后的连续变量编码。WOE编码就是对坏样本分布与好样本分布的比值再进行对数变换的结果。
WOE编码可以表示变量的预测能力。WOE值可以表示变量的每个取值的预测能力,因此,WOE值也可以作为连续变量分箱的目标函数使用。在变量选择中更常用的是IV(Information Value)值

WOE编码与One-hot编码不同,WOE编码后的变量并没有维度上的改变。One-hot编码自定义字典映射是无监督的自定义字典映射依据专家经验而定;而WOE编码是有监督的,变量的编码值是通过训练数据计算得到的,更加客观。

WOE编码好处

  • 增加变量的可解释性
  • 可以指示自变量(模型输入变量)对因变量(模型目标变量)的预测能力
  • 可以处理缺失值,将缺失值作为一个特征进行WOE编码,免除缺失值插补带来的不确定性。

WOE缺点

  • WOE编码更加依赖于训练数据,当数据集改变时,WOE值也发生改变。
  • WOE编码需要更多的训练样本才会更加准确,也要遵守训练样本与测试样本来自同一个总体分布的假设

Tree Model不太需要one-hot编码: 对于决策树来说,one-hot的本质是增加树的深度。

重复值、缺失值、异常值处理

重复值

data = data.drop_duplicates('c1')

缺失值

isnull(),isna()来查看空值。
空值处理:删除填补
删除:data.dropna(thresh=2)
填补:data.fillna()

  • 填补均值、用空值上方或下方的值替换空值的方式、还有根据分布情况可以用中位数填充。
  • data.fillna(data.mean())data.fillna(method='pad'),此处的method='pad’表示用空值上方的值来替换空值,如果上方的值不存在或也为空值,则不替换。method='backfill’或method=‘bfill’,表示用空值下方的值来替换空值,如果下方的值不存在或也为空值,则不替换
  • 评分卡建模时,不要试图用中位数或众数之类的统计值填补,应将缺失值作为一种特征来处理,这在评分卡建模时非常重要,缺失值本身就是一种非常重要的特征

    具体的填补办法依照原始变量的数据类型而定。
    1.如果原始变量为字符串类型,对缺失值用特殊的字符串填补即可,如NA或missing;or频率最多tian’chong

    2.如果原始变量为整型或浮点型
    就用同类型的特殊值填补,比如-7777(只要这个数不是原始变量中存在的值即可);
    或者对连续变量分箱,将缺失值单独作为一个箱,对分箱后的结果进行编码(连续变量离散化、离散变量再数值化)。

    不采用分箱的方式处理连续变量的缺失值,就只能用统计量进行插补,或根据算法进行建模以预测缺失值可能的取值

    可以生成一个附加列,表征该连续变量是否存在缺失值.

异常值

异常值检验可以分为单变量和多变量两种方法,

  • 单变量的异常值可以用箱线图方法

    绘制每个变量的箱线图,直观地感受样本的分布与异常值情况
    这里要先剔除缺失值再绘制箱线图

  • 多变量的检测方法用DBSCAN、LOF或随机森林方法等。

两种检测方法——利用箱体图观察利用标准差检测

箱体图观察

将上四分位数和下四分位数的差值记为IQR,即IQR=Q3-Q1;令箱体图上界为Q3+1.5×IQR,下界为Q1-1.5×IQR。
data.boxplot()绘制箱体图

利用标准差

因为3个标准差过于严格,此处将阈值设定为2个标准差,即认为当数值与均值的距离超出2个标准差,则可以认为它是异常值
如果Z-score标准化后的数值大于标准正态分布的标准差1的2倍,那么该数值为异常值,返回布尔值True,否则返回布尔值False。
在这里插入图片描述

异常值处理方式

  • 删除
  • 将异常值视为缺失值,利用上文方法处理
  • 数据分箱:等宽分箱、等深分箱
  • 取log

异常值也是非常重要的特征,尤其在反欺诈模型中,更不能提前处理异常值。在其他评分卡模型中,如果进行变量分箱,异常值也不需要处理,直接作为参数进行分箱即可

数据归一化、标准化

在实际工作中,如果不确定是否要做数据标准化,可以先尝试做一做数据标准化,看看模型预测准确度是否有提升,如果提升较明显,则推荐进行数据标准化。

min-max(归一化)

Normalize,离差标准化(线性函数归一化),它利用原始数据的最大值和最小值把原始数据转换到[0,1]区间内。实现对原始数据等比缩放。
在这里插入图片描述
这种方法比较适用在数值比较集中的情况。有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义。

mean normalization

在这里插入图片描述

z-score(标准化)

Z-score 标准化(Mean Normaliztion)也称均值归一化,通过原始数据的均值(mean)和标准差(standard deviation)对数据进行标准化。标准化后的数据符合标准正态分布,即均值为0,标准差为1。
更容易通过梯度下降找到最优解。(梯度下降:线性回归、LR、SVM、DNN,都需要归一化)
在这里插入图片描述

z-score标准化方法适用于属性A的最大值和最小值未知的情况,或有超出取值范围的离群数据的情况。该种归一化方式要求原始数据的分布可以近似为高斯分布,否则归一化的效果会变得很糟糕。

需要标准化的算法
除了KNN模型,还有一些模型也是基于距离的,所以量纲对模型影响较大,就需要进行数据标准化,如SVMKMeansPCA等。线性回归模型和逻辑回归模型,有时也需要进行数据标准化处理。
参数估计的时候使用梯度下降,在使用梯度下降求解最优化问题的时候,归一化/标准化可以加快梯度下降速度,即提升模型收敛速度。

对于树模型则无须做数据标准化处理,因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。因此,决策树模型及基于决策树模型的随机森林模型*、AdaBoost*模型、XGBoost模型、LightGBM模型通常都不需要进行数据标准化处理,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率。

归一化标准化使得变量的量纲相同,(否则梯度下降收敛困难)。

L1和L2范数

L1范数指权值向量w中各个元素绝对值之和。L1正则可以产生稀疏权值矩阵(很多元素为0),进而进行特征选择,即让特征的系数变为0。
L2范数指权值向量w中各元素的平方和,然后求平方根。L2正则不具有稀疏性,L2范数可以防止过拟合,提高模型泛化能力

L1正则化叫做Lasso回归
L2正则化叫做ridge回归(岭回归),

数据分箱

变量分箱方法主要用于连续变量,对于变量取值较稀疏的离散变量也应该进行分箱处理。

在构建信用评分卡模型的过程中,需要利用WOE值和IV值进行特征筛选,而计算这两个值的第一步就是要进行数据分箱

数据分箱就是将一个连续型变量离散化,可分为等宽分箱等深分箱。等宽分箱是指每个分箱的差值相等。等深分箱是指每个分箱中的样本数一致。

等宽分箱

  • pd.cut(),data_cut=pd.cut(data[‘年龄’], 3)
  • 用groupby()函数进行分组,用count()函数进行计数,可以获取每个分箱中的样本数
  • data[‘年龄’].groupby(data_cut).count()

信用评分卡模型可以依据年龄、月收入、负债比率、历史逾期次数等多个特征变量对客户进行评估。对特征变量年龄进行离散化可以使建立的模型更稳定.还可以自定义。

通常的做法

作用

  • 对特征变量进行离散化可以使建立的模型更稳定
  • 数据分箱还有一个好处就是可以剔除异常值的影响,也是异常值处理的一个手段
  • 缺失值作为特殊变量参与分箱,减少缺失值填补的不确定性
  • 分箱的方法往往要配合变量编码使用,这就大大提高了变量的可解释性
  • 增加变量的非线性
  • 增加模型的预测效果。

    分箱会增加模型预测效果的稳定性,即会减少模型在训练集上的表现与测试集上的偏差。

缺点

  • 同一箱内的样本具有同质性
  • 需要专家经验支持。

WOE与IV值

WOE值和IV值它们可以用来衡量特征变量的预测能力,或者说特征变量的特征区分度,类似的指标还有基尼系数和信息增益。

对于逻辑回归等没有基尼系数等指标的模型而言,可以通过WOE值和IV值进行变量选择。

IV值的计算是以WOE值为基础的,而要计算一个变量的WOE值,需要先对这个变量进行分箱处理。
WOE值与IV值在银行的信贷违约预测中应用较多。

在这里插入图片描述
进行变换后:

WOE值也可以理解为:分箱后第i个分箱中违约客户和未违约客户的比值与整个样本中该比值的差异。WOE值反映的就是分箱后第i个分箱中违约客户和未违约客户的比值yi/ni,这其实就反映了特征区分度在这里插入图片描述
如果WOE变成无穷大,处理方法有两种:第一种方法是对数据重新进行更合理的分箱,使各个分箱的WOE值不再无穷大;第二种方法是忽略这些无穷大的值,直接让它变为0。

每个分箱的WOE值的绝对值都很大,那么说明这一特征变量的特征区分度很高,因此这类问题应该重点考虑这一特征变量。

如果出现了无穷大的WOE值,也是我们不希望看到的,这样会导致基于WOE值的IV值也变成无穷大,不利于进行特征筛选

IV值
通过IV值可以评判特征变量的预测能力,从而进行特征筛选

IV是Information Value(信息量)的缩写。在进行特征筛选时,IV值能较好地反映特征变量的预测能力,特征变量对预测结果的贡献越大,其价值就越大,对应的IV值就越大,因此,我们可根据IV值的大小筛选出需要的特征变量。

各个分箱的IV值:
在这里插入图片描述
对各个分箱的IV值进行简单求和,就得到这个特征变量的IV值,计算公式如下
在这里插入图片描述
IV值永远非负,一定大于0。WOE可能为负值。因此IV值更合适。 一个特征变量的IV值越高,说明该特征变量越具有区分度
不过IV值也不是越大越好,如果一个特征变量的IV值大于0.5,有时需要对这个特征变量持有疑问,因为它有点过好而显得不够真实。通常会选择IV值在0.1~0.5这个范围内的特征变量。

对样本数据的每个特征变量进行IV值计算并排序后,就可以获得特征变量的决策能力强弱信息

用IV好于WOE

  • IV值永远非负,符合人们日常习惯
  • (pyi-pni)作为权重因子可以体现分箱的数据量占整体的比例,更精确地体现变量的预测能力。

代码

  • 坏样本、好样本比率
    在这里插入图片描述
  • WOE值
    在这里插入图片描述
  • IV值
    在这里插入图片描述
    应用
    客户流失预警。

多重共线性问题

对于线性回归模型逻辑回归模型以线性方程表达式为基础的机器学习模型,需要注意多重共线性的影响。如果存在多重共线性,则需要进行相应处理,如删去某个引起多重共线性的特征变量。

多重共线性多个变量的情况如:根据3个朝向的数字就能判断第4个朝向的数字是0还是1)。即某个特征变量可以用其他特征变量的线性组合表示,则称特征变量间存在完全共线性。可以表示如下:
在这里插入图片描述
影响

  • 线性回归估计式变得不确定或不精确
  • 线性回归估计式方差变得很大标准误差增大
  • 当多重共线性严重时,甚至可能使估计的回归系数符号相反,得出错误的结论
  • 削弱特征变量的特征重要性

检验共线性方法
相关系数判断方差膨胀系数法(VIF检验)

相关系数

  • X.corr()

相关性非常强,有理由相信它们会导致多重共线性,因此需要删去其中一个特征变量orPCA降维。
这里的相关系数是皮尔森系数(见后文)。
相关系数是多重共线性的充分条件,而不是必要条件!在有多个特征变量时,相关系数较小的特征变量间也可能存在较严重的多重共线性

VIF检验方差膨胀系数

  • V I F i = 1 1 − R i 2 VIF_i=\frac{1}{1-R_i^2} VIFi=1Ri21
  • R i 2 R_i^2 Ri2,用来衡量拟合程度, R i 2 R_i^2 Ri2越大则 V I F i VIF_i VIFi越大,表示自变量Xi与其他自变量间的多重共线性越严重。
  • V I F i VIF_i VIFi<10时,该自变量与其余自变量之间不存在多重共线性;当10≤VIFi<100时存在较强的多重共线性;当VIFi≥100时存在严重的多重共线性。
  • 代码
    在这里插入图片描述

特征选取

类别特征选取

序号特征
如成绩(高中低),转为321,保留了大小关系
独热编码
处理类别间不具有大小关系的特征,比如血型(A,B,O,AB)转为4维系数向量。
类别取值较多的话,要注意:
(1)使用稀疏向量来节省空间
(2)配合特征选择降低维度。

高维时,knn距离难以有效衡量,lr时维度太多参数也会多容易过拟合

二进制编码
利用二进制对id进行哈希映射,最终得到0/1向量。维度少于独热编码,节省存储空间。

样本不平衡

好连接:https://blog.csdn.net/choven_meng/article/details/109075410

http://www.manongjc.com/detail/7-gybyabxdrooalqm.html

建立模型时,可能会遇到正负样本比例极度不均衡的情况。建立信用违约模型时,违约样本的比例远小于不违约样本的比例,此时模型会花更多精力去拟合不违约样本,但实际上找出违约样本更为重要。这会导致模型可能在训练集上表现良好,但测试时表现不佳。

携程项目也有样本不平衡问题。好样本是坏样本的2.5倍(18:50)

很好的连接待看:https://zhuanlan.zhihu.com/p/354853593

在这里插入图片描述

数据增强

数据增强方式:~

权重设置

(1)带权值的损失函数

在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量的类别权重高,大样本量的类别权重低),然后进行计算和建模。

class_weightedsamples_weighthttps://zhuanlan.zhihu.com/p/75679299

  • 第一种是在class_weight使用balanced
  • 第二种是在调用fit函数时,通过sample_weight来自己调节每个样本权重。

设置类别权重参数class_weight
很好的说明:如果给定参数‘balanced’,则使用y的值自动调整与输入数据中的类频率成反比的权重。

默认是'balance'。当使用字典时,其形式为:Weights associated with classes in the form {class_label: weight},比如:{0: 1, 1: 1}表示类0的权值为1,类1的权值为1.

作用,主要应用以下两类问题:

  • 误分类的代价很高。比如对合法用户和非法用户进行分类,将非法用户分类为合法用户的代价很高,我们宁愿将合法用户分类为非法用户,这时可以人工再甄别,但是却不愿将非法用户分类为合法用户。这时,我们可以适当提高非法用户的权重。
  • 样本是高度失衡的,比如9995 vs 5。这时,我们可以选择balanced,让类库自动提高非法用户样本的权重。

算法中都有基于类别参数的调整设置。比如SVM,?

from sklearn.svm import SVC
model_svm=SVC(class_weight='balanced')
model_svm.fit(x,y)

对于样本不平衡,还可以使用样本权重参数sample_weight,而不使用class_weight。它是通过调节样本权重来尝试解决样本不平衡问题(样本不是总体样本的无偏估计)。在调用fit函数时,通过sample_weight来自己调节每个样本权重。

设置样本权重sample_weight。在贝叶斯、决策树、svm、lr等都会遇到

fit(X,y,sample_weight=None):X,y以矩阵的方式传入,而sample_weight则是每条测试数据的权重,同样以array格式传入。
score(X,y,sample_weight=None):评分函数,将返回一个小于1的得分,可能会小于0

在scikit-learn做逻辑回归时,如果上面类别权重调整、样本权重调整都用到了,那么样本的真正权重是class_weight*sample_weight

另外,计算结果时,如f1分数,设置损失权重: weighted

如计算f1-score, 参数里设置average='weighted',f1_score(y_true, y_pred, average=‘weighted’)

xgboost
AUC时来评估模型性能的时候,可用scale_pos_weight来平衡正样本和负样本的权重。例如,当正负样本比例为1:10时,scale_pos_weight可以取10;(参数设置为:正样本数/负样本数)——xgboost设置

计算公式为:
在这里插入图片描述

过采样

过采样的方法有随机过采样SMOTE法过采样。

随机过采样
比如原来有100个违约样本,随机抽取900次得到900个有重复的违约样本,然后和原来的100个旧违约样本组合成1000个违约样本。
因为随机过采样重复地选取了违约样本,所以有可能造成少样本过拟合
随机过采样最好任何情况下都不要用,无法学习更鲁棒、易泛化的特征,在不平衡数据上表现较差;(因为正样本的特征几乎都一样,所以模型对于这些正样本学习其实能到的东西基本都是不变的,所以容易造成过拟合)

SMOTE过采样
SMOTE法是一种针对随机过采样容易导致过拟合问题的改进方案。SMOTE算法采用了K邻近的思想,它合成新的少数类样本,合成的策略是对少数类的样本a,从它的k个最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。

简而言之:

  • 采样最邻近算法,计算出每个少数类样本的K个近邻;
  • 从K个近邻中随机挑选N个样本进行随机线性插值;(N是样本倍率)
  • 构造新的少数类样本;
  • 将新样本与原数据合成,产生新的训练集;

算法过程:

  • (1)对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻
  • (2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择N个样本,假设选择的近邻为xi
  • (3)对于每一个随机选出的近邻xi,分别与原样本按照如下的公式构建新的样本。
    在这里插入图片描述

SMOTE优点

  • 降低了过拟合风险。降低了方差。
  • 也可以理解为一种过采样的soft version,对于噪音的抵抗性更强

SMOTE缺点

  • 由于选择k邻近,存在一定盲目性。
  • 需要计算每个数据样本之间的距离,而计算距离需要的计算量随着数据集的大小呈平方级增长,因此在大规模数据集上应用这些方法可能会带来极低的计算效率。(运算开销增大)
  • 无法克服数据分布问题,可能产生边缘化数据。(可能产生可疑点)

应用

  • 在小数据集上可以用。当数据规模大且不平衡程度高时,过采样方法生成巨量的合成样本,需要很多额外计算资源。并且在少数类的表示质量很差时甚至会反向优化:过采样效果还不如直接训练。

案例:信用卡违约预测

imblearn库:Python中专门用来处理数据不均衡问题的工具库

  • 随机过采样
    在这里插入图片描述
  • SMOTE过采样
    在这里插入图片描述

下采样

下采样是从1000个不违约样本中随机选取100个样本,和100个违约样本一起构成新的训练集。欠采样抛弃了大部分不违约样本,在搭建模型时有可能产生欠拟合。
一般用来平衡数据集、去噪。
方法

  • 直接欠采样

参考:https://www.cnblogs.com/limingqi/p/11783435.html

缺点:会造成信息缺少 or 最后模型的欠拟合。

欠采样代码

在这里插入图片描述

在实战中处理样本不均衡问题时,

  • 如果样本数据量不大,通常使用过采样,因为这样能更好地利用数据,不会像欠采样那样很多数据都没有使用到;
  • 如果数据量充足,则过采样和欠采样都可以考虑使用。

集成思想

  • 第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。
  • 第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。

过拟合

损失函数也并非越小越好,若损失函数过小,容易出现过拟合。
解决过拟合方法有:数据入手、获取更多数据;降低模型复杂度;正则化;集成学习。

  • 更多数据:数据增强、GAN
  • 降低模型复杂度:DNN中减少神经元个数、减伤层数;决策树中降低树深度、剪枝等;
  • 集成学习比如bagging

欠拟合

  • 增加特征:挖掘“上下文特征”、“ID类特征”、“组合特征”等新的特征。梯度提升树可以构造组合特征。
  • 增加模型复杂度:线性模型中增加高次项
  • 减少正则化系数

正则化

损失函数也并非越小越好,若损失函数过小,容易出现过拟合。为了避免这个问题,可以在损失函数中加入正则化项或惩罚项,

正则化为了解决过拟合为问题,分为L1和L2正则化

L1 正则化。向量中各元素绝对值之和,逼近于0。又叫做稀疏规则算子(Lasso regularization)。关键在于能够实现特征的自动选择,参数稀疏可以避免非必要的特征引入的噪声;

L2 正则化。使得每个元素都尽可能的小,但是都不为零。在回归里面,有人把他的回归叫做岭回归(Ridge Regression),也有人叫他 “权值衰减”(weight decay)。

L1 会趋向于产生少量的特征,而其他的特征都是 0,而 L2 会选择更多的特征,这些特征都会接近于 0

决策树正则化就是剪枝,通常把子节点个数作为惩罚项。

PCA主成分分析

如果将所有特征数据都用来拟合模型,会提高模型的复杂度,造成过拟合风险显著增大,且不同的特征数据间可能存在共线性。此时就需要对数据进行降维,以浓缩特征向量。

降维的方法主要有选择特征抽取特征两种:

  • 选择特征是从原有的特征中挑选出最佳的特征;
  • 过滤方法:将所有特征进行打分评价,选择最有效的一些特征。比如:卡法检验,信息增益,相关系数打分。
  • 包装方法:将特征组合的选择看做是一个在特征空间中的搜索问题。比如:随机爬山法,启发式的搜索方法等。
  • 嵌入方法:将特征选择的过程嵌入到模型训练的过程中,其实也就是正则化的方法。比如lasso回归,岭回归,弹性网络(Elastic Net)等。
  • 抽取特征则是将数据由高维向低维投影,进行坐标的线性转换PCA即为典型的抽取特征的方法,它不仅是对高维数据进行降维,更重要的是经过降维去除噪声,发现数据中的模式。

二维到一维的数据降维的本质就是将原始数据做零均值化处理后,寻找如下所示的合适的线性组合系数α和β,将二维数据转换为一维数据。
将n维数据(X1,X2,…,Xn)转换成k维数据(F1,F2,…,Fk),即将n个特征降维成k个新特征呢?其本质也是一样的,构造k个线性组合
在这里插入图片描述
线性组合满足以下特征:
在这里插入图片描述
步骤:

  • 将原始n维特征数据按行做零均值化处理后求得n维协方差矩阵,
  • 计算协方差矩阵的特征值及其对应的单位特征向量
  • 特征向量按特征值从大到小排序,使用前k行组成的矩阵乘以原始n维数据矩阵,即可得到降维后的k维数据矩阵,
  • 再通过该矩阵就能获得线性组合系数,这些线性组合系数能最大化样本方差,使新的k个特征互不相关

介绍

找出数据里最主要的方面,用数据里最重要的方面代替原始数据。因此主成分分析一种线性变换,把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标上,以此类推。

PCA的目的是为了让映射后的样本具有最大的发散性。

保留低阶主成分,忽略高阶主成分。低阶主成分通常能保留住数据的最重要的方面

算法步骤

把矩阵X从n x m维降到n x k维的矩阵Y,找到这样的矩阵W维度为m x k

  1. 将原始数据按列组成n行m列矩阵X

  2. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值(中心化

  3. 求出**协方差**矩 C = 1 m X X T C=\frac{1}{m}XX^T C=m1XXT

    根据下面的解释,是找X的n个随机变z:
    在这里插入图片描述
    对角线上的元素是各个随机变量的方差,非对角线上的元素是两两随机变量之间的协方差,该矩阵为对称矩阵。

  4. 求出该协方差矩阵的特征值、单位特征向量

    通俗地说,任意一个协方差矩阵都可以视为线性变换的结果

    对于任何对称矩阵,存在一个特征值分解 ∑ = U ⋀ U T \sum = U\bigwedge U^T =UUT,U的每一列都是相互正交的特征向量,且是单位向量,满足 U T U = I U^T U=I UTU=I,对角矩阵对角线上的元素从大到小是特征值,非对角线上的元素都是0!

  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵,取前k行组成矩阵W,W维度为m x k,实现矩阵Y=XW

中心化是为了后续参与统计运算,比如求方差就包括了x-u

协方差:协方差则一般用来刻画两个随机变量相似程度
在这里插入图片描述

方差:用来度量单个随机变量离散程度。因此方差可以视作随机变量x关于其自身的协方差Conv(x,x)

在这里插入图片描述

应用

特征工程数据降维同时保持数据集的对方差贡献最大的特征

非监督学习的降维方法,只需要特征值分解,就可以对数据进行压缩、去噪。

降维的必要性:

  • 多重共线性可能使解空间不稳定,影响结果的稳定性。
  • 高维空间具有稀疏性

优缺点

优点

  • 仅需要以方差衡量信息量,不受数据集以外的因素影响
  • 主成分之间正交,可消除原始数据成分间的相互影响的因素。
  • 计算方法简单,主要运算是特征值分解,易于实现。

缺点

  • 主成分各个特征维度的含义具有一定的模糊性,不如原始样本特征的解释性强。
  • 方差小的非主成分也可能含有对样本差异的重要信息,因降维丢弃可能对后续数据处理有影响。
  • 如果数据很多,协方差计算维度很大

决策树

决策树

决策树是一种基本的分类与回归方法,其模型就是用一棵树来表示整个决策的过程,这棵树可以是二叉树也可以是多叉树。根节点包括整个样本集,每一个叶子节点都对应一个决策结果,每一个内部节点对应一个决策过程。因此从根节点到每个叶子节点的路径对应一个判定序列。

回归决策树划分标准不是基尼系数or信息熵,而是均方误差MSE。value是均值。

决策树通过学习简单的IF-THEN决策规则从而预测目标变量的值,其模型就是用一棵树来表示整个决策的过程,从上而下,每一次迭代就是选择一个特征属性进行分裂,直到不能叶子节点不能分裂为止。

决策树的生成过程

  • 选择特征:ID3优先选择信息增益最大的,

    • ID3使用信息增益作为选择特征的准则

      熵用于表示随机变量不确定性的度量
      在这里插入图片描述
      信息增益 = 信息熵 - 条件熵
      在这里插入图片描述
      信息增益越大表示使用特征 A 来划分所获得的“纯度提升越大”。 选择信息增益最大的特征,直到剩余特征的信息增益小于阈值、或已经没有特征可以选择时终止。

    • C4.5 使用信息增益比作为选择特征的准则

      信息增益比 = 信息增益 / 划分前熵
      在这里插入图片描述

    • CART使用GINI指数作为选择特征的准则

      https://blog.csdn.net/weixin_42676175/article/details/104480532
      基尼指数反映了从数据集中随机抽取两个样本,其类别标记不一致的概率。基尼指数代表了模型的不纯度,
      基尼系数越低表示系统的混乱程度越低,区分度越高,特征越好,越适合用于分类预测。这和信息增益(率)正好相反在这里插入图片描述
      在这里插入图片描述

  • 决策树生成:通常是利用信息增益最大、信息增益比最大、Gini 指数最小作为特征选择的准则。从根节点开始,递归的生成决策树相当于是不断选取局部最优特征,或将训练集分割为基本能够正确分类的子集;

  • 对决策树进行剪枝优化,预防树的过拟合,增强泛化能力。构建决策树的损失函数,将每一个叶子节点回缩到上一层父节点,对损失函数最小的叶节点进行修剪。

    剪枝策略
    预剪枝(边建立、边剪枝):在构造过程中,对每个节点在划分前先进行评估,当某个节点满足剪枝条件,则直接停止此分支的构造。可以控制树的深度(最常),叶子节点个数、叶子节点样本数、信息增益量等。
    <\hr>
    后剪枝:先从训练集生成一颗完整的决策树,然后自底向上对非叶节点进行考察,若将该节点对应的子树替换为叶节点,能带来泛化性能的提升,则将该子树替换为叶节点。C4.5就后剪枝。后简直通常可以得到泛化能力更好的决策树,但时间开销大。

回归决策树
回归决策树模型与分类决策树模型最大的不同就是其划分标准不是信息熵或基尼系数,而是均方误差MSE

决策树优缺点

优点:

  • 易于理解和解释,输出树形图解释性较强,容易提取出规则。

  • 对输入数据的属性要求较低对异常值不敏感

    可以同时处理标称型(有限,如真与假)和数值型(无限)的数据;可以处理有缺失属性的样本;能处理不相关的特征

  • 是很多重要集成模型的基础

缺点:

  • 在数据集特征维度很多时,决策树会生成很多枝干,或者树很深,容易发生过拟合,结果不稳定
  • 容易忽略数据集中属性的相关关联
  • 判定过程过于规则,因此在垃圾邮件分类中容易被攻击

改进

  • 剪枝,来防止过拟合
  • 使用基于决策树的combination算法,如bagging算法,randomforest算法,可以解决过拟合的问题;
  • K折交叉验证

应用场景

  • 分类(银行客户贷款分类、垃圾邮件分类)
  • 作为复杂机器学习模型的基础模型(随机森林)

不同的决策树算法辨析

ID3

优点

  • 理论清晰、方法简单、学习能力较强

缺点:

  • ID3只能用于处理离散分布的特征,不能处理连续的数据,并且对缺失值敏感

  • ID3会越分越细,导致过拟合

  • ID3 没有剪枝策略,容易过拟合

  • 信息增益准则对可取值数目较多的特征有所偏好,类似“id”这种编号的特征其信息增益接近于 1(因为自身熵值极大,它的特征的熵值为0,所以信息增益率会很高);

应用

  • ID3是多叉树
  • 只可以分类

C4.5

优点:

  • 克服了 ID3 仅仅能够处理离散属性的问题还能处理连续特征
  • 用信息增益率能克服会分割太细的问题、以及信息增益偏向选择取值较多特征的问题,
  • 考虑缺失值
  • 使用后剪枝策略来预防过拟合

连续值的排序运算:先将特征取值排序,以连续两个值中间值作为划分标准。尝试每一种划分,并计算修正后的信息增益,选择信息增益最大的分裂点作为该属性的分裂点。

分割太细分母增加,信息增益率会降低。

缺点:

  • C4.5 只能用于分类;
  • C4.5 使用的熵模型拥有大量耗时的对数运算处理连续值特征还有排序运算
  • 信息增益率对可取数目较少的属性有所偏好(分母越小,整体越大)

应用

  • 只可分类问题
  • C4.5也是多叉树

CART
使用基尼指数,因此减少了大量的对数运算,偏向于特征值较多的特征;CART实质是在某个特征维度对样本空间进行划分,这变为一种求最优的切分特征和最优的切分点。XGBoost是由很多的CART树组成。

生成的树必须是二叉树(C4.5, ID3是多叉树);CART树可以多次重复选择特征。(ID3和C4.5每层只有一次)

优点

  • 可以回归、也可以分类;(C4.5、ID3只可以分类)
  • 可以连续也可以离散(ID3只可以离散),并有多种缺失值处理方式
  • 二叉树计算速度很快
  • 使用广泛

总体区别

在这里插入图片描述
ID3只可以离散,C4.5 CART都可以连续
ID3和C4.5只能分类,CART可以分类可以回归
ID3对样本缺失值比较敏感,C4.5和cart可以对缺失值做不同方式的处理;
ID3和C4.5多叉树,样本特征不复用;CART树二叉树,特征可以重复使用;
ID3和C4.5通过简直来权衡准确性和泛化,CART利用全部数据发现所有可能的树结构进行对比

树的集成算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-egHx2ZTf-1630397038456)(F:/%E6%96%87%E6%A1%A3/youdao/changreal@163.com/d6938c203ba64101b2b5ad4c0f6fa95c/clipboard.png)]

Bagging和boosting

Bagging(并联):并行地训练一堆分类器,各分类器之间没有依赖关系。bagging是有放回的选择样本,所有的样本权重保持不变。理论上越多树越好,但实际上超过一定数量结果就差不多上下浮动了。bagging采用并行计算的方式,可以同时生成所有的弱分类器。预测的时候,所有弱分类器的权重相等。

Boosting(串联):基于提升的迭代算法。每次训练过程中,新增的树是基于预测错分类的样本点,给这些样本点更多的权重,然后权重被更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代进行下去。也就是说新分类器会把注意力放在之前分类效果不好的样本上。各分类器之间有依赖关系,必须串行。boosting采用顺序计算的方式,各个分类器只能按顺序生成,后一个分类器的参数会用到前一个分类器的结果。预测的时候,每个弱分类器都有相应的权重,分类误差越小,权重越高。

比如XGboost, Adaboost, GBDT

  1. Bagging + 决策树 = 随机森林
  2. AdaBoost + 决策树 = 提升树
  3. Gradient Boosting + 决策树 = GBDT

随机森林

介绍

是多重决策树的组合,而不只是一棵决策树。让很多决策树一起工作,可以进行回归、分类。采用大多数决策树的输出结果作为最终预测结果。

针对回归问题,通过随机森林中所有决策树预测值的平均值计算得出最终预测值。(软投票)

针对分类问题,随机森林中的每棵决策树会预测最新数据属于哪个分类。最终,哪一分类被选择最多,就预测这个最新数据属于哪一分类。(硬投票)

随机森林(Random Forest)是 Bagging 的一个变体。Ramdon Forest 在以决策树为基学习器构建 Bagging 集成的基础上,进一步在决策树的训练过程中引入随机属性选择

随机森林模型会在原始数据集中随机抽样,构成n个不同的样本数据集,然后根据这些数据集搭建n个不同的决策树模型,最后根据这些决策树模型的平均值(针对回归模型)或者投票情况(针对分类模型)来获取最终结果。
数据随机特征随机(k=根号M)。

Bagging(并联):并行地训练一堆分类器,各分类器之间没有依赖关系。bagging是有放回的选择样本,所有的样本权重保持不变。理论上越多树越好,但实际上超过一定数量结果就差不多上下浮动了。bagging采用并行计算的方式,可以同时生成所有的弱分类器。预测的时候,所有弱分类器的权重相等。
bagging用于减少方差。

Boosting(串联):基于提升的迭代算法。每次训练过程中,新增的树是基于预测错分类的样本点,给这些样本点更多的权重,然后权重被更新过的样本集被用于训练下一个分类器,整个训练过程如此迭代进行下去。也就是说新分类器会把注意力放在之前分类效果不好的样本上。各分类器之间有依赖关系,必须串行。boosting采用顺序计算的方式,各个分类器只能按顺序生成,后一个分类器的参数会用到前一个分类器的结果。预测的时候,每个弱分类器都有相应的权重,分类误差越小,权重越高。
boosting用于减少偏差。

Boosing就是培养精英和重视错误。
培养精英”就是每一轮训练后对预测结果较准确的弱学习器给予较大的权重,对表现不好的弱学习器则降低其权重。在最终预测时,“优秀模型”的权重是大的,相当于它可以投出多票,而“一般模型”只能投出一票或不能投票。
重视错误”就是在每一轮训练后改变训练集的权值或概率分布。通过提高在前一轮被弱学习器预测错误的样例的权值,降低前一轮被弱学习器预测正确的样例的权值,来提高弱学习器对预测错误的数据的重视程度,从而提升模型的整体预测效果。

比如XGboost, Adaboost, GBDT

  1. Bagging + 决策树 = 随机森林
  2. AdaBoost + 决策树 = 提升树
  3. Gradient Boosting + 决策树 = GBDT

stacking通过一个元分类器或者元回归器来整合多个分类模型或回归模型的集成学习技术。通常考虑的是异质弱学习器,并行地学习它们,并通过训练一个「元模型」将它们组合起来,根据不同弱模型的预测结果输出一个最终的预测结果。 Stacking中第二层学习的过程就是为了寻找合适的权重或者合适的组合方式。
基础模型利用整个训练集做训练,元模型将基础模型的预测作为特征进行训练。

stacking 用于提升预测结果的stacking

构建步骤

  1. 抽取样本:每棵树的样本是通过有放回的方式从样本总体中随机抽取

    随机采样:随机打乱、拿噪音点等。

  2. 抽取特征:每棵树都会随机选择k个特征,然后采用决策树算法(ID3, C4.5, CART)来构建一课决策树

    K控制了随机性的引入程度,是一个重要的超参数

  3. 构建多课决策树(建立树的过程是同时运行的)

  4. 采用多数投票法输出最后的决策结果

应用场景

预测贷款风险,银行or证券使用较多;
预测股票涨跌。

优势劣势

优势

  • 有效解决决策树过拟合问题,能够处理特征维度很多的数据(决策树就适合少的)

  • 对数据的适应能力强,可以处理离散和连续的,无需要规范化

  • 可解释性强,训练完后可以给出哪些feature比较重要,可以可视化分析

    我的携程预测方法里就用了feature_importance来查看。

    判断方法有两种,树中特征出现的位置来判断;

  • 可以解决回归和分类问题

  • 不同决策树可以由不同主机并行训练生成,效率很高

  • 由于每次不再考虑全部的属性,而是一个属性子集,所以相比于 Bagging 计算开销更小,训练效率更高;

劣势

  • 特征维度较小的数据不适合采用

  • 相对于决策树来说要花费更多时间来训练

随机森林评估特征重要性
集成学习可以评估特征的重要性。用随机森林进行特征重要性评估的思想其实很简单,说白了就是看看每个特征在随机森林中的每颗树上做了多大的贡献,然后取个平均值,最后比一比特征之间的贡献大小。
贡献通常可以用基尼系数作为评价标准来衡量。
在这里插入图片描述

代码常用参数
在这里插入图片描述
在这里插入图片描述

AdaBoost

Adaptive Boosting,它以一种高度自适应的方式按顺序训练弱学习器。
简单来说,AdaBoost算法的核心思想就是调整错误样本的权重,进而迭代升级

针对分类问题,AdaBoost算法根据前一次的分类效果调整数据的权重,在上一个弱学习器中分类错误的样本的权重会在下一个弱学习器中增加,分类正确的样本的权重则相应减少,并且在每一轮迭代时会向模型加入一个新的弱学习器。不断重复调整权重和训练弱学习器,直到误分类数低于预设值或迭代次数达到指定最大值,最终得到一个强学习器

在这里插入图片描述

在这里插入图片描述

过程:

  1. 初始化各样本的权重为1\N
  2. 训练弱学习器,计算误差率,构造出误差率最小的弱学习器
  3. 根据误差率调整弱学习器的权重

    在这里插入图片描述

  4. 更新样本的权重

    有了弱学习器的权重后,就可以更新原来样本的权重了。这也是AdaBoost算法的核心思想所在:增大分类错误的样本的权重,减小分类正确的样本的权重,从而在之后实现更为准确的分类。

  5. 将各个训练后得到的弱分类器组合成强分类器,反复迭代,直到误分类数达到阈值迭代次数达到设定的最大值

正则化项
为防止AdaBoost算法过拟合,可以向模型加入正则化项——每个弱学习器的权重缩减系数ν,又称为learning rate(学习率)。

应用
AdaBoost算法既能做分类分析,也能做回归分析。

案例:
信用卡精准营销预测
特征变量有客户的年龄、性别、月收入、月消费及月消费与月收入之比,目标变量是精准营销后客户是否响应(即客户在营销后是否办了信用卡),取值为1代表营销有效,取值为0代表营销失败

参数
在这里插入图片描述
adaboostRegression多了个loss参数
在这里插入图片描述

GDBT

GBDT是Gradient Boosting Decision Tree(梯度提升树)的缩写。与AdaBoost的区别在于:AdaBoost算法是调整权重,而GBDT算法则是拟合残差。AdaBoost算法根据分类效果调整权重(弱分类器权重、样本权重)并不断迭代,最终生成强学习器;GBDT算法则将损失函数的负梯度作为残差的近似值,不断使用残差迭代和拟合回归树,最终生成强学习器。

GBDT算法既能做分类分析,又能做回归分析。GBDT分类模型的弱学习器是分类决策树模型,GBDT回归模型的弱学习器则是回归决策树模型。

当损失函数是平方函数时,负梯度就是残差。不过当损失函数不是平方函数时,负梯度只是残差的近似值,并不完全等于残差。
残差是实际值-预测值( y i − y ^ i y_i - \hat y_i yiy^i),然后用下一颗树的残差去拟合上一课树产生的残差,从而产生新的残差。(缩小误差,从而让树预测的更准确。)(残差会越来越小,or精确的说,均方误差会越来越小)
并不断重复此步骤,使残差变小
即:第一棵树预测的是y得到y1, 第二棵树预测的是y-y1得到y2, 第三棵树预测的是Y-y1-y2得到的是y3.

每一步残差计算变相增大了分类instance的权重。对于已经分对instance则趋于0。这样后面的树能更专注前面被分错的instance。

在这里插入图片描述
步骤

  1. 初始化f0(x)=0
  2. 计算残差,拟合残差,得到决策树Tm(x),更新迭代公式fm(x):
    在这里插入图片描述
  3. 误差迭代次数达到指定要求时,得到回归问题提升树。
    在这里插入图片描述

代码
实际中默认模型迭代次数为100.

应用
GBDT算法既能做分类分析,又能做回归分析
预测信用卡额度, 产品定价预测

优点

  • 用更少的feature,避免过拟合

损失函数
在这里插入图片描述

rf和gbdt
  • bagging、boosting
  • 组成随机森林的树可以是分类树也可以是回归树,而GBDT只由回归树组成
  • 训练样本:RF每次迭代的样本是从全部训练集中有放回抽样形成的,而GBDT每次使用全部样本
  • 并行性:RF的树可以并行生成,而GBDT只能顺序生成(需要等上一棵树完全生成)
  • RF最终是多棵树进行多数表决(回归问题是取平均),而GBDT是加权融合
  • 随机森林不需要进行数据预处理、归一化,而GBDT需要进行归一化
  • RF对异常值不敏感,而GBDT对异常值比较敏感
  • RF不易过拟合,而GBDT容易过拟合
啥时GBDT不如LR

高维稀疏特征的时候,线性模型会比非线性模型好:带正则化的线性模型比较不容易对稀疏特征过拟合。

XGBoost

在这里插入图片描述

某种程度上可以说是GBDT算法的改良版,两者在本质上都是利用了Boosting算法中拟合残差的思想。运行速度快,预测准确度高,且支持并行操作,极大地提升了机器学习的效率和效果,无论是分类模型还是回归模型都有很大的作用。
xgboost是一堆cart树的集合。

算法本身优化

  • XGBoost算法的损失函数,除了本身的损失,还加上了正则化部分,用来控制模型的复杂度,可以防止过拟合,泛化能力更强。
    在这里插入图片描述
    ∑ Ω ( f i ) \sum \varOmega (f_i) Ω(fi)是将全部t课树的复杂度进行求和,添加到目标函数中作为正则化项。 复杂度由叶子数组成。
    在这里插入图片描述
  • XGBoost对损失函数做二阶泰勒展开(将损失函数的二阶导数作为学习目标),相较于GBDT算法的损失函数只对误差部分做负梯度(一阶泰勒) 展开,增加了精度,二阶泰勒展开可以近似大量损失函数,
  • ?借鉴RF支持列抽样,不仅能降低过拟合,还能减少计算。这是xgboost区别于传统gdbt的一个点。
  • ?shrinkage收缩方法。相当于学习系数,对每颗子树都要乘上该系数,防止过拟合。
  • 能对缺失值处理。通过枚举所有缺失值在当前节点是进入左子树还是右子树更优来处理缺失值默认的方向。

算法运行效率优化

  • 对每个弱学习器,如决策树建立的过程做并行选择,找到合适的子节点分裂特征和特征值,从而提升运行效率

xgboost的生成

  • 计算出损失函数的二阶导数,此为需要拟合的量
  • 根据需要拟合的值,构建cart树,cart树构建是串行的。树的构建,第一步是选择特征然后对特征点进行分裂,这里需要计算基尼系数、信息增益比等,这一步是可以并行的——每一层的分裂过程并行,在特征粒度上,因为预先对数据进行了排序,各个特征的增益计算就可以开多线程并行。

多数情况下,xgboost将cart回归树作为基分类器,回归树预测误差(均方误差、对数误差、还可以是交叉熵等),节点是数值(预测值)。CART回归树是二叉树,通过不断将特征进行分裂。CART实质是在某个特征维度对样本空间进行划分这变为一种求最优的切分特征和最优的切分点XGBoost是由很多的CART树组成

XGBoost使用了和CART回归树一样的想法,利用贪心算法,遍历所有的特征的所有特征划分点。计算loss functoin最小值。
xgb

特征重要性
(1)weight:使用特征在所有树中作为划分属性的次数
(2)gain:使用特征在作为划分属性时loss平均的降低量
(3)cover:使用特征作为划分属性时对样本的覆盖度

应用:XGBoost算法搭建金融反欺诈模型和信用评分卡模型
金融反欺诈特征变量有:客户换设备次数、在本次交易前的支付失败次数、换IP的次数、换IP国的次数及本次交易的金额。(商业实战中使用的特征变量远比本案例多得多)

代码
XGBoost分类模型的特征变量只支持array数组类型或DataFrame二维表格类型的数据

为什么调优后的结果还不如调优前的结果?通常来说,出现这种情况的概率较小,可能是因为数据量较小,也可能是因为本案例中使用了交叉验证

参数
常用:max_depth, n_estimators, learning_rate
我:objective定义目标函数,n_jobssub_sample, colsample_bytree构建每棵树时的子抽样比例,

objective参数在回归问题中取值为’reg:linear’,而在二分类问题中一般取值为’binary:logistic’,在多分类问题中一般取值为’multi:softmax’。

max_depth,min_child_weightgamma用于控制模型复杂度

然后配合GridSearch进行参数调优
在这里插入图片描述
调参顺序

  • 固定学习率、n_estimators
  • 深度max_depth,min_child_weight(默认为1,一般大于1),避免欠拟合过拟合

    如果一个结点分裂后,它的所有子节点的权重之和都大于该阈值,该叶子节点才可以划分。

  • 损失函数下降gamma

    对于一个叶子节点,当对它采取划分之后,损失函数的降低值的阈值。

  • 抽样比例subsample和特征采样比例
  • L1正则, reg_alpha耗时久
  • L2正则reg_lambda
  • learning_rate

xgboost很好的参考:https://zhuanlan.zhihu.com/p/83901304
xgboost很好的相关问题:https://blog.csdn.net/andyjkt/article/details/107599156
xgboost的相关面试题:https://blog.csdn.net/weixin_39675926/article/details/111139229

xgboost优缺点
优点

  • 精度更高(二阶泰勒),二阶导数有利于梯度下降的更快更准
  • 更灵活,支持CART、线性分类器、支持自定义损失函数
  • 加入了正则项来控制模型复杂度(包含了树的叶子节点个数、叶子节点权重的 L2 范式)。降低了模型的方差,有助于防止过拟合
  • 借鉴RF,支持列抽样,降低过拟合,减少计算。(训练的时候只用一部分特征)
  • 缺失值处理

    先不处理那些值缺失的样本,采用那些有值的样本搞出分裂点,在遍历每个有值特征的时候,尝试将缺失样本划入左子树和右子树,选择使损失最优的值作为分裂点。

  • 支持并行——在特征粒度上的并行。XGBoost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行

    决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点)

缺点

  • 虽然预排序可以降低寻找最佳分裂点的计算量,但是在节点分裂过程中仍要遍历数据集
  • 预排序过程的空间复杂度过高
xgboost和gbdt
  • gdbt无显式正则化
  • gdbt仅使用了目标函数一届泰勒展开,而xgboost使用了二阶的泰勒展开,能加快收敛速度
  • xgboost采用了子采样、列采样,gdbt每轮迭代使用全部数据。
  • gdbt采用cart作为基分类器,xgb支持多种类型的基分类器。
  • xgboost对缺失值处理,gdbt没有
  • xgboost通过预排序的方式来实现特征并行,提高模型训练效率
  • xgboost支持分布式计算

    XGBoost预先将每个特征按特征值排好序,存储为块结构,分裂结点时可以采用多线程并行查找每个特征的最佳分割点,极大提升训练速度。

xgboost和rf比较
  • xgboost是boosting, rf是bagging。xgboost的树是串行生成,rf的树可以并行生成
  • 对于最终结果而言,分类时,rf采用多数投票,xg是将所有结果累加or加权累加。(xgb本质上是回归算法)
  • rf对异常值不敏感;xgboost对异常值很敏感。?
  • rf对训练集的数据权重一样,xgboost由于基于gdbt,所以是基于权值的弱分类器的集成
  • rf通过减少样本方差提高性能,xgb通过减少模型偏差提高性能。
  • xgboost也支持列抽样,相对比随机森林效果更好。
  • xgboost在更大数据量更多特征上比随机森林效果更好。
数据预处理对于XGBoost的重要性

对于XGBoost模型而言,很多预处理都不是必要的,例如缺失值,XGBoost模型会自动处理,它会通过列举所有缺失值在当前节点是进入左子树还是右子树来决定缺失值的处理方式
因为XGBoost模型是基于决策树模型的,所以像线性回归等模型需要的特征变换(如离散化、标准化、取log、共线性问题处理)等预处理工作XGBoost模型都不太需要,这也是树模型的优点之一。(对共线性不敏感,不需要特征标准化)。节省了很多特征工程时间。

书本累计商业应用

客户价值预测(线性回归)

客户价值预测就是预测客户在未来一段时间可以带来多少利润
利润可能来自:信用卡年费、取现手续费、分期手续费、境外交易手续费
特征:历史贷款金额、贷款次数、月收入、学历、性别

用户分群(Kmeans)
用户流失预警
用户风险预测
信用卡额度预测(回归)
信用评分卡模型(XGBoost):根据客户的信用历史资料构建信用评分卡模型给客户评分。根据客户的信用得分,可以预估客户按时还款的可能性,并据此决定是否发放贷款贷款的额度和利率

历史授信额度、月收入、年龄、历史违约次数

通常会用到逻辑回归模型决策树模型
商业实战中常以基于逻辑回归的评分卡模型为基础(稳定性强,半年到一年更新一次,但不够精确,KS值不够大),再结合决策树等树模型(不太稳定,可能要一个月更新一次,但拟合度强,区分度高,可以在第一拨快速去掉违约人员)。

金融反欺诈模型(XGBoost)

客户换设备次数、在本次交易前的支付失败次数、换IP的次数、换IP国的次数及本次交易的金额

客户违约预测(LightGBM):银行等金融机构经常会根据客户的个人资料、财产等情况,来预测借款客户是否会违约,以便进行贷前审核、贷中管理、贷后违约处理等工作。通过海量数据对客户进行风险评估并进行合适的借款利率定价,这便是一个典型的风险定价过程。

收入、年龄、性别、历史授信额度、历史违约次数

广告收益回归预测
新闻聚类分群模型(Kmeans DBSCAN)

朴素贝叶斯

介绍

贝叶斯定理可以理解成下面的式子:

后验概率(新信息出现后的A概率) = 先验概率(A概率) x 可能性函数(新信息带来的调整)

P(A|B)称为"后验概率"

P(A)称为"先验概率"(Prior probability)

P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,也就是新信息B带来的调整,作用是将先验概率(之前的主观判断)调整到更接近真实概率。

朴素贝叶斯通过特征的概率来预测分类模型是不需要调参的

  1. 训练分类器,计算输入的训练样本中,每个不同的分类类别在训练样本中出现的频率以及每个类别下各个特征属性出现的条件概率值

    先计算先验概率P(类别)、可能性函数P(特征|类别) /P(类别)

  2. 根据公式,计算在该样本出现的条件下,各个分类类别出现的概率,哪个概率最大,待分类的样本就属于哪个类别

    P(类别|特征) = 先验*可能性函数

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

条件独立性假设

朴素贝叶斯法对条件概率分布做了条件独立性的假设

假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁)。由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的

应用场景

  • 主要用于文本分类(多分类)、垃圾邮件分类等

  • 垃圾邮件过滤、翻译、搜索、中文分词;

  • 情感分类

  • 投资策略;无人驾驶更新地图信息;

  • 肿瘤预测模型。

优缺点

优点

  • 对数据(缺失数据)不敏感,算法简单易懂,常用于文本分类
  • 对小规模数据表现很好,能够处理多分类问题
  • 对大数量训练和查询的时候具有较高的速度,即使超大规模数据集,也会有相对较少的特征数,仅是特征概率的数学运算

缺点

  • 需要计算先验概率
  • 分类决策存在错误率,相比于其他经典的机器学习模型,朴素贝叶斯模型的泛化能力稍弱(因为假设特征之间相互独立)
  • 使用了样本属性的独立性假设,因此对于样本属性有关联时效果不好(在实际中不太容易成立,因此属性相关度小的时候性能最好)

常见类型的贝叶斯

高斯朴素贝叶斯:特征变量是连续变量,符合高斯分布。比如说人的身高、物体长度等。如果连续变量不是正态分布,需要先转为正态分布。

伯努利贝叶斯:特征变量是离散变量,符合伯努利分布(0/1分布)。在文本分类中特征变量体现在一个单词是否出现。

多项式朴素贝叶斯:特征变量是离散变量,符合多项式分布。在文档分类中特征变量体现在一个单词出现的次数,或者是单词的 TF-IDF 值等。是一种典型的文本分类模型。

TF-IDF
在这里插入图片描述

文本分类应用实例:
https://www.cnblogs.com/jpcflyer/p/11069659.html

支向量机SVM

很好的解释:https://zhuanlan.zhihu.com/p/106265377

介绍

线性可分SVM

二分类模型,求解出正确划分数据集并且找出几何间隔最大超平面。对于一个线性可分的数据集来说,这种超平面有无数多个,但是几何间隔最大的超平面却是唯一的。

划分数据的决策边界叫做超平面。离这个超平面最近的点就是“支持向量”。点到超平面的距离叫做间隔。支持向量机的意思就是使得超平面和支持向量之间的间隔尽可能的大。这样才可以使两类样本准确分开。

超平面由法向量w和截距b决定。
在这里插入图片描述
距离该超平面最近的点(圈出来的点)就是支持向量

支持向量到超平面的距离之和 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} w2, SVM的目标就是使得这个距离之和最大化即||w||最小化。可以借助拉个朗日来计算极值,但是推理过程我不太了解。

线性可分:可以用一个线性函数把两类样本分开,比如二维空间中的直线、三维空间中的平面以及高维空间中的线性函数

线性不可分:指有部分样本用线性分类面划分时会产生分类误差的情况。

为什么要软间隔最大化?

因为如果训练数据线性可分,会存在无数个超平面,利用硬间隔最大化的原理可以得到唯一解。近似可分的时候,可以引入松弛变量,求解软间隔最大化学习到一个线性分类器,此为线性支持向量机。

线性不可分SVM

需要核函数技巧(kernel trick)和软间隔最大化来学习非线性SVM

核函数把原始样本从现有空间映射到一个更高维的空间,使得样本在高位空间线性可分。

常见核函数:

  • 线性核:样本数量小于特征数,选择线性核。K(x,z)=x*z
  • 高斯核:参数相对少,大样本or小样本都有很好的效果。优先使用高斯核or线性核。
  • 样本数量大于特征数目,可以使用非线性核,将样本映射到更高的维度:如高斯核、多项式核
  • 样本数量等于特征数量,也可以高斯核
  • 多项式核:核参数较多。

优缺点

优点

  • 少数支持向量决定了最终结果,对异常值不敏感!
  • 计算复杂度取决于支持向量的数量,而不是样本空间的维度,避免了维度灾难。因此可以解决高维问题
  • SVM是凸优化问题,求得的解是全局最优解而不是局部最优(相对于神经网络等算法)

缺点

  • 主要用于二分类。多分类问题可以通过多个二分类在支持向量机来解决。
  • 对缺失数据敏感
  • 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数
  • 对参数和核函数的选择比较敏感。

KNN算法

介绍

K近邻算法的原理非常简单:对于一个新样本,K近邻算法的目的就是在已有数据中寻找与它最相似的K个数据,或者说“离它最近”的K个数据,如果这K个数据大多数属于某个类别,则该样本也属于这个类别。KNN需要标准化
数据标准化的常见方法有min-max标准化(也称离差标准化)和Z-score标准化(也称均值归一化)

步骤如下:

  1. 计算训练样本和测试样本中每个样本点的距离

    欧式距离、

    曼哈顿距离:|x1-x2|+|y1-y2|

  2. 对所有距离进行排序(升序)

  3. 选择前k个最小距离的样本

  4. 根据这k个样本的标签进行投票,属于哪个分类的样本最多,则测试样本也属于哪个类

k值选择

k值的选择取决于数据。

一般情况下,k值小的时候,只有与输入实例十分接近的训练实例才有效,因此近似误差小,估计误差大(噪声较大);较大的K值,能够减小噪声的影响,但会使类别之间的界限变得模糊,导致近似误差大,但估计误差小。

k值大小选择没有理论最优,往往是结合k折交叉验证得到最优k值选择

优缺点

优点

  • 思想通俗易懂
  • 可以回归也可以分类,可以用于非线性分类
  • 数据类型没有要求对异常值不敏感
  • 新数据可以直接加入数据集而不必重新训练

缺点

  • 不适合解决样本不平衡问题,效果差,对稀有类别的预测准确率低

    有些类别样本数量很多,而其他样本数量很少

    因为KNN算法值考虑前k个最小距离内,哪类的样本数量最多,而不会将远近考虑在内。可以考虑用权重进行改进

  • 对于样本容量大/特征多的数据集计算量比较大(体现在距离计算上)

  • 需要大量内存

聚类

K-means

Kmeans是聚类的分类算法,
核心思想

  • 第一步:数据归一化离群点处理随机选择k个聚类质心

    变量量纲不一样会引起距离偏差,所以一定要归一化/标准化
    均值和方差大的维度将对数据的聚类产生决定性影响。
    样本间距离的计算方式可以是欧氏距离曼哈顿距离余弦相似度等。最常用的基于欧式距离的聚类算法(会受均值和方差影响)。

  • 第二步:计算所有数据点离各个质心的距离,将每个样本划分到离自己最近的质心所属于的类,形成k个簇
  • 第三步:重新计算每个簇的质心(中心点)

    质心横、纵坐标就是这一簇数据横、纵坐标的均值

  • 重复第二步、第三步,直到簇不发生变化达到最大迭代次数为止。
    在这里插入图片描述
    KMeans++ 的初始化方法:
    1、随机选一个样本作为第一个簇中心。
    2、计算每个样本到最近簇中心的距离。
    3、以距离为概率随机选择下一个簇中心。
    4、重复步骤2和3,直到找到K个簇中心。

优点

  • 处理大数据集的时候效率高,速度快,适用于高维数据
  • 调参的时候只要改变k一个参数n_cluster
  • 算法原理简单,可解释性好
  • 当簇近似高斯分布的时候,效果非常不错;

缺点

  • K 值需要人为事先设定。
  • 初始中心点的选择会在较大程度上影响聚类结果,因此需要多次随机选取初始值迭代(否则容易陷入局部最优,结果不稳定);
  • 对离群点和孤立点敏感
  • 不适合簇的大小、分布差别比较大的情况(比如不均衡样本),否则会出现均匀分割。

    倾向于得到接近大小的cluster.

改进

  • 如数据预处理(去除异常点——(删除、上下分位、数据分箱)),
  • 合理选择 K 值(初始点的距离要尽可能远),高维映射等。

    K值选择方法:手肘法。取不同k值计算累积距离

  • 数据预处理:因为基于欧氏距离,因此很受均值和方差影响,数据预处理的时候要做数据归一化、数据标准化

应用
客户分类(营销定位):银行用户分群 (我:携程构造用户画像用kmeans分群)

银行拥有海量的客户,对于不同的客户,银行需要采取不同的营销工作策略。
对于收入高且风险承受能力强的客户,可以重点挖掘业务机会,如向其推销一些收益率高但周期相对较长的理财产品;而对于收入低且风险承受能力较弱的客户,则需要采取其他策略。

银行客户的特征有很多,如年龄、收入、性别、学历、婚姻状况、户籍等。
在这里插入图片描述
各类客户的平均收入
在这里插入图片描述

画像结果比如:
重点客户,是需要重点营销和推广的对象;
优质客户,是需要精心维护和营销的对象;
潜力客户,是需要耐心挖掘和等待的对象。

客户分群很好的解释:https://blog.csdn.net/weixin_41636030/article/details/89007379
客户分群的目的是每一组特征描述丰富详细,不同组间特征差异明显,但组内特征相似。
它是一个计算距离的过程,主要是用欧式距离去解决。

聚类不能有缺失值是因为它会拉偏质心,导致聚类不准;回归模型不支持缺失值是因为它使得有缺失值的变量失去了预测的作用。

DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种以密度为基础的空间聚类算法,可以用密度的概念剔除不属于任一类别的噪声点。该算法将簇定义为密度相连的点的最大集合,将具有足够密度的区域划分为簇,并可以发现任意形状的簇
原理

  1. 随机选取一个未分类的样本点
  2. 以该样本点为圆心,设定园内最小样本数m和半径r,对该样本点以半径r画圆。如果圆内的样本数量≥m,则把这些样本归位一类
  3. 选取圆内的其他样本点,按照设定的半径画圆。如果样本数少于阈值,则放弃该圆的绘制。直到没有可画的圆。将这些圆内的样本点分为一簇。
  4. 随机选择1个未分类的样本点,重复步骤2-3。如果没有可画的圆,算法终止,否则重复4。样本结束后还有为分类的样本点,这些样本点视为离群点

在这里插入图片描述
画圆半径越小,圆内最小样本数越大,对于簇的产生越严格,密度要求越高,离群点越多

参数:min_sampleseps半径。

优点

  • 不需要事先设置K值
  • 可以发现任意形状的簇
  • 可以识别出噪声点(离群点)
  • 初始中心点选择不影响聚类结果

缺点

  • 不适用于高维数据的聚类
  • 不适用于密度会变化的数据的聚类
  • 参数难以确定最优值

KMeans和DBSCAN的优缺点
在这里插入图片描述

层次聚类

自底向上(A):从下而上地合并cluster,具体而言,就是每次找到距离最短的两个cluster,然后进行合并成一个大的cluster,直到全部合并为一个cluster。整个过程就是建立一个树结构,类似于下图。

计算距离方式
average-linkage:计算两个cluster各自数据点的两两距离的平均值
single/complete:选择两个cluster中距离最短/最长的一对数据点的距离作为类的距离。

自顶向下(D)

优点

  • 不需要设定聚类个数,在树形对应层寻找就好。一次性地得到了整个聚类的过程,只要得到了上面那样的聚类树想要分多少个cluster都可以直接根据树结构来得到结果
  • 适合层次形数据
  • 可以处理大小差别比较大的聚类问题,对cluster size不敏感

缺点

  • 计算量比较大,因为要每次都要计算多个cluster内所有数据点的两两距离
  • 效率很低,时间复杂度和空间复杂度高
  • 局域最优,不一定就是全局最优
  • 拓展性不好

智能推荐基础:协同过滤算法

协同过滤算法的原理是根据用户群体的产品偏好数据,发现用户或物品之间的相关性,并基于这些相关性为用户进行推荐。根据原理的不同,协同过滤算法分为两类——基于用户的协同过滤算法基于物品的协同过滤算法

基于用户
基于用户的协同过滤算法的本质是寻找相似的用户:通过一个用户的相关数据寻找与该用户相似的其他用户,进而为该用户推荐相似用户关注的产品。

基于物品
基于物品的协同过滤算法的本质是寻找相似的物品:通过一个物品的相关数据寻找与该物品相似的其他物品,进而为关注该物品的用户推荐相似的物品。
在商业实战中,大多数应用场景偏向于使用基于物品的协同过滤算法。

用户的数量是非常庞大的(如淘宝的用户群体达数亿),而物品的数量则相对有限,因此,计算不同物品的相似度往往比计算不同用户的相似度容易很多
用户的喜好较为多变,而物品的属性较明确,不随时间变化。物品的相似度比较固定。

计算相似度常用方法

欧氏距离、余弦值和皮尔逊相关系数。

欧式距离
在这里插入图片描述
基于欧氏距离衍生出的相似度公式
在这里插入图片描述
余弦相似度
在这里插入图片描述
cosine_similarity(df)

皮尔逊相关系数
皮尔逊相关系数r是用于描述两个变量间线性相关强弱程度的统计量,取值范围为[-1,1],为正值代表两个变量存在正相关,为负值代表两个变量存在负相关。
在这里插入图片描述
其中,COV(X,Y)为变量X和Y的协方差,D(X)和D(Y)分别为变量X和Y的方差。

代码
在这里插入图片描述
这里会返回相关系数和显著性水平p值。P<0.05表示显著相关,即两个变量之间的相关性真的存在,而不是由偶然因素引起的。只有在显著相关的前提下,r值才有意义。简单来说就是先通过观察P值是否小于0.05判定是否真的存在相关性,再根据r值判定相关性有多强。
pandas库就是直接.corrwith(),.corr()

Apriori

挖掘不同数据之间关联关系的经典算法——Apriori算法。
在这里插入图片描述

关联分析
解说:https://www.bilibili.com/video/BV1FD4y1U7vB?from=search&seid=805510543456018572&spm_id_from=333.337.0.0
关联分析它通过深入分析数据集,寻找事物间的关联性,挖掘频繁出现的组合,并描述组合内对象同时出现的模式和规律

支持度
在这里插入图片描述
置信度——一个条件概念,
在这里插入图片描述
提升度
在这里插入图片描述

关联分析最主要的目的是寻找 频繁项集
在这里插入图片描述

神经网络

激活函数

在神经网络模型中,常用来做非线性转换的激活函数有Sigmoid函数、Tanh函数、Relu函数

sigmoid
(0,1),Sigmoid函数的导数f′(x)从0开始,很快就又趋近于0,所以在梯度下降时会出现梯度消失;而且Sigmoid函数的均值是0.5而非0,不利于下一层的输出

tanh
(-1,1),当x很大或很小时,导数f′(x)也会很接近0,同样有梯度消失的问题。但是Tanh函数的均值为0,这弥补了Sigmoid函数均值为0.5的缺点。

relu
(0, +∞),当输入为正数时,它可以弥补Sigmoid函数和Tanh函数的梯度消失问题,但是当输入为负数时,它仍然有梯度消失的问题。此外,Relu函数的计算速度比Sigmoid函数和Tanh函数要快一些

应用场景

得物笔试:风控反欺诈聚类
属于一个欺诈团体的欺诈用户们,他们之间会存在一些关系,比如团体的用户之间可能会共用一个手机号。问如何对将欺诈团体的用户聚类?

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值