机器学习基础问题

基础

1. 数据不平衡问题

来源:七月在线面试答题机器学习62
主要是由于数据的分布不平衡造成的,解决方法如下:
① 从数据的采样的的角度: 对小样本数据进行过采样, 对大样本数据进行欠采样
② 数据生成,利用已知样本生成新的样本(这个个人感觉也是对小样本进行过采样的一种)
③ 进行特殊的加权处理,如在Adaboost中或者在SVM
④ 采用对不平衡数据集不敏感的算法 【具体是什么算法呀,举个例子???】
⑤ 改变评价标准: 用AUC/ROC来进行评价
⑥ 采用Bagging/Boosting/ensemble等方法
⑦ 在设计模型的时候考虑数据的先验分布
⑧ 在决策过程中,使用阈值移动

2. 缺失值或者异常值的处理方法

缺失值的处理方法:
(1)删除元祖
(2)数据补齐
  ① 人工填写  
  ② 特殊值填充
  ③ 平均值填充
  ④ 就近补齐(在完整数据中找到一个与之最相似的对象,然后用这个相似对象的值来进行填充)
  ⑤ K最近邻法
  ⑥ 使用所有可能的值进行填充,通过实验确定最终的填充值(这种方法适用于小数据集,比较耗时)
  ⑦ 回归,将缺失值作为需要进行预测的值,适用回归的方法进行填充
  ⑧ 期望最大化方法(EM)

异常值的处理方法:
(1)删除含有异常值的记录
(2)使用缺失值的处理方法来处理异常值
(3)用平均值来修正

3. 什么是生成模型什么是判别模型

生成方法是由数据学习联合概率分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型。即 P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P(YX)=P(X)P(X,Y). 典型的生成模型有:朴素贝叶斯法和隐马尔可夫模型。
判别方法由数据直接学习决策函数f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。典型的判别模型包括:K近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法和条件随机场等。
生成方法:学习收敛更快,存在隐变量时仍然可以使用生成方法
判别方法:学习得准确率更高

4. 常用的特征选择的手段

  • 信息增益和互信息(详情见决策树部分)
  • Gini指数
  • 相关系数, 取值范围[-1, 1], ρ X , Y = cov ⁡ ( X , Y ) σ X σ Y = E [ ( X − μ X ) ( Y − μ Y ) ] σ X σ Y \rho_{X, Y}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{E\left[\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)\right]}{\sigma_{X} \sigma_{Y}} ρX,Y=σXσYcov(X,Y)=σXσYE[(XμX)(YμY)]
  • 距离特征(也是用于判断两个特征之间是否是相互独立的, 距离相关系数是0,那么这两个变量就是独立的)
  • 卡方分布
    若k个随机变量 Z 1 , ⋅ ⋅ ⋅ , Z k {\displaystyle Z_{1}},\cdot\cdot\cdot,{\displaystyle Z_{k}} Z1,,Zk是相互独立,符合标准正态分布的随机变量(数学期望为0、方差为1),则随机变量Z的平方和
    X = ∑ i = 1 k Z i 2 {\displaystyle X=\sum _{i=1}^{k}Z_{i}^{2}} X=i=1kZi2
    被称为服从自由度为 k 的卡方分布。 卡方分布也是用于检测特征之间是否是独立的。
    卡方检验就是统计样本的实际观测值与理论推断值之间的偏离程度,实际观测值与理论推断值之间的偏离程度就决定卡方值的大小,如果卡方值越大,二者偏差程度越大;反之,二者偏差越小;若两个值完全相等时,卡方值就为0,表明理论值完全fu
  • L1正则化

##5. 凸优化
简单一点讲,凸函数的二阶导数大于等于0。凸优化找到的最优解会是全局最优解。

6. k折交叉验证 中k取值多少有什么关系?(背后的知识点其实是关于方差和偏差)

偏低的k值,不会过度拟合训练数据,从而偏差会较大,也正因为没有过度拟合训练数据,方差较小
较高的k值会需要较长的时间来评估结果,较大的K会导致低偏差,高方差,即容易发生过拟合,因为训练的数据会变得与整个数据集很相似,在交叉验证中通过最小化方差来选择K值。

7. K近邻(KNN) 中k的取值有什么影响?

k值减小,意味着整个模型变得复杂,容易发生过拟合,即低偏差、高方差
k值增大,意味着模型变得简单,高偏差、低方差

##8. 哪些模型需要进行归一化
概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、rf。而像gbdt、xgboost、svm、lr、KNN、KMeans之类的最优化问题就需要归一化

9. 交叉熵函数系列问题? 与最大似然函数的关系和区别?

