本文旨在通过实现一个基础的逻辑回归分类模型,了解并应用逻辑回归模型,完成从数据加载、预处理到训练与评估的整个流程。通过使用Scikit-learn的逻辑回归模型,掌握如何进行模型训练与预测。学会评估模型性能,理解准确率、混淆矩阵及分类报告的含义。掌握混淆矩阵的可视化技术,通过图形化呈现分类结果,帮助分析模型性能。
Python编程语言
Scikit-learn库
Matplotlib(用于数据可视化)
NumPy和Pandas库(用于数据处理)
Jupyter Notebook或类似IDE(用于代码编写和结果展示)
本实验使用的是鸢尾花数据集(Iris dataset),它是一个经典的多分类数据集,包含150个样本,4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及3个目标类别(Setosa、Versicolor、Virginica)。为了简化实验并将问题转化为二分类问题,我们将类别2(Virginica)标记为0,而类别0(Setosa)和类别1(Versicolor)标记为1。
1. 数据加载与初步探索
2. 数据集划分与标准化
3. 模型训练与预测
4. 模型性能评估
5. 可视化混淆矩阵
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
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
iris = load_iris()
X = iris.data
y = iris.target
y_binary = np.where(y == 2, 0, 1)
print("原始类别分布:", np.bincount(y))
print("二分类后的类别分布:", np.bincount(y_binary))
图1
使用 train_test_split 方法将数据划分为训练集(80%)和测试集(20%)。
X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.2, random_state=42, stratify=y_binary)
使用 StandardScaler 对数值型特征使用进行标准化,以确保每个特征具有相同的尺度,避免不同尺度的特征对模型训练产生影响。
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
初始化LogisticRegression,使用模型进行训练,基于训练集数据进行拟合。
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
使用训练好的模型对测试集进行预测,得到预测结果。
y_pred = model.predict(X_test)
y_pred
图2
使用 accuracy_score 方法评估模型在测试集上的准确率。
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")
图3
通过 confusion_matrix 查看模型的混淆矩阵,以了解分类情况。
conf_matrix = confusion_matrix(y_test, y_pred)
print("混淆矩阵:n", conf_matrix)
图4
使用 classification_report 获得模型的精确率、召回率和 F1 分数等详细指标。
class_report = classification_report(y_test, y_pred)
print("分类报告:n", class_report)
图5
使用Matplotlib可视化混淆矩阵,帮助直观分析模型的分类效果。
plt.figure(figsize=(8, 6))
sns.set(font_scale=1.2)
sns.heatmap(
conf_matrix,
annot=True,
cmap="BuGn",
fmt="d",
cbar=True,
annot_kws={"size": 14, "weight": "bold"},
xticklabels=["Class 0", "Class 1"],
yticklabels=["Class 0", "Class 1"],
linewidths=1.5,
linecolor="gray"
)
plt.title("Confusion Matrix", fontsize=18, weight="bold", pad=20, color="teal")
plt.xlabel("Predicted Labels", fontsize=14, labelpad=10, color="darkblue")
plt.ylabel("True Labels", fontsize=14, labelpad=10, color="darkblue")
plt.xticks(rotation=45, ha="right", fontsize=12, color="darkgreen")
plt.yticks(fontsize=12, color="darkgreen")
plt.tight_layout()
plt.show()
图6
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import load_iris
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
iris = load_iris()
X = iris.data
y = iris.target
y_binary = np.where(y == 2, 0, 1)
print("数据集形状:", X.shape)
print("原始类别分布:", np.bincount(y))
print("二分类后的类别分布:", np.bincount(y_binary))
X_train, X_test, y_train, y_test = train_test_split(X, y_binary, test_size=0.2, random_state=42, stratify=y_binary)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
y_pred
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.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)
plt.figure(figsize=(8, 6))
sns.set(font_scale=1.2)
sns.heatmap(
conf_matrix,
annot=True,
cmap="BuGn",
fmt="d",
cbar=True,
annot_kws={"size": 14, "weight": "bold"},
xticklabels=["Class 0", "Class 1"],
yticklabels=["Class 0", "Class 1"],
linewidths=1.5,
linecolor="gray"
)
plt.title("Confusion Matrix", fontsize=18, weight="bold", pad=20, color="teal")
plt.xlabel("Predicted Labels", fontsize=14, labelpad=10, color="darkblue")
plt.ylabel("True Labels", fontsize=14, labelpad=10, color="darkblue")
plt.xticks(rotation=45, ha="right", fontsize=12, color="darkgreen")
plt.yticks(fontsize=12, color="darkgreen")
plt.tight_layout()
plt.show()
相关知识
机器学习算法其一:鸢尾花数据集逻辑回归分类预测学习总结
机器学习:鸢尾花数据集
基于鸢尾花(iris)数据集的逻辑回归分类实践
逻辑回归鸢尾花分类可视化
python鸢尾花数据集的分类问题 -- 逻辑回归问题研究
《机器学习》分析鸢尾花数据集
【机器学习】利用KNN对Iris鸢尾花数据集进行分类
鸢尾花数据集深度分析:机器学习的入门实践
基于机器学习的鸢尾花数据集的三分类算法的实现 C++
鸢尾花(Iris)数据集入门
网址: 【机器学习】利用逻辑回归对iris鸢尾花数据集进行分类 https://m.huajiangbk.com/newsview1548733.html
上一篇: 腾讯云计算取得一种数据可视化方法 |
下一篇: 室内花卉盆栽推荐:让你的生活焕发 |