自学内容网 自学内容网

【人工智能-初级】第4章 用Python实现逻辑回归:从数据到模型

一、逻辑回归简介

逻辑回归(Logistic Regression)是机器学习中的一种常用的分类算法,主要用于解决二分类和多分类问题。尽管名字里有“回归”,逻辑回归实际上是一种分类算法,而不是回归算法。

逻辑回归的基本思想是通过线性模型来计算概率,并使用这个概率来进行分类。它特别适用于那些目标变量是离散值(例如0或1,代表不同类别)的任务。在医疗诊断、信用风险评估和广告点击预测等领域,逻辑回归都得到了广泛应用。

二、逻辑回归的数学原理

逻辑回归使用的数学模型类似于线性回归,只是为了能够将输出值限制在0到1之间,我们需要对线性回归的输出做一些处理。具体地说,逻辑回归通过 sigmoid 函数 将线性回归的输出映射到0到1的范围,从而可以解释为属于某一类别的概率。

2.1 线性模型

首先,我们从一个简单的线性模型开始:

z = w 1 x 1 + w 2 x 2 + . . . + w n x n + b z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b z=w1x1+w2x2+...+wnxn+b

其中,w 是特征的权重,b 是偏置项,x 是输入特征。这个公式和线性回归的公式类似。

2.2 Sigmoid函数

为了将线性模型的输出映射到0到1之间,逻辑回归使用了 sigmoid 函数,公式为:

σ ( z ) = 1 1 + e − z \sigma(z) = \frac{1}{1 + e^{-z}} σ(z)=1+ez1

其中,e 是自然对数的底数,约等于2.718。sigmoid 函数的作用是将输入值(可能是任何实数)压缩到0和1之间,输出的值可以看作是某个事件发生的概率。

2.3 预测与决策边界

逻辑回归的预测结果是一个概率值,通常使用一个阈值(例如0.5)来将样本分类为正类或负类。如果概率大于等于0.5,就将样本归为正类(例如1),否则归为负类(例如0)。

三、逻辑回归的损失函数

逻辑回归使用 交叉熵损失函数(Cross-Entropy Loss)来衡量模型的预测值与真实值之间的差距。交叉熵损失函数的定义如下:

L ( y , y ^ ) = − [ y ⋅ log ⁡ ( y ^ ) + ( 1 − y ) ⋅ log ⁡ ( 1 − y ^ ) ] L(y, \hat{y}) = - [y \cdot \log(\hat{y}) + (1 - y) \cdot \log(1 - \hat{y})] L(y,y^)=[ylog(y^)+(1y)log(1y^)]

其中:

  • y:真实标签(0或1)。
  • \hat{y}:预测的概率值(0到1之间)。

通过最小化交叉熵损失,逻辑回归可以找到最优的参数 wb,使得模型的预测尽可能准确。

四、Python实现逻辑回归

下面我们通过Python实现一个逻辑回归模型,并使用 scikit-learn 库来帮助我们完成这一任务。

4.1 导入必要的库

首先,我们需要导入一些必要的库:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
  • numpy:用于数值计算。
  • matplotlib:用于数据可视化。
  • sklearn.datasets:用于加载 Breast Cancer 数据集,这是一个二分类数据集。
  • train_test_split:用于将数据集拆分为训练集和测试集。
  • StandardScaler:用于数据标准化。
  • LogisticRegression:逻辑回归分类器。
  • accuracy_score, confusion_matrix, classification_report:用于评估模型的性能。

4.2 加载数据集并进行预处理

我们使用 Breast Cancer 数据集,这是一个常用的二分类数据集,用于预测乳腺癌的良性或恶性。

# 加载Breast Cancer数据集
data = load_breast_cancer()
X = data.data
y = data.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 对特征进行标准化处理
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
  • load_breast_cancer():加载Breast Cancer数据集,X 是特征矩阵,y 是标签。
  • train_test_split:将数据集拆分为训练集和测试集,20%的数据用于测试。
  • StandardScaler:对数据进行标准化,使每个特征具有零均值和单位方差,减少特征间的尺度差异。

4.3 创建逻辑回归模型并进行训练

我们创建一个逻辑回归分类器,并用训练集进行模型训练。

# 创建逻辑回归分类器
log_reg = LogisticRegression(random_state=42)

# 训练模型
log_reg.fit(X_train, y_train)
  • LogisticRegression(random_state=42):创建逻辑回归分类器。
  • log_reg.fit(X_train, y_train):用训练数据拟合逻辑回归模型。

4.4 模型预测与评估

使用测试集对模型进行预测,并评估其性能。

# 对测试集进行预测
y_pred = log_reg.predict(X_test)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型的准确率: {accuracy * 100:.2f}%")

# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:\n", conf_matrix)

# 分类报告
class_report = classification_report(y_test, y_pred)
print("分类报告:\n", class_report)
  • log_reg.predict(X_test):对测试集进行预测。
  • accuracy_score:计算预测的准确率。
  • confusion_matrix:计算混淆矩阵,用于评估分类器在每个类别上的表现。
  • classification_report:输出包括精确率、召回率和F1分数的详细报告。

4.5 可视化决策边界(针对二维数据)

为了更直观地理解逻辑回归的工作原理,我们可以使用二维数据集绘制决策边界。

from sklearn.datasets import make_classification

# 创建一个二维数据集
X, y = make_classification(n_features=2, n_redundant=0, n_informative=2, n_clusters_per_class=1, random_state=42)

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 训练逻辑回归模型
log_reg = LogisticRegression()
log_reg.fit(X_train, y_train)

# 绘制决策边界
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))

Z = log_reg.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k', marker='o')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Logistic Regression Decision Boundary')
plt.show()

通过上述代码,我们可以看到逻辑回归在二维平面上划分的决策边界,以及数据点的分布情况。蓝色和橙色区域分别代表模型分类为类别0和类别1的区域。

五、总结

逻辑回归是一种非常实用的分类算法,特别适用于二分类问题。它通过使用 sigmoid 函数将线性模型的输出转换为0到1之间的概率值,从而可以根据概率来分类。逻辑回归的损失函数是 交叉熵损失,它通过最小化损失来找到最优的模型参数。

5.1 学习要点

  1. 逻辑回归原理:逻辑回归使用 sigmoid 函数将线性模型的输出映射到0到1之间,用于计算分类概率。
  2. 交叉熵损失函数:逻辑回归通过最小化交叉熵损失来优化模型。
  3. Python实现:可以使用 scikit-learn 库中的 LogisticRegression 轻松实现逻辑回归分类。

5.2 练习题

  1. 使用逻辑回归对 Iris 数据集进行多分类,观察模型的表现。
  2. 使用 sklearn.datasets 模块中的 load_wine 数据集,构建一个逻辑回归模型,预测葡萄酒的类别。
  3. 尝试调整逻辑回归的正则化参数 C,观察模型的性能变化。

希望本文能帮助您更好地理解逻辑回归的基本概念和实现方法。下一篇文章将为您介绍决策树分类及其Python实现。如果有任何问题,欢迎在评论中讨论!


原文地址:https://blog.csdn.net/PoGeN1/article/details/143021909

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!