(1) 交叉熵损失函数的物理意义: 用于描述模型预测值与真实值的差距大小
(2) 最小化交叉熵的本质就是对数似然函数的最大化
(3) 对数似然函数的本质就是衡量在某个参数下,整体的评估和真实情况一样的概率,越大代表越相近;而损失函数的本质就是衡量预测值与真实值之间的差距,越大代表越不相近。

L1和L2专题

什么是L1正则&L2正则

L1正则即将参数的绝对值之和加入到损失函数中,以二元线性回归为例,损失函数变为:
min ⁡ 1 2 m ∑ i = 1 n ( h w ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 2 ∣ w j ∣ \min \frac{1}{2 m} \sum_{i=1}^{n}\left(h_{w}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{2}\left|w_{j}\right| min2m1i=1n(hw(x(i))y(i))2+λj=12wj
L2正则即将参数的平方之和加入到损失函数中,以二元线性回归为例,损失函数变为:
min ⁡ 1 2 m ∑ i = 1 n ( h w ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 2 w j 2 \min \frac{1}{2 m} \sum_{i=1}^{n}\left(h_{w}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{j=1}^{2}w_{j}^2 min2m1i=1n(hw(x(i))y(i))2+λj=12wj2

L1正则&L2正则的区别是什么?

二者的区别的话,主要有以下两点:
(1) L1正则化是在损失函数中加入权值向量w的绝对值之和,即各个元素的绝对值之和,L2正则化指在损失函数中加入权值向量w的平方和
(2)L1的功能是是权重稀疏,L2的功能是使权重平滑

L1正则为什么可以得到稀疏解

这个问题有三种不同的回答方式

  • 解空间形状

这种方式是最经常使用的一种答案,就是给面试官画图:

L2正则化相当于为参数定义了一个圆形的解空间,而L1正则化相当于为参数定义了一个菱形的解空间。L1“棱角分明”的解空间显然更容易与目标函数等高线在脚点碰撞。从而产生稀疏解。

  • 函数叠加

考虑一维的情况,横轴是参数的值,纵轴是损失函数,加入正则项之后,损失函数曲线变化如下:
在这里插入图片描述
可以看到,在加入L1正则项后,最小值在红点处,对应的w是0。而加入L2正则项后,最小值在黄点处,对应的w并不为0

为什么呢?加入L1正则项后,目标函数变为 L ( w ) + C ∣ w ∣ L(w)+C|w| L(w)+Cw,单就正则项部分求导,原点左边的值为-C,原点右边的值为C,因此,只要原目标函数的导数绝对值|L’(w)|<C,那么带L1正则项的目标函数在原点左边部分始终递减,在原点右边部分始终递增,最小值点自然会出现在原点处。

加入L2正则项后,目标函数变为 L ( w ) + C w 2 L(w)+Cw^2 L(w)+Cw2,只要原目标在原点处的导数不为0,那么带L2正则项的目标函数在原点处的导数就不为0,那么最小值就不会在原点。因此L2正则只有减小w绝对值的作用,但并不能产生稀疏解。

  • 贝叶斯先验

从贝叶斯角度来看,L1正则化相当于对模型参数w引入了拉普拉斯先验,L2正则化相当于引入了高斯先验。我们来看一下高斯分布和拉普拉斯分布的形状
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9y9Osnqt-1575861037341)(./1561102739716.png)]
可以看到,当均值为0时,高斯分布在极值点处是平滑的,也就是高斯先验分布认为w在极值点附近取不同值的可能性是接近的。但对拉普拉斯分布来说,其极值点处是一个尖峰,所以拉普拉斯先验分布中参数w取值为0的可能性要更高。

从数学角度解释L2为什么能提升模型的泛化能力

L2正则 拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。

为什么说“L1正则化相当于对模型参数w引入了拉普拉斯先验,L2正则化相当于引入了高斯先验”?

自己简单版的思考: 在求解损失函数的时候,一般为对数损失函数,因此对参数引入高斯先验,取完对数之后相当于添加了 w 2 w^2 w2项, 引入拉普拉斯先验,取完对数后相当于添加了 ∣ w ∣ |w| w项。

下面是证明:
我们要求模型的参数 ω \omega ω的分布 P ( ω ∣ X , y ) P(\omega | X, y) P(ωX,y)后验最大化,而
P ( ω ∣ X , y ) = P ( y , X , ω ) P ( X , y ) = P ( y ∣ X , ω ) P ( X , ω ) P ( X , y ) = P ( y ∣ X , ω ) P ( X ∣ ω ) P ( ω ) P ( X , y ) \begin{aligned} P(\omega | X, y) &=\frac{P(y, X, \omega)}{P(X, y)}=\frac{P(y | X, \omega) P(X, \omega)}{P(X, y)} \\ &=\frac{P(y | X, \omega) P(X | \omega) P(\omega)}{P(X, y)} \end{aligned} P(ωX,y)=P(X,y)P(y,X,ω)=P(X,y)P(yX,ω)P(X,ω)=P(X,y)P(yX,ω)P(Xω)P(ω)
因为分母和 P ( X ∣ ω ) P(X | \omega) P(Xω)都是常数,
P ( ω ∣ X , y ) = ^ P ( y ∣ X , ω ) ∗ P ( ω ) P(\omega | X, y) \hat{=} P(y | X, \omega) * P(\omega) P(ωX,y)=^P(yX,ω)P(ω)
P ( y ∣ X , ω ) P(y | X, \omega) P(yX,ω)这部分单独拿出来的话,做最大似然估计就是不加正则化的结果,而再乘以 P ( ω ) P(\omega) P(ω)就是加入了一个参数 ω \omega ω的先验认知。

ω \omega ω的先验是高斯分布的时候
L ( w ) = p ( y ∣ X : w ) p ( w ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) p ( w ) = ∏ i = 1 m 1 2 π δ exp ⁡ ( − ( y ( i ) − w T x ( i ) ) 2 2 δ 2 ) ∏ j = 1 n 1 2 π α exp ⁡ ( − ( w ( j ) ) 2 2 α ) = ∏ i = 1 m 1 2 π δ exp ⁡ ( − ( y ( i ) − w T x ( i ) ) 2 2 δ 2 ) 1 2 π α exp ⁡ ( − w T w 2 α ) \begin{aligned} L(w) &=p(y | X : w) p(w) \\ &=\prod_{i=1}^{m} p\left(y^{(i)} | x^{(i)} ; \theta\right) p(w) \\ &=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}}{2 \delta^{2}}\right) \prod_{j=1}^{n} \frac{1}{\sqrt{2 \pi \alpha}} \exp \left(-\frac{\left(w^{(j)}\right)^{2}}{2 \alpha}\right) \\ &=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}}{2 \delta^{2}}\right) \frac{1}{\sqrt{2 \pi \alpha}} \exp \left(-\frac{w^{T} w}{2 \alpha}\right) \end{aligned} L(w)=p(yX:w)p(w)=i=1mp(y(i)x(i);θ)p(w)=i=1m2π δ1exp(2δ2(y(i)wTx(i))2)j=1n2πα 1exp(2α(w(j))2)=i=1m2π δ1exp(2δ2(y(i)wTx(i))2)2πα 1exp(2αwTw)
l ( w ) = log ⁡ L ( w ) = m log ⁡ 1 2 π δ + n log ⁡ 1 2 π α − 1 δ 2 ⋅ 1 2 ∑ i = 1 m ( y ( i ) − w T x ( i ) ) 2 − 1 α ⋅ 1 2 w T w \begin{array}{l}{l(w)=\log L(w)} \\ {\qquad=m \log \frac{1}{\sqrt{2 \pi} \delta}+n \log \frac{1}{\sqrt{2 \pi \alpha}}-\frac{1}{\delta^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}-\frac{1}{\alpha} \cdot \frac{1}{2} w^{T} w} \end{array} l(w)=logL(w)=mlog2π δ1+nlog2πα 1δ2121i=1m(y(i)wTx(i))2α121wTw
去掉与 ω \omega ω无关项就是二次损失函数加上一个L2正则化项
⇒ w M A P G u a s s i a n = arg ⁡ min ⁡ w ( 1 δ 2 ⋅ 1 2 ∑ i = 1 m ( y ( i ) − w T x ( i ) ) 2 + 1 α ⋅ 1 2 w T w ) {\Rightarrow w_{M A P_{G u a ss i a n}}=\arg \min _{w}\left(\frac{1}{\delta^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}+\frac{1}{\alpha} \cdot \frac{1}{2} w^{T} w\right)} wMAPGuassian=argwmin(δ2121i=1m(y(i)wTx(i))2+α121wTw)

