Python实现逻辑回归(LR)算法:从基础到进阶实战解析
引言
逻辑回归(Logistic Regression,简称LR)是机器学习中一种经典的分类算法,广泛应用于金融风控、医疗诊断、市场营销等领域。Python作为最受欢迎的编程语言之一,其丰富的库和工具使得实现逻辑回归变得简单而高效。本文将从基础概念入手,逐步深入到实战应用,带您全面掌握Python中的逻辑回归算法。
一、逻辑回归的基本概念
逻辑回归是一种用于二分类问题的统计方法,其核心思想是通过一个逻辑函数(通常是Sigmoid函数)将线性回归模型的输出压缩到0和1之间,从而实现对概率的预测。
1.1 Sigmoid函数
Sigmoid函数定义为: [ \sigma(z) = \frac{1}{1 + e^{-z}} ]
其中,( z ) 是线性组合的结果,即 ( z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \ldots + \beta_n x_n )。
1.2 损失函数
逻辑回归的损失函数通常使用对数似然损失(Log-Likelihood Loss),定义为: [ L(\theta) = -\sum_{i=1}^{m} [y^{(i)} \log(\sigma(z^{(i)})) + (1 - y^{(i)}) \log(1 - \sigma(z^{(i)}))] ]
其中,( m ) 是样本数量,( y^{(i)} ) 是第 ( i ) 个样本的真实标签。
二、Python实现逻辑回归
Python中有多个库可以用于实现逻辑回归,其中最常用的是scikit-learn库。下面我们将通过一个简单的示例来展示如何使用scikit-learn进行逻辑回归。
2.1 导入必要的库
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, roc_curve
import matplotlib.pyplot as plt
2.2 加载数据
假设我们有一个简单的数据集,包含特征和标签:
# 创建示例数据
data = {
'feature1': [2.0, 1.5, 3.0, 2.5, 4.0],
'feature2': [1.0, 2.0, 3.0, 4.0, 5.0],
'label': [0, 0, 1, 1, 1]
}
df = pd.DataFrame(data)
# 分割数据集
X = df[['feature1', 'feature2']]
y = df['label']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
2.3 训练逻辑回归模型
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
2.4 模型评估
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print(f'Confusion Matrix:\n{conf_matrix}')
# ROC曲线
y_pred_proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
plt.plot(fpr, tpr, label='ROC Curve')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()
三、进阶实战:波士顿房价预测
波士顿房价预测是一个经典的回归问题,但我们可以将其转化为分类问题,例如将房价分为高和低两类。
3.1 加载数据集
from sklearn.datasets import load_boston
from sklearn.preprocessing import StandardScaler
# 加载数据集
boston = load_boston()
X = boston.data
y = (boston.target > np.mean(boston.target)).astype(int) # 将房价分为高和低两类
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 分割数据集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)
3.2 训练逻辑回归模型
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
3.3 模型评估
# 预测测试集
y_pred = model.predict(X_test)
# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy}')
# 混淆矩阵
conf_matrix = confusion_matrix(y_test, y_pred)
print(f'Confusion Matrix:\n{conf_matrix}')
# ROC曲线
y_pred_proba = model.predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)
plt.plot(fpr, tpr, label='ROC Curve')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()
四、逻辑回归的正则化
在实际应用中,为了避免过拟合,逻辑回归通常会引入正则化项。scikit-learn中的LogisticRegression
类提供了多种正则化方式,包括L1(Lasso)和L2(Ridge)正则化。
4.1 L1正则化
# 创建带有L1正则化的逻辑回归模型
model_l1 = LogisticRegression(penalty='l1', solver='liblinear')
# 训练模型
model_l1.fit(X_train, y_train)
# 模型评估
y_pred_l1 = model_l1.predict(X_test)
accuracy_l1 = accuracy_score(y_test, y_pred_l1)
print(f'L1 Regularization Accuracy: {accuracy_l1}')
4.2 L2正则化
# 创建带有L2正则化的逻辑回归模型
model_l2 = LogisticRegression(penalty='l2')
# 训练模型
model_l2.fit(X_train, y_train)
# 模型评估
y_pred_l2 = model_l2.predict(X_test)
accuracy_l2 = accuracy_score(y_test, y_pred_l2)
print(f'L2 Regularization Accuracy: {accuracy_l2}')
五、总结
通过本文的讲解,我们从逻辑回归的基本概念出发,逐步深入到Python中的具体实现,并通过实战案例展示了逻辑回归在分类问题中的应用。此外,我们还探讨了正则化在逻辑回归中的重要作用。希望这篇文章能帮助您更好地理解和应用逻辑回归算法,为您的机器学习之路添砖加瓦。
参考文献
- scikit-learn官方文档
- 机器学习实战
- Python数据分析与机器学习实战课程
希望这篇文章对您有所帮助,祝您学习愉快!