【机器学习】利用逻辑回归对iris鸢尾花数据集进行分类
目标
本文旨在通过实现一个基础的逻辑回归分类模型,了解并应用逻辑回归模型,完成从数据加载、预处理到训练与评估的整个流程。通过使用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://www.huajiangbk.com/newsview1548733.html
上一篇: 腾讯云计算取得一种数据可视化方法 |
下一篇: 室内花卉盆栽推荐:让你的生活焕发 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039