ω \omega ω的先验是拉普拉斯分布的时候
f ( x ∣ μ , b ) = 1 2 b exp ⁡ ( − ∣ x − μ ∣ b ) f(x | \mu, b)=\frac{1}{2 b} \exp \left(-\frac{|x-\mu|}{b}\right) f(xμ,b)=2b1exp(bxμ)
L ( w ) = p ( y ∣ X : w ) p ( w ) = ∏ i = 1 m p ( y ( i ) ∣ x ( i ) ; θ ) p ( w ) = ∏ i = 1 m 1 2 π δ exp ⁡ ( − ( y ( i ) − w T x ( i ) ) 2 2 δ 2 ) ∏ j = 1 n 1 2 b exp ⁡ ( − ∣ w ( j ) ∣ b ) = ∏ i = 1 m 1 2 π δ exp ⁡ ( − ( y ( i ) − w T x ( i ) ) 2 2 δ 2 ) ( 1 2 b ) n exp ⁡ ( − ∑ j = 1 n ∣ w ( j ) ∣ b ) \begin{aligned} L(w) &=p(y | X : w) p(w) \\ &=\prod_{i=1}^{m} p\left(y^{(i)} | x^{(i)} ; \theta\right) p(w) \\ &=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}}{2 \delta^{2}}\right) \prod_{j=1}^{n} \frac{1}{2b} \exp \left(-\frac{|w^{(j)}|}{b}\right) \\ &=\prod_{i=1}^{m} \frac{1}{\sqrt{2 \pi} \delta} \exp \left(-\frac{\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}}{2 \delta^{2}}\right) \left( \frac{1}{2b} \right)^n\exp \left(-\sum_{j=1}^n\frac{|w^{(j)}|}{b}\right) \end{aligned} L(w)=p(yX:w)p(w)=i=1mp(y(i)x(i);θ)p(w)=i=1m2π δ1exp(2δ2(y(i)wTx(i))2)j=1n2b1exp(bw(j))=i=1m2π δ1exp(2δ2(y(i)wTx(i))2)(2b1)nexp(j=1nbw(j))
l ( w ) = log ⁡ L ( w ) = m log ⁡ 1 2 π δ + n log ⁡ 1 2 b − 1 δ 2 ⋅ 1 2 ∑ i = 1 m ( y ( i ) − w T x ( i ) ) 2 − ∑ j = 1 n ∣ w ( j ) ∣ b \begin{array}{l}{l(w)=\log L(w)} \\ {\qquad=m \log \frac{1}{\sqrt{2 \pi} \delta}+n \log \frac{1}{2b }-\frac{1}{\delta^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}-\sum_{j=1}^n\frac{|w^{(j)}|}{b}} \end{array} l(w)=logL(w)=mlog2π δ1+nlog2b1δ2121i=1m(y(i)wTx(i))2j=1nbw(j)
⇒ w M A P G u a s i a n = arg ⁡ min ⁡ w ( 1 δ 2 ⋅ 1 2 ∑ i = 1 m ( y ( i ) − w T x ( i ) ) 2 + 1 b ∑ j = 1 n ∣ w ( j ) ∣ ) \Rightarrow w_{M A P_{G u a s i a n}}=\arg \min _{w}\left(\frac{1}{\delta^{2}} \cdot \frac{1}{2} \sum_{i=1}^{m}\left(y^{(i)}-w^{T} x^{(i)}\right)^{2}+ \frac{1}{b} \sum_{j=1}^n|w^{(j)}| \right) wMAPGuasian=argwmin(δ2121i=1m(y(i)wTx(i))2+b1j=1nw(j))

