逻辑回归的数学原理推导及原理代码实现

逻辑回归的数学原理推导及原理代码实现

1、逻辑回归算法是目前应用最为广泛的一种算法,虽然是回归算法,但是它解决的是分类问题,而不是回归问题,它的原理是将样本的特征与样本发生的概率,而概率是一个数字,因此将其称为回归算法。

2、对于逻辑回归因为得到的预测结果是事件的发生概率,因此它的预测值值域为0-1之间,而概率转换函数一般选用的是sigmoid函数,它可以将这个实数范围转换为0-1,并且0是一个分界点,当t>0时,概率p大于0.5,当t<0时,概率p<0.5。

3、基于逻辑回归算法的思路,建立适当的损失函数,其数学原理推导如下所示:

可以通过对比线性回归的损失函数看出来,它们的损失函数几乎是一致的,只是前面的系数差了一倍,另外对于函数的预测计算逻辑回归需要在线性计算的基础上通过sigmoid函数进行转换一下即可。

使用批量计算的方法实现逻辑回归的算法原理代码如下所示:

 

import  numpy as np
import matplotlib.pyplot as plt
#定义概率转换函数sigmoid函数
def sigmoid(t):
return 1/(1+np.exp(-t))
x=np.linspace(-10,10,100)
y=sigmoid(x)
plt.figure()
plt.plot(x,y,"r",label="Sigmoid")
plt.legend(loc=2)
plt.show()
#根据线性回归的损失函数和逻辑回归的损失函数的相似性与一致性(只有前面系数不同,另外y估计的计算需要进行sigmoid函数转换即可))

def J1(theta,x_b,y): #损失函数的定义
y_hat=sigmoid(x_b.dot(theta))
return np.sum(y*np.log(y_hat)+(1-y)*np.log(1-y_hat))/len(x_b)
def DJ2(theta,x_b,y):
res=np.empty(len(theta))
res[0]=np.sum(sigmoid(x_b.dot(theta))-y)
for i in range(1,len(theta)):
res[i]=np.sum((sigmoid(x_b.dot(theta))-y).dot(x_b[:,i]))
return res*2/len(x_b)
def DJ1(theta, x_b, y): #梯度计算公式
return x_b.T.dot(sigmoid(x_b.dot(theta))-y)/len(y)
def gradient_descent1(x_b,y,eta,theta_initial,erro=1e-8, n=1e5): #采用批量梯度下降法来进行寻找损失函数的最小值
theta=theta_initial
i=0
while i<n:
gradient = DJ1(theta,x_b,y)
last_theta = theta
theta = theta - gradient * eta
if (abs(J1(theta,x_b,y) - J1(last_theta,x_b,y)))<erro:
break
i+=1
return theta

#利用iris数据集进行原理代码的验证
from sklearn import datasets
d=datasets.load_iris()
x=d.data
y=d.target
x=x[y<2,:2]
y=y[y<2] #逻辑回归适用于二元分类数据
print(x)
print(y)
plt.figure()
plt.scatter(x[y==0,0],x[y==0,1],color="r")
plt.scatter(x[y==1,0],x[y==1,1],color="g")
plt.show()
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1)
x_b=np.hstack([np.ones((len(x_train),1)),x_train])
print(x_b)
theta0=np.zeros(x_b.shape[1])
eta=0.1
theta1=gradient_descent1(x_b,y_train,eta,theta0)
print(theta1)
from sklearn.metrics import accuracy_score
x_b=np.hstack([np.ones((len(x_test),1)),x_test])
y_hat=sigmoid(x_b.dot(theta1))
print(y_hat)
p=np.array(y_hat>0.5,dtype="int")
print(p) #输出预测的分类结果
print(y_test)
print(accuracy_score(p,y_test)) #输出预测的准确度

 
 

 

转载于:https://www.cnblogs.com/Yanjy-OnlyOne/p/11347223.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
逻辑回归是一种用于二分类问题的机器学习算法,它通过建立一个逻辑回归模型来预测样本的类别概率。在推导逻辑回归算法的数学原理时,我们将使用最大似然估计的方法。 假设我们有一个训练数据集,包含n个样本点。每个样本点由输入向量x和对应的类别标签y组成,其中x ∈ R^d,y ∈ {0, 1}。 逻辑回归的目标是建立一个模型,能够根据输入向量x预测出样本属于类别1的概率P(y=1|x)。 为了建立逻辑回归模型,我们使用逻辑函数(或称为sigmoid函数)将线性模型的输出转化为概率值。逻辑函数的形式为: g(z) = 1 / (1 + e^(-z)) 其中,z是线性模型的输出。在逻辑回归中,我们假设线性模型可以表示为: z = w^Tx + b 其中,w是权重向量,b是偏置项。 根据最大似然估计的思想,我们希望找到一组最优的参数w和b,使得在给定训练数据集下,模型对每个样本属于类别1的概率P(y=1|x)尽可能接近其真实标签y。 假设训练数据集中的样本是独立同分布的,我们可以构造似然函数来描述模型的拟合度。对于一个样本点(x, y),似然函数可以表示为: L(w, b) = P(y=1|x)^y * P(y=0|x)^(1-y) 为了简化计算,我们可以将似然函数取对数,得到对数似然函数: l(w, b) = log(L(w, b)) = y * log(P(y=1|x)) + (1-y) * log(P(y=0|x)) 我们的目标是最大化对数似然函数。为了实现这个目标,我们可以通过最小化负对数似然函数来转化为一个优化问题: minimize: -l(w, b) 接下来,我们可以使用梯度下降等优化算法来求解上述优化问题。通过计算负对数似然函数的梯度,并不断更新参数w和b,直到收敛为止。 具体地,我们可以计算负对数似然函数关于参数w和b的偏导数,并进行参数更新。更新规则可以表示为: w := w - α * ∂l/∂w b := b - α * ∂l/∂b 其中,α是学习率,控制参数更新的步长。 通过迭代执行上述更新步骤,我们可以逐渐优化参数w和b,找到最大似然估计下的最优解。 总结起来,逻辑回归算法的数学原理是通过最大似然估计的方法,构建逻辑回归模型,将线性模型的输出通过逻辑函数转化为概率值。通过最小化负对数似然函数,使用梯度下降等优化算法来求解模型的参数。最终,我们可以根据模型的参数来预测样本属于类别1的概率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值