Python机器学习实战——逻辑回归(附完整代码和结果)

Python机器学习实战——逻辑回归(附完整代码和结果)



关于作者


作者:小白熊

作者简介:精通c#、Halcon、Python、Matlab,擅长机器视觉、机器学习、深度学习、数字图像处理、工业检测识别定位、用户界面设计、目标检测、图像分类、姿态识别、人脸识别、语义分割、路径规划、智能优化算法、大数据分析、各类算法融合创新等等。

联系邮箱[email protected]

科研辅导、知识付费答疑、个性化定制以及其他合作需求请联系作者~



  在本篇博文中,我们将详细介绍如何使用Python及其相关的机器学习库来构建一个用于葡萄酒分类的模型。我们不仅会讲解代码的具体实现,还会深入探讨背后的理论基础,帮助读者更好地理解和应用这些技术。


1. 引言

  机器学习是一种让计算机从数据中自动学习的方法。它通过构建模型来解析数据,从而对新数据做出决策或预测。在本案例中,我们将使用逻辑回归模型对葡萄酒数据集进行分类,该数据集包含不同类型的葡萄酒及其化学特性。


2. 理论基础

2.1 逻辑回归

  逻辑回归(Logistic Regression)是一种广泛使用的分类算法,尽管名字中带有“回归”二字,但它实际上是一种分类方法。逻辑回归通过 logistic 函数(也称为 sigmoid 函数)将线性组合的结果映射到 (0, 1) 区间,从而输出概率值。对于多分类问题,通常使用 softmax 函数来扩展 logistic 回归,使其能够处理多个类别。

2.2 数据标准化

  数据标准化(Standardization)是数据预处理的一个重要步骤,它通过减去均值并除以标准差,将特征值缩放到零均值和单位方差。这有助于提高模型的收敛速度和性能,尤其是在使用梯度下降等优化算法时。

2.3 交叉验证

  交叉验证(Cross-Validation)是一种评估模型性能的技术,它通过将数据集划分为多个子集,多次训练和测试模型,从而更准确地估计模型的泛化能力。常见的交叉验证方法有 k 折交叉验证(k-Fold Cross-Validation),即将数据集分成 k 个子集,每次使用 k-1 个子集进行训练,剩下的一个子集进行测试,重复 k 次。

2.4 性能评估指标

  • 准确率(Accuracy):正确分类的样本数占总样本数的比例。
  • 精确率(Precision):在所有被预测为正类的样本中,真正类的比例。
  • 召回率(Recall):在所有实际为正类的样本中,被正确预测为正类的比例。
  • F1 分数(F1 Score):精确率和召回率的调和平均值,用于综合评估模型的性能。
  • 混淆矩阵(Confusion Matrix):一个表格,显示了模型在每个类别上的预测结果,包括真阳性、假阳性、真阴性和假阴性。


3. 实践步骤

3.1 导入必要的库

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
import seaborn as sns
from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
import warnings

3.2 数据准备

加载葡萄酒数据集并进行初步的数据处理,包括检查缺失值和数据标准化。

warnings.filterwarnings("ignore")

# 设置中文字体为SimHei
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 加载数据集
data = load_wine()

# 数据转换
df = pd.DataFrame(data.data, columns=data.feature_names)
df['Target'] = data.target

# 缺失值检测
missing_values = df.isnull().sum()
print("缺失值检测结果:\n", missing_values)

# 数据提取
X = df.drop('Target', axis=1)
y = df['Target']

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

3.3 数据划分

将数据集划分为训练集和验证集,以便评估模型的性能。

X_train, X_val, y_train, y_val = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

3.4 模型构建与训练

使用逻辑回归模型进行多分类任务,并通过交叉验证评估模型的性能。

model = LogisticRegression(multi_class='multinomial', solver='lbfgs', max_iter=1000)

# 十折交叉验证
kf = KFold(n_splits=10, shuffle=True, random_state=42)

cv_scores = cross_val_score(model, X_train, y_train, cv=kf, scoring='accuracy')
print(f"平均准确率: {np.mean(cv_scores)}")

# 训练模型
model.fit(X_train, y_train)

3.5 模型评估

对模型在验证集上的表现进行评估,计算各种性能指标。

y_val_pred = model.predict(X_val)

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_val, y_val_pred)

# 计算分类评估指标
accuracy_val = accuracy_score(y_val, y_val_pred)
precision_val = precision_score(y_val, y_val_pred, average='weighted')
recall_val = recall_score(y_val, y_val_pred, average='weighted')
f1_val = f1_score(y_val, y_val_pred, average='weighted')

print(f"准确率: {accuracy_val}")
print(f"精确率: {precision_val}")
print(f"召回率: {recall_val}")
print(f"F1分数: {f1_val}")

3.6 结果可视化

使用 Seaborn 库可视化混淆矩阵,以便更直观地理解模型的分类效果。

sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=data.target_names, yticklabels=data.target_names)
plt.title(f'混淆矩阵')
plt.xlabel("预测值")
plt.ylabel("真实值")
plt.show()

Python机器学习实战——逻辑回归(附完整代码和结果)_第1张图片



4.完整代码

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split, cross_val_score, KFold
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
import seaborn as sns
from sklearn.datasets import load_wine
import matplotlib.pyplot as plt
import warnings

warnings.filterwarnings("ignore")

# 设置中文字体为SimHei
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# 加载数据集
data = load_wine()

# 数据转换
df = pd.DataFrame(data.data, columns=data.feature_names)
df['Target'] = data.target

# 缺失值检测
missing_values = df.isnull().sum()
print("缺失值检测结果:\n", missing_values)

# 数据提取
X = df.drop('Target', axis=1)
y = df['Target']

# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 划分训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_scaled, y, test_size=0.2, random_state=42)

# 构建模型
model = LogisticRegression(multi_class='multinomial', solver='lbfgs', max_iter=1000)

# 十折交叉验证
kf = KFold(n_splits=10, shuffle=True, random_state=42)

cv_scores = cross_val_score(model, X_train, y_train, cv=kf, scoring='accuracy')
print(f"平均准确率: {np.mean(cv_scores)}")

# 训练模型
model.fit(X_train, y_train)

# 模型预测
y_val_pred = model.predict(X_val)

# 计算混淆矩阵
conf_matrix = confusion_matrix(y_val, y_val_pred)

# 计算分类评估指标
accuracy_val = accuracy_score(y_val, y_val_pred)
precision_val = precision_score(y_val, y_val_pred, average='weighted')
recall_val = recall_score(y_val, y_val_pred, average='weighted')
f1_val = f1_score(y_val, y_val_pred, average='weighted')

print(f"准确率: {accuracy_val}")
print(f"精确率: {precision_val}")
print(f"召回率: {recall_val}")
print(f"F1分数: {f1_val}")

# 可视化混淆矩阵
sns.heatmap(conf_matrix, annot=True, fmt='d', cmap='Blues', xticklabels=data.target_names, yticklabels=data.target_names)
plt.title(f'混淆矩阵')
plt.xlabel("预测值")
plt.ylabel("真实值")
plt.show()


5. 总结

  通过上述步骤,我们不仅构建了一个可以对葡萄酒进行分类的模型,还深入理解了逻辑回归、数据标准化、交叉验证和性能评估的基本原理。这些知识和技术在许多实际问题中都具有广泛的应用价值,希望本文能为读者提供有益的参考和启发。如果大家有任何问题或建议,欢迎随时交流讨论!

你可能感兴趣的:(机器学习,机器学习,python,逻辑回归)