Xyang的AI学习之旅:浅谈【机器学习】- 逻辑回归01

从广义线性回归推导出逻辑回归

1.何为逻辑回归?

  1. 首先,逻辑回归不是一个回归算法,它是一个分类算法,但是它同样是基于多元线性回归的算法,是一个线性分类器,所以叫逻辑回归,而没有叫逻辑分类。
  2. 逻辑回归是假设数据服从伯努利分布,它与线性回归的假设(正太分布\高斯分布)同样是服从指数簇分布,因此也可以由广义线性回归推导得到。
  3. 逻辑回归需要用到sigmoid函数将结果缩放到0-1之间,越接近+1越是正例,越接近0越是负例,根据中间0.5分为二类,所以逻辑回归是一个做二分类的算法,但它也可以做多分类,其方式就是把多分类拆分成多个二分类的形式来做。sigmoid函数的公式为: 1 1 + e − z \frac{1}{1+e^{-z}} 1+ez1代入逻辑回归后的公式为: h θ ( x ) = g ( θ T x ) = 1 e − θ T x h_θ(x)=g(θ^Tx)=\frac{1}{e^{-θ^Tx}} hθ(x)=g(θTx)=eθTx1

2.逻辑回归损失函数的推导:

  1. 依旧用到最大似然估计思想,依旧假设样本相互独立,依旧对似然函数取对数log,因此: 每 条 样 本 预 测 正 确 的 概 率 : P ( 正 确 ) = ( g ( w , x i ) ) y i ∗ ( 1 − g ( w , x i ) ) 1 − y i 每条样本预测正确的概率:P(正确)=(g(w,x_i))^{y_i}*(1-g(w,x_i))^{1-y_i} P()=(g(w,xi))yi(1g(w,xi))1yi 用 h θ ( x i ) 代 替 g ( w , x i ) , 似 然 函 数 表 达 式 : L ( θ ) = ∏ i = 1 m ( h θ ( x i ) ) y i ( 1 − h θ ( x i ) ) 1 − y i 用h_θ(x_i)代替g(w,x_i),似然函数表达式:L(θ)=\prod^{m}_{i=1}(h_θ(x_i))^{y_i}(1-h_θ(x_i))^{1-y_i} hθ(xi)g(w,xi),L(θ)=i=1m(hθ(xi))yi(1hθ(xi))1yi 用 对 数 似 然 将 连 乘 变 成 连 加 , 并 且 为 了 对 该 损 失 求 最 小 , 给 该 公 式 加 上 负 号 , 得 到 : 用对数似然将连乘变成连加,并且为了对该损失求最小,给该公式加上负号,得到: J ( θ ) = − [ ∑ i = 1 m ( y i l o g h θ ( x i ) + ( 1 − y i ) l o g ( 1 − h θ ( x i ) ) ] J(θ)=-[\sum^m_{i=1}(y_ilogh_θ(x_i)+(1-y_i)log(1-h_θ(x_i))] J(θ)=[i=1m(yiloghθ(xi)+(1yi)log(1hθ(xi))]
  2. 简单代码实现一下损失函数:
# 导入numpy
import numpy as np
# 定义sigmoid函数,已知W1 和W2 的情况下,传进来数据的X,返回数据的y_predict
def p_theta_function(features, w1, w2):
    z = w1*features[0] + w2*features[1]
    return 1 / (1 + np.exp(-z))
    
# 定义损失函数,需传入一份已知数据的X,y,如果已知W1 和W2 的情况下,计算对应这份数据的Loss损失
def loss_function(X,  y, w1, w2):
    result = 0
	# 遍历数据集中的每一条样本,并且计算每条样本的损失,加到result 身上得到整体的数据集损失
	for features, label in zip(X, y):
		# 这是计算一条样本的y_predict
		p_result = p_theta_function(features, w1, w2)
		loss_result = -1*label*np.log(p_result)-(1-label)*np.log(1-p_result)
		result += loss_result
	return result
  1. 对逻辑回归函数求导: 首 先 s i g m o i d 函 数 的 公 式 为 : g ( z ) = 1 1 + e − z 首先sigmoid函数的公式为:g(z)=\frac{1}{1+e^{-z}} sigmoidg(z)=1+ez1 可 以 对 s i g m o i d 函 数 求 导 得 到 : g ‘ ( z ) = g ( z ) ( 1 − g ( z ) ) 可以对sigmoid函数求导得到: g^`(z)=g(z)(1-g(z)) sigmoid:g(z)=g(z)(1g(z)) 然 后 对 逻 辑 回 归 求 导 并 跳 过 推 导 过 程 得 到 : δ δ θ j = 1 m ∑ i = 1 m ( h θ ( x i ) − y i ) x i j 然后对逻辑回归求导并跳过推导过程得到:\frac{δ}{δ_{θ_j}}=\frac{1}{m}\sum^{m}_{i=1}(h_θ(x_i)-y_i)x_i^j δθjδ=m1i=1m(hθ(xi)yi)xij

3.softmax回归

  1. 首先,softmax回归是假设数据服从多项式分布的,同样,多项式分布也是指数簇分布,因此也可以由广义线性回归推导得到。
  2. softmax回归的公式为: h θ ( x i ) = [ p ( y i ) = 1 ∣ x i ; θ ) p ( y i ) = 2 ∣ x i ; θ ) . . . p ( y i ) = k ∣ x i ; θ ) ] = 1 ∑ j = 1 k e θ j T x i [ e θ 1 T x i e θ 2 T x i . . . e θ k T x i ] h_θ(x_i)=\begin{bmatrix} p(y_i)=1|x_i;θ) \\ p(y_i)=2|x_i;θ) \\ ...\\ p(y_i)=k|x_i;θ) \end{bmatrix} = \frac{1}{\sum^k_{j=1}e^{θ^T_jx_i}}\begin{bmatrix} e^{θ^T_1x_i} \\ e^{θ^T_2x_i} \\ ...\\ e^{θ^T_kx_i}\end{bmatrix} hθ(xi)=p(yi)=1xi;θ)p(yi)=2xi;θ)...p(yi)=kxi;θ)=j=1keθjTxi1eθ1Txieθ2Txi...eθkTxi
  3. 由此可以看出,softmax回归有多少个类别就有多少组θ参数

4.逻辑回归与softmax回归的关系

  1. softmax回归依旧是取最大似然估计,然后再取对数似然,最后得到它的损失函数:交叉熵损失函数(CrossEntropy),公式如下: J ( θ ) = − 1 m [ ∑ i = 1 m ∑ j = 1 k 1 { y i = j } l o g e θ j T x i ∑ l = 1 k e θ l T x i J(θ)=-\frac{1}{m}[\sum^m_{i=1}\sum^k_{j=1}1\{y_i=j\}log\frac{e^{θ^T_jx_i}}{\sum^k_{l=1}e^{θ^T_lx_i}} J(θ)=m1[i=1mj=1k1{yi=j}logl=1keθlTxieθjTxi
  2. 逻辑回归和softmax回归的关系在于,当softmax回归的损失函数的k=2时,就能推导得到逻辑回归的损失函数,此时softmax回归就是参数θ=(θ2-θ1)的逻辑回归。就是说,当类别数量k为2时,softmax回归能得到的两组参数θ1和θ2,而逻辑回归只有一组θ参数,而这组θ参数就等于softmax的参数(θ2-θ1)。
  3. 逻辑回归和softmax回归的区别在于,在做多分类时,softmax回归的每个类别的概率的的分母是所有θ的加和都是同一个分母,所以它得到的结果中更倾向于只属于其中某一个类别,所以其他类别的概率会非常小;而逻辑回归是把多分类分成了多个二分类,每个二分类之间的概率是相互独立的,所以它得到的结果中所属类别的概率相比softmax会更均衡一些。

5.代码实战要点

  1. 逻辑回归和线性回归一样可以加入正则项,同样其损失函数中也会带有正则项。
  2. 在sklearn封装的函数中,没有单独封装softmax函数,只是把softmax作为了逻辑回归函数的一个拓展版本,可以通过调用logisticRegression()函数,修改其超参数multi_class='multinomial’就是将损失函数调整为了softmax的损失函数,而该超参数默认是multi_class=‘ovr’,也就是使用多个逻辑回归二分类做多分类的算法。
  3. Q:在多分类任务中,什么时候使用逻辑回归做多分类?什么时候使用softmax回归做多分类呢? A:当任务是倾向于最后的结果只属于一个类别,而跟其他类别一点关系都没有时使用softmax更好,而当任务是有多个类别都属于同一种类,同时需要观察其他相似类别的概率值时,使用逻辑回归更好。
  4. 在做数据的特征工程时,当对数据预处理比较繁琐的时候,可以将预处理好的数据集落地保存,方便下次直接训练,可以省去不少时间。

你可能感兴趣的:(学习笔记,机器学习)