机器学习之逻辑回归

本文详细介绍了逻辑回归的概念,包括其形式、参数的估计和代码实现。通过使用sigmoid函数将线性回归的预测值转换为概率,逻辑回归解决了二分类问题。最大似然估计用于确定模型参数,并通过梯度下降法进行优化。最后,展示了模型的预测过程。
摘要由CSDN通过智能技术生成

一、逻辑回归的形式

如何使用线性模型进行分类任务?
可以用广义线性模型解决:求一个单调可微的函数将分类任务的真实标记与线性回归模型的预测值联系起来。

考虑二分类任务,其输出标记为{1,0},而线性回归的预测值 z = w T x + b z=w^Tx+b z=wTx+b是实值,于是我们需要将实值转换为{0,1}值,最理想的是“单位阶跃函数”,但是它存在一个问题,那就是函数不连续,于是又找到一个替代函数sigmoid

在这里插入图片描述
如上图所示,这就是sigmoid的图形,当x>0时,y>0.5,x<0时,y<0.5。它的表达形式为:
y = 1 1 + e − z y=\frac{1}{1+e^{-z}} y=1+ez1

上式还可以变换为:
y = 1 1 + e − ( W T + b ) y=\frac{1}{1+e^{-(W^T+b)}} y=1+e(WT+b)1

W T + b = l n y 1 − y W^T+b=ln\frac{y}{1-y} WT+b=ln1yy

若将y视为样本X作为正例的可能性,则1-y是其反例的可能性,两者的比值 y 1 − y \frac{y}{1-y} 1yy称为“几率”,反映了x作为正例的可能性,对几率取对数则得到“对数几率”

l n y 1 − y ln\frac{y}{1-y} ln1yy

由上式可看出,实际上是用线性回归模型的预测值去逼近真实标记的对数几率,因此,其对应模型称为“对数几率回归”,名字虽然是回归,但实际上做得是分类任务。
对数几率回归的优点:直接对分类可能性建模,无需事先假设数据分布,这样就避免了假设分布所带来的的不准确问题;它不是仅预测出“类别”,而是可得到近似概率预测,这对许多利用概率辅助决策的任务很有用。

二、参数的估计

如何确定w和b,若将y视为类后验概率估计 p ( y = 1 ∣ x ) p(y=1|x) p(y=1x),则上式可重写为

l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = w T x + b ln\frac{p(y=1|x)}{p(y=0|x)}=w^Tx+b lnp(y=0x)p(y=1x)=wTx+b

p ( y = 1 ∣ x ) = 1 1 + e − ( w T x + b ) = e w T x + b 1 + e w T x + b p(y=1|x)=\frac{1}{1+e^{-(w^Tx+b)}}=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} p(y=1x)=1+e(wTx+b)1=1+ewTx+bewTx+b

p ( y = 0 ∣ x ) = 1 − p ( y = 1 ∣ x ) = 1 1 + e w T x + b p(y=0|x)=1-p(y=1|x)=\frac{1}{1+e^{w^Tx+b}} p(y=0x)=1p(y=1x)=1+ewTx+b1

其中 x ϵ R n , y ϵ { 0 , 1 } w ϵ R n x\epsilon R^n,y \epsilon \left \{0,1 \right \} w\epsilon R^n xϵRn,yϵ{0,1}wϵRn是权值向量, b ϵ R b\epsilon R bϵR是偏置。

可将权值向量和特征向量加以扩充,即增广权值向量 W ^ = ( w 1 , w 2 . . . , w n , b ) T \hat W=(w^1,w^2...,w^n,b)^T W^=(w1,w2...,wn,b)T,增广特征向量 x ^ = ( x 1 , x 2 , . . . , x n , 1 ) T \hat x=(x^1,x^2,...,x^n,1)^T x^=(x1,x2,...,xn,1)T,则逻辑回归模型为:

