《机器学习》逻辑回归表现形式、公式推导、sigmoid函数、代码实现 No.5

目录

一、什么是逻辑回归

二、Sigmoid函数

1、公式

2、模型

三、线性回归和逻辑回归的表现形式

1、线性回归变现形式

2、损失函数

2.1 表达式

3、线性回归结合sigmoid函数

四、逻辑回归公式推导

1、线性回归表达式

2、sigmoid函数表达式

3、将线性回归表达式带入sigmoid

4、二分类

5、求解

五、逻辑回归实现


一、什么是逻辑回归

        逻辑回归是用于处理因变量为分类变量的回归问题,常见的就是二分类问题,它通过建立一个线性模型,并应用一个非线性函数(称为逻辑函数sigmoid函数)将线性模型的输出转换为概率值。逻辑回归的目标是根据输入特征预测样本属于正类的概率。

        逻辑回归的线性模型使用一个权重向量一个偏置项来表示。给定一个输入特征向量x,线性模型的输出可以表示为y = β0 + β1^T*x ,其中β是权重向量,β0是偏置项。然后,通过将y输入逻辑函数(sigmoid函数),将线性模型的输出转换为一个在0到1之间的概率值。

        sigmoid函数的公式为:f(z) = 1 / (1 + exp(-z))

        训练逻辑回归模型的目标是通过最小化损失函数来优化模型参数。一种常见的损失函数是交叉熵损失函数,它度量了预测概率与实际标签的差异。通过梯度下降等优化算法,可以更新模型的权重和偏置项,以使模型能够更好地拟合训练数据。

二、Sigmoid函数

1、公式

2、模型

        由模型可以看到,自变量为负无穷到正无穷,而值域为(0,1),无限接近于0和1,但是不等于0和1。

        将线性回归模型的表达式的值等效为sigmoid函数的自变量的值,即将其结果映射到(0,1)的区间内,就完成了连续变量概率的转换,大于阈值0.5的类别表示为1类别,小于阈值0.5的类别为0类,这就是完成了二分类任务。

三、线性回归和逻辑回归的表现形式

1、线性回归变现形式

        线性回归就是一条直线尽可能的满足一堆数据点,目的就是找到这条直线,而找直线的过程就是在做线性回归

   

2、损失函数

        损失函数是机器学习中用于衡量模型预测值与真实值之间差异的函数。通常,我们希望模型的预测值尽可能接近真实值,因此损失函数的取值应当在预测偏离真实值时增大,而在预测接近真实值时减小。

2.1 表达式

        即预测值减去真实值的平方,平方是为了让结果为正数,将所有的误差合并起来即为损失函数。

        目标:使损失函数值最小,可以使用最小二乘法和梯度下降法实现

3、线性回归结合sigmoid函数

        即有大量数据点,其中有两个类别,一个是1类,一个是0类,而有一个曲线,将这两类数据点分隔开,求的是一个数据点的预测概率,这个预测概率表示的是样本属于1类或者0类的概率。

四、逻辑回归公式推导

1、线性回归表达式

2、sigmoid函数表达式

3、将线性回归表达式带入sigmoid

        转换为概率的形式,使用极大似然函数的求解

4、二分类

        当标签是1类别的时候,概率为 :

        当标签为0类别的时候,概率为 :

将其整合以下即可得到下列公式:

5、求解

        同样是求极大似然估计,求概率的极大值,所以对上述得到的概率结果进行求和运算,得到下列公式,即求L(θ)的极大值

        然后在对这个式子进行化简,即在等号两边同时增加一个log对数,将连乘符号转换成求和符号,得到下列公式:

        此时将其转换成梯度下降任务(后续会对其进行讲解),即:

        然后得到目标函数

        对目标函数关于参数θ的偏导数求出,并沿着负梯度的方向进行参数更新,参数更新公式:θ := θ - 梯度*学习率,学习率(learning rate)决定了每次迭代中参数更新的步长,需要根据具体情况进行调整。

偏导结果: 

参数更新: 

五、逻辑回归实现

完整代码如下所示:

import pandas as pd
from sklearn.linear_model import LogisticRegression

# 导入训练数据和测试数据
train = pd.read_excel('鸢尾花训练数据.xlsx')
test = pd.read_excel('鸢尾花测试数据.xlsx')

# 求训练数据中的特征和标签的相关关系
corr = train[["样本","萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)","类型_num"]].corr()

# 建立逻辑回归模型
model = LogisticRegression()

# 选择训练的特征值以及标签
train_x = train[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
train_y = train[["类型_num"]]

# 对训练数据进行训练
model.fit(train_x,train_y)

# 对训练数据自己进行预测,并查看训练结果的准确率
train_predict = model.predict(train_x)
train_score = model.score(train_x,train_y)

# 对导入的测试数据分出特征值和标签
test_x = test[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
test_y = test[["类型_num"]]

# 对测试数据进行预测
test_predict = model.predict(train_x)
test_score = model.score(test_x,test_y)

# 对特征值x进行二分类,求得属于0类别和1类别对应的概率
test_predict_pr = model.predict_proba(test_x)

# 导入sklearn中的函数,用来打印0类和1类对应的精度、精确率、召回率、f1值、数据量等等
from sklearn import metrics
print(metrics.classification_report(train_y,train_predict))

# 导入预测数据
predict_date = pd.read_excel('鸢尾花预测数据.xlsx')

# 分出预测数据的x特征,然后对其进行预测,得到预测结果predicted
predict_x = predict_date[["萼片长(cm)","萼片宽(cm)","花瓣长(cm)","花瓣宽(cm)"]]
predicted = model.predict(predict_x)

# 同样求数据是0类和1类的概率值,并打印结果
predict_pro = model.predict_proba(predict_x)
print(predict_pro)

其中的文件有下列三个文件:

1、鸢尾花训练数据.xlsx,共67条

2、鸢尾花测试数据.xlsx,共9条

3、鸢尾花预测数据.xlsx,共9条

4、运行结果如下所示(第一张图为测试数据集的0类或1类对应概率)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜就多练_0828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值