机器学习基础算法 (二)-逻辑回归
python 环境的配置参考 从零开始:Python 环境搭建与工具配置
逻辑回归是一种用于解决二分类问题的机器学习算法,它可以预测输入数据属于某个类别的概率。本文将详细介绍逻辑回归的原理、Python 实现、模型评估和调优,并结合垃圾邮件分类案例进行实战演练。
一、逻辑回归原理
逻辑回归使用 Sigmoid 函数将线性回归模型的输出转换为概率值。Sigmoid 函数的公式如下:
P(y=1|x) = 1 / (1 + exp(-(β₀ + β₁x₁ + ⋯ + βᵣ𝑥ᵣ)))
其中:
- P(y=1|x) 是输入数据 x 属于类别 1 的概率
- x₁, x₂, …, xᵣ 是特征
- β₀ 是截距
- β₁, β₂, …, βᵣ 是系数
逻辑回归模型通过学习训练数据,找到最佳的 β₀, β₁, …, βᵣ 参数值,使得模型预测的概率值与真实类别之间的误差最小化。
二、Python 实现逻辑回归模型
Python 中可以使用 scikit-learn 库来实现逻辑回归模型。以下是一个简单的示例:
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, confusion_matrix
# 导入数据
# 假设 X 是特征矩阵,y 是目标变量向量
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建逻辑回归模型
model = LogisticRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
print('准确率:', accuracy)
print('混淆矩阵:\n', cm)
三、模型评估和调优
逻辑回归模型的评估指标主要包括:
- 准确率: 衡量模型正确预测的样本比例。
- 精确率: 衡量预测为正例的样本中真正例的比例。
- 召回率: 衡量实际为正例的样本中被正确预测为正例的比例。
- F1 值: 精确率和召回率的调和平均值。
- ROC 曲线和 AUC: 评估模型在不同阈值下的分类性能。
为了提高模型的性能,可以进行以下调优:
- 特征工程: 选择合适的特征,进行特征缩放、特征组合等操作。
- 正则化: 添加 L1 或 L2 正则化项,防止模型过拟合。
- 超参数调优: 调整模型的超参数,例如惩罚系数 C、求解器 solver 等。
四、案例实战:垃圾邮件分类
下面我们使用逻辑回归模型来进行垃圾邮件分类。
1. 导入必要的库
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix
2. 加载数据
# 使用 pandas 加载数据
data = pd.read_csv('spam.csv') # 将 'spam.csv' 替换为实际文件名
# 选择特征和目标变量
X = data['text'] # 使用邮件内容作为特征
y = data['spam'] # 是否为垃圾邮件作为目标变量
3. 特征提取
# 使用 TfidfVectorizer 将文本转换为数值特征
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(X)
4. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
5. 创建和训练模型
model = LogisticRegression()
model.fit(X_train, y_train)
6. 预测和评估
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
print('准确率:', accuracy)
print('混淆矩阵:\n', cm)
完整代码:
import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import accuracy_score, confusion_matrix
# 加载数据
data = pd.read_csv('spam.csv')
# 数据诊断
print("原始数据形状:", data.shape)
print("缺失值统计:\n", data.isnull().sum())
print("\n原始数据前5行:\n", data.head())
# 清理数据
# 1. 检查spam列的值
print("\nSpam列的唯一值:", data['spam'].unique())
# 2. 填充spam列的缺失值(假设缺失值为非垃圾邮件)
data['spam'] = data['spam'].fillna(0)
# 3. 确保spam列为数值型且只包含0和1
data['spam'] = pd.to_numeric(data['spam'], errors='coerce')
data = data[data['spam'].isin([0, 1])]
# 4. 删除text列中的缺失值
data = data.dropna(subset=['text'])
# 验证清理后的数据
print("\n清理后数据形状:", data.shape)
print("清理后spam分布:\n", data['spam'].value_counts())
# 特征提取和模型训练(仅在数据量足够时执行)
if len(data) > 1:
X = data['text']
y = data['spam'].values
vectorizer = TfidfVectorizer(max_features=5000)
X = vectorizer.fit_transform(X)
# 划分训练集和测试集(如果数据量太少,增加test_size)
test_size = 0.2 if len(data) > 10 else 0.1
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=test_size, random_state=42
)
# 创建和训练模型
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
print("\n模型评估:")
print("准确率:", accuracy_score(y_test, y_pred))
print("混淆矩阵:\n", confusion_matrix(y_test, y_pred))
else:
print("\n错误:数据量不足,无法训练模型")
完整的代码: LogisticRegression
总结:
本文介绍了逻辑回归的原理、Python 实现、模型评估和调优,并通过垃圾邮件分类案例演示了如何使用逻辑回归模型进行分类。逻辑回归是一种简单有效的二分类算法,在许多领域都有广泛的应用。希望本文能帮助你理解逻辑回归,并能够使用 Python 进行实际应用。
想要系统学习AI算法Python实现?这个专栏将带你学习机器学习基础算法、深度学习基础算法、强化学习基础算法、模型优化与调参。每个都将包括原理、算法和实战!
点击进入:AI算法Python实现
点击进入:机器学习基础算法 (一)-线性回归
本文为原创内容,未经许可不得转载。