p ( y = 1 ∣ x ) = e w ^ x ^ 1 + e w ^ x ^ p(y=1|x)=\frac{e^{\hat w \hat x}}{1+e^{\hat w \hat x}} p(y=1x)=1+ew^x^ew^x^

p ( y = 0 ∣ x ) = 1 1 + e w ^ x ^ p(y=0|x)=\frac{1}{1+e^{\hat w \hat x}} p(y=0x)=1+ew^x^1

现在模型已经确定,就要估计参数了。

二分类对数几率回归参数学习——“最大似然估计”

给定训练数据集 D = { ( x 1 ^ , y 1 ) , ( x 2 ^ , y 2 ) , . . . ( x N ^ , y N ) } , x i ^ = ( x 1 , x 2 , . . . , x n , 1 ) , y i ϵ { 0 , 1 } , i = 1 , 2 , 3 , . . . , n 。 D=\left \{ (\hat{x_1},y_1),(\hat{x_2},y_2),...(\hat{x_N},y_N)\right\},\hat{x_i}=(x^1,x^2,...,x^n,1),y_i \epsilon \left\{0,1\right\},i=1,2,3,...,n。 D={(x1^,y1),(x2^,y2),...(xN^,yN)}xi^=(x1,x2,...,xn,1),yiϵ{0,1},i=1,2,3,...,n

p ( y = 1 ∣ x ) = g ( w ^ ⋅ x ^ ) , p ( y = 0 ∣ x ) = 1 − g ( w ^ ⋅ x ^ ) p(y=1|x)=g(\hat w \cdot \hat x),p(y=0|x)=1-g(\hat w \cdot \hat x) p(y=1x)=g(w^x^),p(y=0x)=1g(w^x^)

似然函数:
L ( W ^ ) = ∏ i = 1 N P ( y i ∣ x ^ i ) L(\hat W)=\prod_{i=1}^{N}P(y_i|\hat x_i) L(W^)=i=1NP(yix^i)

L ( W ^ ) = ∏ i = 1 N [ g ( w ^ ⋅ x ^ i ) ] y i [ 1 − g ( w ^ ⋅ x ^ i ) ] 1 − y i L(\hat W)=\prod_{i=1}^{N}[g(\hat w \cdot \hat x_i)]^{y_i}[1-g(\hat w \cdot \hat x_i)]^{1-y_i} L(W^)=i=1N[g(w^x^i)]yi[1g(w^x^i)]1yi

对数似然函数:
l ( W ^ ) = l o g L ( W ^ ) l(\hat W)=logL(\hat W) l(W^)=logL(W^)

l ( W ^ ) = l o g ∏ i = 1 N [ g ( w ^ ⋅ x ^ i ) ] y i [ 1 − g ( w ^ ⋅ x ^ i ) ] 1 − y i l(\hat W)=log\prod_{i=1}^{N}[g(\hat w \cdot \hat x_i)]^{y_i}[1-g(\hat w \cdot \hat x_i)]^{1-y_i} l(W^)=logi=1N[g(w^x^i)]yi[1g(w^x^i)]1yi

l ( W ^ ) = ∑ i = 1 N [ y i ∗ l o g ( g ( w ^ ⋅ x ^ i ) ) + ( 1 − y i ) l o g ( 1 − g ( w ^ ⋅ x ^ i ) ) ] l(\hat W)=\sum_{i=1}^{N}[y_i*log(g(\hat w \cdot \hat x_i))+(1-y_i)log(1-g(\hat w \cdot \hat x_i))] l(W^)=i=1N[yilog(g(w^x^i))+(1yi)log(1g(w^x^i))]

最大似然估计,求解 W ∗ W^* W
W ^ ∗ = a r g m a x W ^ l ( W ^ ) \hat W^*=\underset{\hat W}{argmax } l(\hat W) W^=W^argmaxl(W^)

化为最小对数损失
W ^ ∗ = a r g m i n W ^ − l ( W ^ ) \hat W^*=\underset{\hat W}{argmin } -l(\hat W) W^=W^argminl(W^)