##解决 L1正则化不可导的问题
坐标下降法

使用坐标下降法解决L1正则化不可导的问题
设带有L1正则化的损失函数为:
J ( θ ) = 1 2 n ∑ i = 1 n ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ ∑ i = 1 m ∣ θ i ∣ h θ ( X ) = θ T X \begin{array}{l}{J(\theta)=\frac{1}{2 n} \sum_{i=1}^{n}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2}+\lambda \sum_{i=1}^{m}\left|\theta_{i}\right|} \\ {h_{\theta}(X)=\theta^{T} X}\end{array} J(θ)=2n1i=1n(hθ(x(i))y(i))2+λi=1mθihθ(X)=θTX
其中n为样本数量,m为特征个数

由于L1回归的损失函数在0处是连续但不可导的,因此使用坐标轴下降法进行求解
坐标轴下降法和梯度下降法具有相同的思想,都是沿着某个方向不断迭代,但是梯度下降法是沿着当前点的负梯度方向进行参数更新,而坐标轴下降法是沿着坐标轴的方向。

具体更新过程:
(1)选取初始参数
θ ( 0 ) = ( θ 1 ( 0 ) , θ 2 ( 0 ) , … , θ m ( 0 ) ) \theta^{(0)}=\left(\theta_{1}^{(0)}, \theta_{2}^{(0)}, \ldots, \theta_{m}^{(0)}\right) θ(0)=(θ1(0),θ2(0),,θm(0))
(2)针对当前得到的参数进行迭代,假设已经求出第k-1轮的参数,现在求第k轮的参数,则:
θ 1 ( k ) = arg ⁡ min ⁡ θ 1 J ( θ 1 , θ 2 ( k − 1 ) , θ 3 ( k − 1 ) , … , θ m ( k − 1 ) ) θ 2 ( k ) = arg ⁡ min ⁡ θ 2 J ( θ 1 ( k ) , θ 2 , θ 3 ( k − 1 ) , … , θ m ( k − 1 ) ) ⋮ ⋮ θ m ( k ) = arg ⁡ min ⁡ θ m J ( θ 1 ( k ) , θ 2 ( k ) , θ 3 ( k ) , … , θ m ) \begin{array}{l}{\theta_{1}^{(k)}=\underset{\theta_{1}}{\arg \min } J\left(\theta_{1}, \theta_{2}^{(k-1)}, \theta_{3}^{(k-1)}, \ldots, \theta_{m}^{(k-1)}\right)} \\ {\theta_{2}^{(k)}=\underset{\theta_{2}}{\arg \min } J\left(\theta_{1}^{(k)}, \theta_{2}, \theta_{3}^{(k-1)}, \ldots, \theta_{m}^{(k-1)}\right)} \\ {\vdots} \\ {\vdots} \\ {\theta_{m}^{(k)}=\underset{\theta_{m}}{\arg \min } J\left(\theta_{1}^{(k)}, \theta_{2}^{(k)}, \theta_{3}^{(k)}, \ldots, \theta_{m}\right)}\end{array} θ1(k)=θ1argminJ(θ1,θ2(k1),θ3(k1),,θm(k1))θ2(k)=θ2argminJ(θ1(k),θ2,θ3(k1),,θm(k1))θm(k)=θmargminJ(θ1(k),θ2(k),θ3(k),,θm)
如果以上步骤就可以得到每轮的迭代结果,如果 θ ( k ) \theta^{(k)} θ(k)相对于 θ ( k − 1 ) \theta^{(k-1)} θ(k1)变化很小,则停止迭代,否则,重复步骤(2)

