广义线性模型:\(y=g^{-1}(w^Tx+b)\)
\(g^{-1}(x)\), 单调可微函数
如果用线性模型完成分类任务如何做?
根据线性模型可知, 找到一个单调可微函数将分类任务的真实标记 \(y_i\)与线性模型的预测值联系起来即可.
广义线性模型对样本要求不必要服从正态分布, 只需要服从指数分布簇(二项
分布, 泊松分布, 伯努利分布, 指数分布等)即可; 广义线性模型的自变量可
以是连续的也可以是离散的.
logistic 回归
logistic/sigmoid 函数:
- \(p=h_\theta(x)=g(\theta^Tx+b)=\frac{
- 1
- }{
- 1+e^{
- -\theta^Tx+b
- }
- }\)
- \(ln\frac{
- y
- }{
- 1-y
- } = \theta^Tx+b\)
\(ln\frac{y}{1-y}\): 对数几率, 将预测的结果逼近真实标记的对数几率
\(g^`(z)=g(z)(1-g(z))\)
将 y 视为类后验概率估计 \(h_\theta(x)=P(y=1|x)\), 则:
- \(P(y=1|x;\theta)=(h_\theta(x))\)
- \(P(y=0|x;\theta)=1-(h_\theta(x))\)
- \(P(y|x;\theta)=(h_\theta(x))^y(1-h_\theta(x))^{
- 1-y
- }\)
第一步: 似然函数:
\(L(\theta)=\prod_{i=1}^mp(y^{(i)}|x^{(i)};\theta)=\prod_{i=1}^m(h_\theta(x^{(i)}))^{y^{(i)}}(1-h_\theta(x^{(i)}))^{1-y^{(i)}}\)
第二步: 取对数似然函数:
\(l(\theta)=L(\theta)=\sum^m_{i=1}(y^{(i)}logh_\theta(x^{(i)})+(1-y^{(i)})log(1-h_\theta(x^{(i)})))\)
Logistic 损失函数:\(-l(\theta)=\sum^m_{i=1}(-y^{(i)}ln(h_\theta(x^{(i)}))-(1-y^{(i)})ln((1-h_\theta(x^{(i)}))))\)$
第三步: 对属于 j 类别 \(\theta\)求导:
- \(\frac{
- \partial l(\theta)
- }{
- \partial \theta_j
- } =\sum^m_{
- i=1
- }(\frac{
- y^{
- (i)
- }
- }{
- g(\theta^Tx^{
- (i)
- })
- }-\frac{
- 1-y^{
- (i)
- }
- }{
- 1-g(\theta^Tx^{
- (i)
- })
- })\cdot g(\theta^Tx^{
- (i)
- })(1-g(\theta^Tx^{
- (i)
- }))\cdot\frac{
- \partial \theta^Tx^{
- (i)
- }
- }{
- \partial \theta_j
- }\)
- =\(\sum^m_{
- i=1
- }(y^{
- (i)
- }(1-g(\theta^Tx^{
- (i)
- }))-(1-y^{
- (i)
- })g(\theta^Tx^{
- (i)
- })\cdot x^{
- (i)
- }_j\)
- =\(\sum^m_{
- i=1
- }(y^{
- (i)
- }-g(\theta^Tx^{
- (i)
- })\cdot x^{
- (i)
- }_j\)
第四步: 梯度求解
批量梯度下降:
- for j=1 to n:
- \(\theta_j=\theta_j +\alpha\sum^m_{
- i=1
- }(y^{
- (i)
- }-h_\theta(x^{
- (i)
- }))x_j^{
- (i)
- }\)
随机梯度下降法(SGD)
- for j=1 to n:
- \(\theta_j=\theta_j +\alpha(y^{
- (i)
- }-h_\theta(x^{
- (i)
- }))x_j^{
- (i)
- }\)
与批量梯度下降法主要体现在权重不同
- import numpy as np
- # 假设空间函数: h(x)
- def sigmoid (xArr):
- xMat = np.mat(xArr)
- return xMat.T * xMat
- # 批量梯度下降法
- # alpha: 学习率 maxCycle: 学习的迭代次数
- def gradAscent (dataMatin,labels, alpha=0.1, maxCycle=100):
- dataMatrix= np.mat(dataMatin)
- labelsMatrix = np.mat(labels).T
- m,n = np.shape(dataMatrix)
- # 初始化权重
- weights = np.ones((n,1))
- for k in maxCycle:
- # error, dataMatrix 为 m*n 的矩阵
- error = labelsMatrix - sigmoid(dataMatrix *weights)
- weights = weights + alpha * dataMatrix.T * error
- return weight
- # 随机梯度下降法
- # alpha: 学习率
- def gradAscent (dataMatin,labels, alpha=0.1):
- dataMatrix= np.mat(dataMatin)
- labelsMatrix = np.mat(labels).T
- m,n = np.shape(dataMatrix)
- # 初始化权重
- weights = np.ones((n,1))
- # m 为样本数
- for i in range(m):
- # error, dataMatrix 为 m*n 的矩阵
- error = labelsMatrix[i] - sigmoid(dataMatrix[i] * weights)
- weights = weights + alpha * error * dataMatrix[i]
- return weights
softmax 回归
softmax 回归是 logistic 回归的一般化, 适用于 K 分类的问题, 第 k 类的参数为向量 \(θ_k\), 组成的二维矩阵为 \(θ_{k*n}\)
softmax 函数的本质就是将一个 K 维的任意实数向量压缩 (映射) 成另一个 K 维的实数向量, 其中向量中的每个元素取值都介于 (0,1) 之间.
logistics 回归概率函数:
\(p(y=1|x;\theta)=\frac{1}{1+e^{-\theta^Tx}}\)
softmax 回归概率函数:
\(p(y=k|x;\theta)=\frac{e^{\theta^T_kx}}{\sum_{j=1}^{k}e^{-\theta^T_jx}} \quad k=1,2.\dots,K\)
softmax 假设函数:
softmax 损失函数:
\(J(\theta)=-\frac{1}{m}\sum^m_(i=1)\sum^k_(j=1)I(y^{(i)}=j)ln(\frac{e^{\theta^T_jx^{(i)}}}{\sum_{l=1}^{k}e^{-\theta^T_lx^{(i)}}})\)
解法同上: logistics 回归的对数似然函数
函数 \(I(y^{(i)}=j)\):
\(if(y^{(i)}=j): \quad I(y^{(i)}=j)=1 \quad else \quad I(y^{(i)}=j)=0\)
存在的意思: 使不是 j 类别的样本损失为 0, 使似然函数最大化
对第 i 个样本的属于 j 类别 \(\theta\)分量求导:(\(0<i<m\),\(1<j<k\))
- \(\nabla_{
- \theta_j
- }J(\theta)=\nabla-I(y^{
- (i)
- }=j)ln(\frac{
- e^{
- \theta_j^Tx^{
- (i)
- }
- }
- }{
- \sum_{
- l=1
- }^Ke^{
- \theta_l^Tx^{
- (i)
- }
- }
- })\)
- \(ln(\frac{
- e^{
- \theta_j^Tx^{
- (i)
- }
- }
- }{
- \sum_{
- l=1
- }^Ke^{
- \theta_l^Tx^{
- (i)
- }
- }
- }) = \theta_j^Tx^{
- (i)
- }-ln(\sum_{
- l=1
- }^Ke^{
- \theta_l^Tx^{
- (i)
- })
- }\)
- \(\nabla_{
- \theta_j
- }J(\theta)=-I(y^{
- (i)
- }=j)(1-\frac{
- e^{
- \theta^T_jx^{
- (i)
- }
- }
- }{
- \sum_{
- l=1
- }^{
- k
- }e^{
- -\theta^T_lx^{
- (i)
- }
- }
- })x^{
- (i)
- }\)
第 j 类别 \(\theta\)更新:
批量梯度下降
\(\theta_j=\theta_j+\alpha \sum_{i=1}^{m}I(y^{(i)}=j)(1-p(y^{(i)}=j|x^{(i)};\theta))x^{(i)}\)
随机梯度下降
\(\theta_j=\theta_j+\alpha I(y^{(i)}=j)(1-p(y^{(i)}=j|x^{(i)};\theta))x^{(i)}\)
来源: https://www.cnblogs.com/yunp-kon/p/11144173.html