文章目录
一、逻辑回归简介
逻辑回归(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+e−z1
其中,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^)=−[y⋅log(y^)+(1−y)⋅log(1−y^)]
其中:
- y:真实标签(0或1)。
- \hat{y}:预测的概率值(0到1之间)。
通过最小化交叉熵损失,逻辑回归可以找到最优的参数 w 和 b,使得模型的预测尽可能准确。
四、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 学习要点
- 逻辑回归原理:逻辑回归使用 sigmoid 函数将线性模型的输出映射到0到1之间,用于计算分类概率。
- 交叉熵损失函数:逻辑回归通过最小化交叉熵损失来优化模型。
- Python实现:可以使用 scikit-learn 库中的 LogisticRegression 轻松实现逻辑回归分类。
5.2 练习题
- 使用逻辑回归对 Iris 数据集进行多分类,观察模型的表现。
- 使用 sklearn.datasets 模块中的 load_wine 数据集,构建一个逻辑回归模型,预测葡萄酒的类别。
- 尝试调整逻辑回归的正则化参数 C,观察模型的性能变化。
希望本文能帮助您更好地理解逻辑回归的基本概念和实现方法。下一篇文章将为您介绍决策树分类及其Python实现。如果有任何问题,欢迎在评论中讨论!
标签:逻辑,log,Python,回归,人工智能,初级,train,test,模型 From: https://blog.csdn.net/PoGeN1/article/details/143021909