线性模型对数几率回归C语言,线性模型之对数几率回归

线性模型之对数几率回归

广义线性模型:\(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

\(\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)}\)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值