通过以上迭代过程可以看出

1. 坐标轴下降法进行参数更新时,每次总是固定另外m-1个值,求另外一个的局部最优值,这样也避免了Lasso回归的损失函数不可导的问题。

2. 坐标轴下降法每轮迭代都需要O(mn)的计算。(和梯度下降算法相同)

坐标轴下降法的数学依据:
对于一个可谓凸函数 f ( θ ) f(\theta) f(θ),其中 θ \theta θ n × 1 n×1 n×1的向量,如果对于一个解 θ = ( θ 1 , θ 2 , ⋅ ⋅ ⋅ , θ n ) \theta=(\theta_1, \theta_2, \cdot\cdot\cdot, \theta_n) θ=(θ1,θ2,,θn),使得 f ( θ ) f(\theta) f(θ)在某个坐标轴上 θ i ( i = 1 , 2 , ⋅ ⋅ ⋅ , n ) \theta_i (i = 1, 2, \cdot \cdot \cdot ,n) θi(i=1,2,,n)都能达到最小值,则 θ = ( θ 1 , θ 2 , ⋅ ⋅ ⋅ , θ n ) \theta=(\theta_1, \theta_2, \cdot\cdot\cdot,\theta_n) θ=(θ1,θ2,,θn)就是 f ( θ ) f(\theta) f(θ)的全局的最小值点。

L2正则化的推导

梯度下降的推导多了个尾巴

以线性回归中的梯度下降法为例。假设要求的参数为 θ \theta θ h θ ( x ) h_{\theta}(x) hθ(x)是假设函数,线性回归一般使用平方差损失函数,单个样本的平方差为 ( h θ ( x ) − y ) 2 (h_{\theta}(x) - y)^2 (hθ(x)y)2,如果考虑所有样本,损失函数对每个样本的平方差求和,假设有m个样本,线性回归的代价函数如下,为方便处理,乘上常数 1 2 m \frac{1}{2m} 2m1
J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right)^{2} J(θ)=2m1i=1m(hθ(x(i))y(i))2
在梯度下降算法中,需要先对参数求导,得到梯度。梯度本身是上升最快的方向,为了让损失尽可能小,沿梯度的负方向更新参数即可。