y ^ i = g ( w ^ ⋅ x ^ ) \hat y_i=g(\hat w \cdot \hat x) y^i=g(w^x^),对数似然函数对 W ^ \hat W W^求导得:

∂ l ( W ^ ) ∂ W ^ = − ∑ i = 1 N [ y i y ^ i ( 1 − y ^ i ) y ^ i x i − ( 1 − y i ) y ^ i ( 1 − y ^ i ) 1 − y ^ i x i ] \frac{\partial l(\hat W)}{\partial \hat W}=-\sum_{i=1}^{N}[y_i\frac{\hat y_i(1-\hat y_i)}{\hat y_i}x_i-(1-y_i)\frac{\hat y_i(1-\hat y_i)}{1-\hat y_i}x_i] W^l(W^)=i=1N[yiy^iy^i(1y^i)xi(1yi)1y^iy^i(1y^i)xi]

∂ l ( W ^ ) ∂ W ^ = − ∑ i = 1 N x i [ y i ( 1 − y ^ i ) − y ^ i ( 1 − y i ) ] \frac{\partial l(\hat W)}{\partial \hat W}=-\sum_{i=1}^{N}x_i[y_i(1-\hat y_i)-\hat y_i(1-y_i)] W^l(W^)=i=1Nxi[yi(1y^i)y^i(1yi)]

∂ l ( W ^ ) ∂ W ^ = − ∑ i = 1 N x i ( y i − y ^ i ) \frac{\partial l(\hat W)}{\partial \hat W}=-\sum_{i=1}^{N}x_i(y_i-\hat y_i) W^l(W^)=i=1Nxi(yiy^i)
注意: y ^ i ′ = y ^ i ( 1 − y ^ i ) {\hat y_i}'=\hat y_i(1-\hat y_i) y^i=y^i(1y^i),因为sigmoid函数的导数就是这样。

最后一步,我们采取梯度下降法对权值向量进行迭代更新

W ^ t + 1 = W ^ t + α ∑ i = 1 N x i ( y i − y ^ i w t ) \hat W_{t+1}=\hat W_t+\alpha\sum_{i=1}^{N} x_i(y_i-\hat y_i^{wt}) W^t+1=W^t+αi=1Nxi(yiy^iwt)

其中 α \alpha α表示学习率, y ^ i w t \hat y_i^{wt} y^iwt表示模型在参数为 W ^ t \hat W_t W^t时的预测输出。

这样,我们的模型就出来了
y = 1 1 + e − ( w x + b ) y=\frac{1}{1+e^{-(wx+b)}} y=1+e(wx+b)1
在预测新的数据时,只需把数据放进这个模型,根据输出值比较设定的阈值来判断输出的类别。例如阈值设为0.5,如果y的输出值大于0.5,则判别类型为1,如果小于0.5,则判别类型为0.

三、代码实现

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
%matplotlib inline

#加载数据
def load_data():
	data = datasets.load_iris()
	X = data.data[:100,:2]
	y = data.target[:100]
	return X,y

#配置增广X矩阵
def data_matrix(X):
	data_mat = []
	for d in X:
		data_mat.append([1,*d])
	return np.array(data_mat)

#sigmoid函数
def sigmoid(z):
	return 1/(1+np.exp(-z))

#拟合数据
def fit(X,y,alpha=0.01,maxiters=200):
	m = y.size
	theta = np.zeros((len(X[0]),1),dtype=np.float32)
	for iter in range(maxiters):
		for i in range(m):
			h = sigmoid(np.dot(X[i],theta))
			theta += alpha * np.transpose([X[i]]) * (y[i]-h)
	return theta

#画出决策边界
X,y = load_data()
X = data_matrix(X)
theta = fit(X,y)
xx = np.arange(4,8)
yy = -(theta[0]+theta[1]*xx)/theta[2]
plt.scatter(X[:50,1],X[:50,2])
plt.scatter(X[50:,1],X[50:,2])
plt.plot(xx,yy)

结果如下图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值