分享免费的编程资源和教程

网站首页 > 技术教程 正文

一文带您了解逻辑回归(Logistic Regression): Python示例

goqiw 2025-01-10 13:23:50 技术教程 85 ℃ 0 评论

辑回归是一种常见的机器学习算法,用于预测事件发生的概率。常用二分类问题。逻辑回归具有简单且易于理解、实用的特点,因此在此不会深入探讨其数学细节,而将重点放在逻辑回归的概念和示例上。

什么是逻辑回归?

逻辑回归是一种用于二分类问题的机器学习算法,它可以用来预测一个样本属于哪一个类别。例如,它可以根据身高、体重和其他特征来预测一个人是男性还是女性。它是一种监督学习算法,可用于预测事件发生的概率。逻辑回归模型学习特征和类别之间的关系。与线性回归不同,线性回归用于将输入数据映射到连续的输出值,逻辑回归算法用于将输入数据映射到概率上。逻辑回归模型通常用于预测事件发生的概率,比如客户是否会购买某个产品。逻辑回归模型的输出是一个介于0和1之间的概率值,表示输入数据属于类别1的概率。

输入数据通过Sigmoid函数映射到概率值。Sigmoid函数,也称为逻辑函数,是一种将值(加权输入的总和)从负无穷到正无穷映射到0到1之间的数学函数。表示假设的Sigmoid函数定义如下:

Sigmoid函数中的z值表示输入值的加权总和,定义如下:

其中,θ表示参数。

下图显示了Sigmoid函数σ(z)与净输入函数输出z之间的关系。Sigmoid函数的值范围在0和1之间。

在上面的图中,当 z 接近正无穷时,σ(z) 接近1。同样,当 z 接近负无穷时,σ(z) 接近0。因此,可以得出结论,σ(z) 的值范围在0到1之间。在 z = 0 时,σ(z) 的值为0.5。逻辑回归模型的基本流程:

一组输入特征(xi)和相关的权重(wi)相结合,并加上偏差项(b)。这在上图中被表示为新的输入函数,与线性回归函数相同。这与上述公式1中的“z”相同。

z被传递到Sigmoid函数中,Sigmoid函数的输出范围从0到1。

σ(z) 的输出P(Y = 1| x; w, b)。输出表示特定数据点或示例在给定其特征x、参数权重(w)和偏差(b)的情况下属于类别1的概率。以IRIS数据集为例,如果目标是预测一朵花是否是Versicolor,而 σ(z) 的值为0.75。这意味着数据点属于Versicolor花的概率为0.75。当将阈值设为0.5时,我们可以预测这朵花是Versicolor。预测的概率可以转化为二进制的类别1或0(在此示例中为Versicolor或其他),可以通过以下阈值函数来表示。

阈值函数将如下所示,作为z的函数(权重和特征与偏差的总和)。参考上面的Sigmoid图。对于z大于或等于0的值,可以预测结果为类别1。

在使用逻辑回归模型进行二元分类时的一个关键方面是决定决策边界。换句话说,决定用于预测类别标签的阈值值称为决策边界。除了0.5之外,可以决定其他决策边界值。

逻辑回归的python示例

数据以iris数据集为例,先数据加载和处理,获取setosa、virginica 两个分类的数据、转换0和1、准备做逻辑回归。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn import metrics
from sklearn.model_selection import train_test_split
import seaborn as sns


iris=pd.read_csv('iris.csv')
iris=iris[(iris['Species']=='setosa') | (iris['Species']=='virginica')]
print(iris.head(5))
iris['Species'] =iris['Species'].replace(['setosa', 'virginica'], [0, 1])
print(iris.tail(5))
X=iris[['Sepal.Length','Sepal.Width','Petal.Length','Petal.Width' ]].values
Y=iris['Species'].values
print(X[0:5])
print(Y[0:5])

拆分数据集(7:3为拆分比例)为训练集和测试集,以及数据的标准化:

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.3, random_state=1, stratify=Y)


sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

训练模型:

lr = LogisticRegression(C=100.0, random_state=1, solver='lbfgs', multi_class='ovr')
lr.fit(X_train_std, Y_train)

模型预测,预测测试数据集的自变量,得到预测结果:

Y_predict = lr.predict(X_test_std)
print(Y_predict)
print(Y_test)

模型评估,混淆矩阵:

matrix_of_confusion = metrics.confusion_matrix(Y_test, Y_predict)
fig, ax = plt.subplots(figsize = (10, 6))
sns.heatmap(matrix_of_confusion, annot=True ,fmt='g');
ax.xaxis.set_label_position("top")
plt.title('Confusion matrix', y=1.1)
plt.ylabel('Actual class')
plt.xlabel('Predicted class')
plt.show();

模型评估(precision、 recall、F1、 accuracy):

print("逻辑回归   Recall  :%.3f" %metrics.recall_score(Y_test, Y_predict))
print("逻辑回归 precision :%.3f" %metrics.precision_score(Y_test, Y_predict))
print("逻辑回归     F1    :%.3f" %metrics.f1_score(Y_test, Y_predict))
print("逻辑回归  Accuracy :%.3f" %metrics.accuracy_score(Y_test, Y_predict))

关于混淆矩阵

为了评估逻辑回归模型效果,通过混淆矩阵直观展现分类模型的预测结果。它显示了每个类别的正确预测(真正例和真负例)和不正确预测(假负例和假正例)的数量。

  • True(真):做出了正确的预测。
  • False(假):做出了错误的预测。
  • Positive(正例):在这个上下文中,表示1或virginica)。
  • Negative(负例):在这个上下文中,表示0或setosa。
  • True Positive(真正例):正确地预测了结果的存在(1)。(预测是virginica,实际也是virginica)
  • False Positive(假正例):错误地预测了结果的存在(1)。(预测是virginica,实际是setosa)
  • True Negative(真负例):正确地预测了结果的不存在(0)。(预测setosa,实际也是setosa)
  • False Negative(假负例):错误地预测了结果的不存在(0)。(预测setosa,实际是virginica)


关于精度、召回率和准确性、F1 分数

  • 精确度(Precision):正类别的分类中实际上是正确的比例。
  • 召回率(Recall):实际正例中被正确分类的比例。
  • 准确度(Accuracy):总预测中正确预测的比例。
  • F1分数(F1-Score):是精度(Precision)和召回率(Recall)的调和平均值。

详细评价指标参见《聊聊机器学习分类问题常用的评价指标》

逻辑回归示例的模型视图(流程图)

SmartNoteBook模型视图(Graph)是用于展现Notebook中单元格之间的逻辑依赖关系关系。在模型视图中,每个单元格被表示为一个节点,而单元格之间的引用关系则表示为边。通过模型视图,可以更直观地理解和分析Notebook的逻辑依赖关系,从而提升代码执行效率。通过下面模型视图可以更好的理解机器学习的基本步骤和流程。


逻辑回归是具有简单且易于理解、且实用的机器学习算法。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表