对于单个样本,先对某个参数 θ j \theta_j θj求导:
∂ ∂ θ j J ( θ ) = 1 m ( h θ ( x ) − y ) ∂ ∂ θ j h θ ( x ) \frac{\partial}{\partial \theta_{j}} J(\theta)=\frac{1}{m}\left(h_{\theta}(x)-y\right) \frac{\partial}{\partial \theta_{j}} h_{\theta}(x) θjJ(θ)=m1(hθ(x)y)θjhθ(x)
注意 h θ ( x ) h_{\theta}(x) hθ(x)的表达式是 h θ ( x ) = θ 0 x 0 + θ 1 x 1 + ⋅ ⋅ ⋅ + θ n x n h_{\theta}(x) = \theta_0x_0 + \theta_1x_1 + \cdot\cdot\cdot + \theta_nx_n hθ(x)=θ0x0+θ1x1++θnxn.当个样本对某个参数 θ j \theta_j θj求导, ∂ ∂ θ j h θ ( x ) = x j \frac{\partial}{\partial \theta_{j}} h_{\theta}(x)=x_{j} θjhθ(x)=xj.最终结果如下:
∂ ∂ θ j J ( θ ) = 1 m ( h θ ( x ) − y ) x j \frac{\partial}{\partial \theta_{j}} J(\theta)=\frac{1}{m}\left(h_{\theta}(x)-y\right) x_{j} θjJ(θ)=m1(hθ(x)y)xj
在考虑所有样本的情况下,将每个样本对 θ j \theta_j θj的导数求和即可,得到下式:
∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial \theta_{j}} J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} θjJ(θ)=m1i=1m(hθ(x(i))y(i))xj(i)
梯度下降算法中,为了尽快收敛,会沿梯度的负方向更新参数,因此在上式前添加一个负号,并乘以一个系数 α \alpha α即学习率),得到最终用于迭代计算参数 θ j \theta_j θj的形式:
θ j : = θ j − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_{j} :=\theta_{j}-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} θj:=θjαm1i=1m(hθ(x(i))y(i))xj(i)
其中 α \alpha α是learning rate. 上式是没有添加L2正则化项的迭代公式,如果在原始代价函数之后添加L2正则化,则公式变成下面的样子
θ j : = θ j ( 1 − α λ m ) − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) \theta_{j} :=\theta_{j}\left(1-\alpha \frac{\lambda}{m}\right)-\alpha \frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x^{(i)}\right)-y^{(i)}\right) x_{j}^{(i)} θj:=θj(1αmλ)αm1i=1m(hθ(x(i))y(i))xj(i)
其中 λ \lambda λ就是正则化参数。从上式可以看到,与未添加L2正则化的迭代公式相比,每一次迭代, θ j \theta_j θj都要先乘以一个小于1的因子,从而使得 θ j \theta_j θj不断减小,因此总的来看, θ \theta θ是不断减小的。

评价指标


灵敏度(Sensitivity) = TP/(TP+FN)
特异度(Specificity) = TN/(FP+TN)

其实我们可以发现灵敏度和召回率是一模一样的,只是名字换了而已。
由于我们比较关心正样本,所以需要查看有多少负样本被错误地预测为正样本,所以使用(1-特异度),而不是特异度。
真正率(TPR) = 灵敏度 = TP/(TP+FN)
假正率(FPR) = 1- 特异度 = FP/(FP+TN)

如何得到ROC曲线

横坐标FPR代表假正率,纵坐标TPR代表真正率
F P R = F P T N + F P T P R = T P T P + F N FPR=\frac{FP}{TN+FP} \\ TPR=\frac{TP}{TP +FN} FPR=TN+FPFPTPR=TP+FNTP

  1. 通过分类器得到每个样本的预测概率,对其从高到低进行排序
  2. 从高到低,分别以每一个预测该类别作为阈值,大于该阈值的认定为1,小于的为0, 计算真正率和假正率

ROC/AUC为什么可以衡量分类效果

对于一个有作用的分类器,预测概率越大,样本预测正类的概率就越大,因此在对概率进行排序后,实际正样本会集中在排序靠前的位置,排序越前,实际正样本就越集中。对于一个完全没有作用的分类器而言,对预测概率进行排序后,在任何的区间上真正率和假正率应该都是相同的。

实际正样本在概率排序中越集中在前面,则TPR/FPR就越大,反映在图上就是ROC曲线越靠近左上角。
(0, 1): 代表FPR为0,TPR为1,此时代表的是:找到一个阈值,该阈值前面所有的样本都是实际正样本,该阈值后面的样本都是实际负样本,预测结果完全正确
(1,0):代表FPR为1,TPR为0,此时TP=0,Fp=1,完全分反了
(0,0):代表将所有的样本都分成了负例
(1,1):代表将所有的样本都分成了正例
而对于随机分类器,ROC曲线将是一条从左下到右上斜率为1的直线,因为无论怎么确定阈值,TPR=FPR

