首页 分享 【机器学习】利用逻辑回归对iris鸢尾花数据集进行分类

【机器学习】利用逻辑回归对iris鸢尾花数据集进行分类

来源:花匠小妙招 时间:2025-01-12 03:36

目标

本文旨在通过实现一个基础的逻辑回归分类模型,了解并应用逻辑回归模型,完成从数据加载、预处理到训练与评估的整个流程。通过使用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

所属分类:花卉
上一篇: 腾讯云计算取得一种数据可视化方法
下一篇: 室内花卉盆栽推荐:让你的生活焕发

推荐分享