ROC/AUC为什么能够无视样本的不平衡

真正率(TPR) = 灵敏度 = TP/(TP+FN)
假正率(FPR) = 1- 特异度 = FP/(FP+TN)

TPR和FPR分别是基于实际表现1和0出发的,也就是说它们分别在实际的正样本和负样本中来观察相关概率问题。正因为如此,所以无论样本是否平衡,都不会被影响。

从条件概率的角度出发,假设X为预测值,Y为真实值。那么就可以将这些指标按条件概率表示
精确度=P(Y=1|X=1)
召回率=灵敏度=P(x=1|Y=1)
特异度=P(X=0|Y=0)
以实际结果为条件(召回率、特异度),那么就只需考虑一种样本,而先以预测值为条件(精准率),那么我们需要同时考虑正样本和负样本。所以先以实际结果为条件的指标都不受样本不平衡的影响,相反以预测结果为条件的就会受到影响。

AUC的理解
AUC就是:随机抽出一对样本(一个正样本,一个负样本),然后用训练得到的分类器来对这两个样本进行预测,预测得到正样本的概率大于负样本概率的概率。

AUC计算方法

参考: https://blog.csdn.net/lieyingkub99/article/details/81266664(AUC的计算重点参考啦)

  • 第一种方法: 计算ROC曲线下的面积。这种方法是比较直接的一种,可以近似计算ROC曲线一个个小梯形的面积。但在实际计算的时候通常不会使用这种方法。
    在这种方法下,假设正样本数量为M,负样本数量为N,当当前样本为正例时,X轴不变,Y轴方向上移动 1 M \frac{1}{M} M1,当当前样本为负例时,Y坐标不变,X方向上移动 1 N \frac{1}{N} N1
  • 第二种方法:在有M个正样本,N个负样本的数据集里。一共MN对样本(一对样本即一个正样本和一个负样本)。统计这MN对样本里,正样本的预测该类别大于负样本的预测概率的个数。
    a u c = ∑ I ( P + , P − ) M ∗ N auc=\frac{\sum I(P_+, P_-)}{M*N} auc=MNI(P+,P)

举个例子:

假设有4条样本。2个正样本,2个负样本,那么M*N=4。
即总共有4个样本对。分别是: (D,B),(D,A),(C,B),(C,A)。 在(D,B)样本对中,正样本D预测的概率大于负样本B预测的概率(也就是D的得分比B高),记为1。同理,对于(C,B)。正样本C预测的概率小于负样本C预测的概率,记为0.
则auc为 1 + 1 + 1 + 0 2 ∗ 2 = 0.75 \frac{1+1+1+0}{2*2} = 0.75 221+1+1+0=0.75

加入出现得分一致的时候:
在这里插入图片描述
同样本是4个样本对,对于样本对(C,B)其I值为0.5。
1 + 1 + 1 + 0.5 2 ∗ 2 = 0.875 \frac{1+1+1+0.5}{2*2} = 0.875 221+1+1+0.5=0.875

  • 第三种:从AUC统计意义去计算
    S1: 对预测概率从高到低进行排序
    S2: 对每个该类别值设一个rank值(最高的概率的rank为n,第二高的为n-1)
    S3: rank实际上代表了该score(预测概率)超过的样本的数目
    (下面这段话能理解就理解,不能理解不强求)为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的,那么第一位与任意的进行组合score值都要大,我们取它的rank值为n,但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相应的不符合的有M个),所以要减掉,那么同理排在第二位的n-1,会有M-1个是不满足的,依次类推,故得到后面的公式M*(M+1)/2,我们可以验证在正样本score都大于负样本的假设下,AUC的值为1
    S4: 除以M*N
    a u c = ∑ i ∈ p o s i t i v e C l a s s rank ⁡ i − M ( 1 + M ) 2 M × N auc=\frac{\sum_{i \in positiveClass} \operatorname{rank}_{i}-\frac{M(1+M)}{2}}{M \times N} auc=M×NipositiveClassranki2M(1+M)

举例说明:
在这里插入图片描述
排序。按概率排序后得到: 按照上面的公式,只把正样本的序号加起来也就是只把样本C,D的rank值加起来后减去一个常数项: M ( M + 1 ) 2 \frac{M(M+1)}{2} 2M(M+1)
得到: ( 4 + 2 ) − 2 ∗ ( 2 + 1 ) 2 2 ∗ 2 = 6 − 3 4 = 0.75 \frac{(4+2)-\frac{2 *(2+1)}{2}}{2 * 2}=\frac{6-3}{4}=0.75 22(4+2)22(2+1)=463=0.75
如果出现得分一样的情况:
在这里插入图片描述
假如有4个取值概率为0.5,而且既有正样本也有负样本的情况。计算的时候,其实原则就是相等得分的rank取平均值。具体来说如下:
先排序:
在这里插入图片描述
最终结果为: 7 + 6 + ( 5 + 4 + 3 + 2 ) 4 + ( 5 + 4 + 3 + 2 ) 4 − 4 ∗ ( 4 + 1 ) 2 4 ∗ 3 = 10 12 \frac{7+6+\frac{(5+4+3+2)}{4}+\frac{(5+4+3+2)}{4}-\frac{4^{*}(4+1)}{2}}{4^{*} 3}=\frac{10}{12} 437+6+4(5+4+3+2)+4(5+4+3+2)24(4+1)=1210

手写AUC曲面面积的代码

https://blog.csdn.net/lieyingkub99/article/details/81266664

https://blog.csdn.net/u014035615/article/details/80077523

def naive_auc(labels,preds):	 
	"""
	    最简单粗暴的方法
	   先排序,然后统计有多少正负样本对满足:正样本预测值>负样本预测值, 再除以总的正负样本对个数
		复杂度 O(NlogN), N为样本数
	"""
	n_pos = sum(labels)    # 正样本
	n_neg = len(labels) - n_pos    #负样本
	total_pair = n_pos * n_neg
   
    labels_preds = zip(labels,preds)
	labels_preds = sorted(labels_preds,key=lambda x:x[1], reverse=True)   # 按要预测值进行排序
	print(labels_preds)    # [(1, 0.8), (0, 0.4), (1, 0.35), (0, 0.2)]
	
	satisfied_pair = 0
	for i in range(len(labels_preds)):
		if labels_preds[i][0] == 1:
			satisfied_pair += len(labels) - i
			    print(satisfied_pair)
	return (satisfied_pair-(n_pos+1)*n_pos/2) / float(total_pair)

preds = [0.8, 0.35, 0.4, 0.2]
labels = [1, 1, 0, 0]
res = naive_auc(labels,preds)
res: 0.75

进一步加速:

def approximate_auc(labels,preds,n_bins=100):
    """
    近似方法,将预测值分桶(n_bins),对正负样本分别构建直方图,再统计满足条件的正负样本对
    复杂度 O(N)
    这种方法有什么缺点?怎么分桶?  这是一种近似的做法,保留了两位有效数字
    """
    n_pos = sum(labels)             #正样本数量
    n_neg = len(labels) - n_pos
    total_pair = n_pos * n_neg

    pos_histogram = [0 for _ in range(n_bins)]
    neg_histogram = [0 for _ in range(n_bins)]
    bin_width = 1.0 / n_bins
    for i in range(len(labels)):
        nth_bin = int(preds[i]/bin_width)
        if labels[i]==1:
            pos_histogram[nth_bin] += 1             # 正例装桶
        else:
            neg_histogram[nth_bin] += 1             # 负例装桶

    accumulated_neg = 0    # 用于存储到目前为止已经有的负例的个数
    satisfied_pair = 0
    for i in range(n_bins):
	    # pos_histogram[i]*accumulated_neg: 当前位置i上的的正例个数乘上比该位置i预测小的负例个数
	    # pos_histogram[i]*neg_histogram[i]*0.5 当前位置上正例福利个数相等的数量加起来构成的样例对的数量
        satisfied_pair += (pos_histogram[i]*accumulated_neg + pos_histogram[i]*neg_histogram[i]*0.5)
        accumulated_neg += neg_histogram[i]

    return satisfied_pair / float(total_pair)

ROC/AUC用于多分类

  • 第一种方法: 分别对每一个类别绘制出ROC,然后计算出对应的AUC面积,最后对n个类别的ROC曲线求平均,得到最终的ROC曲线,对AUC求平均得到最终的AUC值的大小。
  • 第二种方法: 对于一个测试样本:1)标签只由0和1组成,1的位置表明了它的类别(可对应二分类问题中的‘’正’’),0就表示其他类别(‘’负‘’);2)要是分类器对该测试样本分类正确,则该样本标签中1对应的位置在概率矩阵P中的值是大于0对应的位置的概率值的。基于这两点,将标签矩阵L和概率矩阵P分别按行展开,转置后形成两列,这就得到了一个二分类的结果。所以,此方法经过计算后可以直接得到最终的ROC曲线。

上面的两个方法得到的ROC曲线是不同的,当然曲线下的面积AUC也是不一样的
sklearn.metrics.roc_auc_score函数中参数average值为’macro’和’micro’的情况。
一张三分类的参考图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值