0
点赞
收藏
分享

微信扫一扫

【机器学习】任务三:基于逻辑回归与线性回归的鸢尾花分类与波士顿房价预测分析

目录

1.目的和要求

1.1 掌握回归分析的概念和使用场景

1.2 掌握机器学习回归分析进行数据预测的有效方法

1.3 掌握特征重要性分析、特征选择和模型优化的方法

2.波士顿房价预测与特征分析

2.1第一步:导入所需的模块和包

2.2 第二步:加载波士顿房价数据集

2.3 第三步:数据预处理与分割

2.4 第四步:建立并训练线性回归模型

2.5 第五步:进行预测并评估模型

2.6 第六步:可视化真实值与预测值的关系

2.7 第七步:残差分析

2.5 第八步:特征相关性分析

2.9 第九步:特征重要性分析

3.鸢尾花数据集的逻辑回归分析

3.1 步骤 1:导入所需的模块与包

3.2 步骤 2:加载鸢尾花数据集

3.3 步骤 3:数据探索与可视化

3.4 步骤 4:数据集划分

3.5 步骤 5:训练逻辑回归模型

3.6 步骤 6:预测与评估模型

3.7 步骤 7:可视化逻辑回归决策边界

3.8 结果分析

4.总体代码和结果

4.1波士顿

4.1.1 波士顿代码

4.1.2 波士顿代码结果

4.3.3 波士顿房价预测模型结果分析

4.2 鸢尾花

4.2.1  鸢尾花代码

4.2.2 鸢尾花代码运行结果

4.2.3  鸢尾花模型结果分析


1.目的和要求

1.1 掌握回归分析的概念和使用场景

回归分析 是一种统计方法,用于理解变量之间的关系,尤其是通过一个或多个自变量(特征)来预测目标变量(因变量)。在机器学习中,回归分析主要用于连续值的预测。

使用场景

  • 房价预测:根据房屋的面积、位置、房龄等特征来预测房价。
  • 销售预测:通过历史销售数据、市场状况等预测未来的销售额。
  • 股票市场预测:根据市场指标和历史价格预测未来的股票价格。
  • 能耗预测:根据天气和设备参数,预测未来的能耗需求。

回归分析的核心目标是寻找输入变量和目标输出变量之间的关系,以最小化误差。

1.2 掌握机器学习回归分析进行数据预测的有效方法

在机器学习中,常用的回归方法包括线性回归、岭回归、LASSO回归和多项式回归等。你可以通过以下几个步骤来有效进行数据预测:

常用的回归模型:

  • 线性回归:假设自变量与因变量之间存在线性关系,适用于简单且明确的线性问题。
  • 岭回归(Ridge Regression):在线性回归的基础上加上L2正则化,用于解决多重共线性问题。
  • LASSO回归(Least Absolute Shrinkage and Selection Operator):加上L1正则化,可以使某些系数变为0,具有特征选择功能。
  • 多项式回归:适用于非线性数据,可以通过增加特征的多项式项来提高预测效果。
  • 支持向量回归(SVR):用于非线性回归问题,通过核函数将数据映射到高维空间进行线性回归。

回归分析步骤:

  1. 数据预处理:检查数据的完整性,处理缺失值,归一化或标准化数据。
  2. 特征选择:从众多自变量中选择与目标变量相关性较高的变量进行建模,减少模型的复杂性。
  3. 数据集划分:将数据划分为训练集和测试集(常见划分比例为80:20),确保模型的泛化能力。
  4. 模型选择:根据数据特点选择合适的回归模型。
  5. 模型评估:使用均方误差(MSE)、R²值、平均绝对误差(MAE)等指标评估模型的效果。
  6. 模型优化:通过调整模型的参数(如正则化系数)、交叉验证和网格搜索等方法来优化模型。

1.3 掌握特征重要性分析、特征选择和模型优化的方法

特征重要性分析:

在回归模型中,特征的重要性可以通过以下方法评估:

  • 线性回归系数:线性回归模型中的系数值反映了每个特征对预测结果的影响大小。
  • 基于树的模型(例如随机森林和梯度提升树):这些模型能够直接输出特征的重要性。树模型通过拆分点的重要性来评估特征的贡献。
# 特征重要性分析代码示例
coefficients = pd.Series(model.coef_, index=X.columns)
coefficients = coefficients.sort_values(ascending=False)
plt.figure(figsize=(10, 6))
coefficients.plot(kind='barh')
plt.title('特征重要性分析', fontproperties=font)
plt.xlabel('系数值', fontproperties=font)
plt.ylabel('特征', fontproperties=font)
plt.show()

特征选择:

特征选择是通过减少不重要的特征来简化模型,提升预测的准确性和泛化能力的方法。常用的特征选择方法有:

  • 过滤法:使用统计方法(如皮尔逊相关系数、卡方检验等)来选择与目标变量相关性较高的特征。
  • 包裹法:通过模型进行评估,选择能最大化模型表现的特征组合,例如递归特征消除(RFE)。
  • 嵌入法:模型训练时自动选择重要特征,例如LASSO回归。

模型优化:

模型优化是提升模型预测能力的关键,以下是几种常用的优化方法:

  • 正则化:通过添加L1或L2正则化项,防止模型过拟合。
  • 超参数调整:通过网格搜索(Grid Search)或随机搜索(Random Search)寻找最佳的超参数组合。
  • 交叉验证:将数据分成多折进行训练和验证,避免模型在某个固定训练集上过拟合。
# 交叉验证代码示例
from sklearn.model_selection import cross_val_score
cv_scores = cross_val_score(model, X, y, cv=10, scoring='neg_mean_squared_error')
cv_scores_mean = -cv_scores.mean()
print(f'10折交叉验证的平均MSE:{cv_scores_mean}')

总结:

  1. 回归分析:用于分析特征与目标变量之间的关系,常用于连续变量的预测任务。
  2. 数据预测:通过机器学习的回归模型,进行模型选择、训练和评估,提升预测效果。
  3. 特征重要性与模型优化:通过特征选择、正则化、超参数调整和交叉验证,简化模型并提升预测能力。

2.波士顿房价预测与特征分析

2.1第一步:导入所需的模块和包

我们首先需要导入机器学习项目中常用的库,这些库用于数据处理、建模和可视化。

# 导入必要的库
import pandas as pd  # 用于数据处理
import numpy as np  # 用于科学计算
import matplotlib.pyplot as plt  # 用于绘制图形
import seaborn as sns  # 用于绘制高级图形
from sklearn.model_selection import train_test_split  # 用于分割训练集和测试集
from sklearn.linear_model import LinearRegression  # 用于构建线性回归模型
from sklearn.metrics import mean_squared_error, r2_score  # 用于模型评估
from matplotlib.font_manager import FontProperties  # 用于设置中文字体

解释:

  • pandas 用于数据的加载、处理和分析。
  • numpy 用于执行数学计算。
  • matplotlib.pyplotseaborn 用于数据的可视化。
  • train_test_split 用于将数据集划分为训练集和测试集。
  • LinearRegression 是线性回归模型的构建模块。
  • mean_squared_errorr2_score 用于评估模型性能。

2.2 第二步:加载波士顿房价数据集

我们使用 TensorFlow 的 Keras 库从波士顿房价数据集中加载数据并将其分割为特征与目标变量。

# 加载本地数据集
file_path = r'C:\Users\Administrator\Desktop\ML\机器学习\实验任务二\data\boston_housing.csv'
df = pd.read_csv(file_path)

# 数据探索
print(df.head())  # 查看数据前5行
print(df.describe())  # 查看数据统计信息
print(df.columns)  # 查看数据集的列名

解释:

  • pd.read_csv() 用于从 CSV 文件中加载数据。
  • df.head() 用于查看数据的前5行,了解数据的基本结构。
  • df.describe() 提供了数值型数据的描述统计信息,如平均值、标准差等。
  • df.columns 打印数据集的列名,确保列名正确。

2.3 第三步:数据预处理与分割

在进行建模之前,我们需要处理数据,将特征与目标变量分开,并将数据集划分为训练集和测试集。

# 检查是否有缺失值
print(df.isnull().sum())  # 输出每个特征的缺失值数量

# 分割特征和目标变量
X = df.drop('MEDV', axis=1)  # 'MEDV'是目标变量,表示房价
y = df['MEDV']

# 将数据划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

解释:

  • df.isnull().sum() 检查数据集中是否存在缺失值,确保数据质量。
  • X = df.drop('MEDV', axis=1) 移除目标变量(房价),X 是特征矩阵。
  • y = df['MEDV'] 将目标变量提取出来。
  • train_test_split 用于将数据集划分为训练集和测试集,其中 20% 的数据作为测试集。

2.4 第四步:建立并训练线性回归模型

我们使用线性回归模型对数据进行训练,训练集用于模型的拟合。

# 创建线性回归模型
model = LinearRegression()

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

解释:

  • LinearRegression() 创建线性回归模型的实例。
  • model.fit(X_train, y_train) 通过训练数据对模型进行训练,调整模型参数,使得模型可以根据训练数据预测房价。

2.5 第五步:进行预测并评估模型

模型训练完成后,使用测试集进行预测,并使用均方误差(MSE)和 R²值来评估模型性能。

# 使用测试集进行预测
y_pred = model.predict(X_test)

# 评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

# 打印评估结果
print(f'均方误差(MSE):{mse}')
print(f'R²值:{r2}')

解释:

  • model.predict(X_test) 使用训练好的模型对测试集进行预测。
  • mean_squared_error() 计算均方误差,衡量模型预测的误差大小,误差越小,模型越好。
  • r2_score() 计算 R²值,表示模型解释数据变化的比例,值越接近 1 表示模型越好。

2.6 第六步:可视化真实值与预测值的关系

我们通过散点图展示真实房价与预测房价的关系,理想情况下,散点应接近对角线。

# 可视化真实房价与预测房价
plt.scatter(y_test, y_pred)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k--', lw=2)  # 绘制对角线
plt.xlabel('实际房价', fontproperties=font)
plt.ylabel('预测房价', fontproperties=font)
plt.title('实际房价 vs 预测房价', fontproperties=font)
plt.show()

解释:

  • plt.scatter() 用于绘制散点图,横坐标为实际房价,纵坐标为预测房价。
  • plt.plot() 绘制一条对角线,表示理想情况下预测值应与实际值一致。
  • 如果散点接近对角线,说明模型的预测效果较好。

2.7 第七步:残差分析

残差是指预测值与实际值之间的差距。我们通过柱状图分析残差的分布,检查模型是否存在系统性偏差。

# 残差分析
residuals = y_test - y_pred
plt.hist(residuals, bins=20)
plt.xlabel('残差', fontproperties=font)
plt.ylabel('频数', fontproperties=font)
plt.title('残差分布', fontproperties=font)
plt.show()

解释:

  • residuals = y_test - y_pred 计算残差,即实际值与预测值的差。
  • plt.hist() 绘制残差的分布直方图,观察其分布是否接近正态分布。

2.5 第八步:特征相关性分析

通过热力图分析特征之间的相关性,以便了解哪些特征之间存在较强的线性关系。

# 特征相关性分析
corr_matrix = df.corr()
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('特征相关性热力图', fontproperties=font)
plt.show()

解释:

  • df.corr() 计算数据集中每个特征之间的相关性系数。
  • sns.heatmap() 绘制热力图,颜色越深表示相关性越强,帮助我们直观地理解特征之间的关系。

2.9 第九步:特征重要性分析

我们通过线性回归模型的系数来分析各个特征对房价预测的影响,并通过条形图展示特征的重要性。

# 特征重要性分析
coefficients = pd.Series(model.coef_, index=X.columns)
coefficients = coefficients.sort_values(ascending=False)
plt.figure(figsize=(10, 6))
coefficients.plot(kind='barh')
plt.title('特征重要性分析', fontproperties=font)
plt.xlabel('系数值', fontproperties=font)
plt.ylabel('特征', fontproperties=font)
plt.show()

解释:

  • model.coef_ 返回线性回归模型中每个特征的系数,系数越大表示该特征对预测结果的影响越大。
  • coefficients.plot(kind='barh') 绘制条形图,显示特征的重要性排序。

3.鸢尾花数据集的逻辑回归分析

3.1 步骤 1:导入所需的模块与包

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from matplotlib.font_manager import FontProperties

解释:

  • sklearn.datasets:用于加载鸢尾花数据集。
  • train_test_split:用于将数据集划分为训练集和测试集。
  • LogisticRegression:逻辑回归模型,用于多分类任务。
  • classification_reportconfusion_matrix:用于模型的评估,提供分类报告和混淆矩阵。
  • matplotlibseaborn:用于可视化,包括绘制特征关系图和混淆矩阵。
  • numpypandas:用于数据操作和处理。
  • FontProperties:用于设置图表中的中文字体。

3.2 步骤 2:加载鸢尾花数据集

# 设置中文字体
font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf')  # 修改为系统中中文字体的路径

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names

解释:

  • 加载数据集load_iris() 用于加载鸢尾花数据集。X 是特征矩阵,y 是标签。feature_namestarget_names 分别是特征和标签的名称。
  • 中文字体:通过 FontProperties 设置中文字体,确保可视化图表中的中文能够正常显示。

3.3 步骤 3:数据探索与可视化

# 数据探索
df = pd.DataFrame(X, columns=feature_names)
df['Species'] = y
print(df.head())

# 特征关系可视化
sns.pairplot(df, hue='Species')
plt.show()

解释:

  • 数据探索:将数据集转换为 DataFrame 格式,方便数据查看与操作。通过 print(df.head()) 查看数据的前几行。
  • 特征关系可视化:通过 sns.pairplot() 展示各特征之间的关系图,按照不同的鸢尾花种类(Species)进行颜色区分,有助于理解特征之间的分布和相关性。

3.4 步骤 4:数据集划分

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

解释:

  • 划分训练集和测试集:使用 train_test_split() 函数,将数据集按 70% 训练集和 30% 测试集划分。通过设置 random_state=42,确保划分结果是可重复的。

3.5 步骤 5:训练逻辑回归模型

# 训练逻辑回归模型
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

解释:

  • 模型创建与训练:创建逻辑回归模型对象 LogisticRegression() 并在训练集上进行训练。max_iter=200 设置了最大迭代次数为 200,以确保模型能够收敛。

3.6 步骤 6:预测与评估模型

# 预测并评估模型
y_pred = model.predict(X_test)

# 混淆矩阵和分类报告
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=target_names, yticklabels=target_names)
plt.xlabel('预测值', fontproperties=font)
plt.ylabel('实际值', fontproperties=font)
plt.title('混淆矩阵', fontproperties=font)
plt.show()

print(classification_report(y_test, y_pred, target_names=target_names))

解释:

  • 预测:使用训练好的模型在测试集上进行预测,得到预测标签 y_pred
  • 混淆矩阵confusion_matrix() 生成混淆矩阵,展示模型预测结果和实际值的匹配情况。通过 sns.heatmap() 绘制热图,直观展示混淆矩阵的结果。
  • 分类报告:通过 classification_report() 输出分类报告,包含精确率、召回率、F1 值等评估指标。

3.7 步骤 7:可视化逻辑回归决策边界

# 可视化逻辑回归决策边界(选取两个特征)
X_two_features = X[:, :2]  # 选择两个特征
X_train, X_test, y_train, y_test = train_test_split(X_two_features, y, test_size=0.3, random_state=42)
model.fit(X_train, y_train)

x_min, x_max = X_two_features[:, 0].min() - 1, X_two_features[:, 0].max() + 1
y_min, y_max = X_two_features[:, 1].min() - 1, X_two_features[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Paired)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('花萼长度(cm)', fontproperties=font)
plt.ylabel('花萼宽度(cm)', fontproperties=font)
plt.title('逻辑回归决策边界', fontproperties=font)
plt.show()

解释:

  • 选择两个特征:为了便于可视化,只选取前两个特征(花萼长度和花萼宽度)来绘制决策边界。
  • 绘制决策边界:使用 np.meshgrid() 创建网格,通过模型对网格上的每个点进行预测,使用 contourf() 绘制决策边界。通过 scatter() 绘制测试集中样本点的分布情况,进一步展示模型在二维平面上的分类效果。

3.8 结果分析

  1. 模型评估

    • 混淆矩阵展示了模型在三类鸢尾花上的分类效果。大部分样本分类正确,显示了模型的良好表现。
    • 分类报告提供了精确率、召回率、F1 值等关键指标,总体而言,模型在分类任务中的表现良好。
  2. 决策边界可视化

    • 决策边界清晰地将不同类别的鸢尾花分隔开来,展示了逻辑回归模型在二维特征空间中的分类效果。
    • 样本点大多数落在正确的分类区域中,进一步验证了模型的分类能力。

4.总体代码和结果

4.1波士顿

4.1.1 波士顿代码

# 导入必要的库
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties

# 设置中文字体
font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf')  # 替换为你的系统中的中文字体路径

# 加载本地数据
file_path = r'C:\Users\Administrator\Desktop\ML\机器学习\实验任务二\data\boston_housing.csv'
df = pd.read_csv(file_path)

# 数据探索
print(df.head())
print(df.describe())

# 特征与标签分离
X = df.drop('MEDV', axis=1)  # 特征
y = df['MEDV']  # 目标变量

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f'均方误差(MSE):{mse}')
print(f'R²值:{r2}')

# 图 5:可视化真实值与预测值的散点图
plt.figure(figsize=(8, 6))
plt.scatter(y_test, y_pred)
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'r--', lw=2)  # 理想预测线
plt.xlabel('实际房价', fontproperties=font)
plt.ylabel('预测房价', fontproperties=font)
plt.title('实际房价 vs 预测房价', fontproperties=font)
plt.show()

# 图 7:残差分布图
residuals = y_test - y_pred
plt.figure(figsize=(8, 6))
sns.histplot(residuals, kde=True, bins=30)
plt.axvline(residuals.mean(), color='red', linestyle='--', lw=2)
plt.xlabel('残差', fontproperties=font)
plt.ylabel('频数', fontproperties=font)
plt.title('残差分布', fontproperties=font)
plt.show()

# 图 10:特征相关性热力图
corr_matrix = df.corr()
plt.figure(figsize=(12, 10))
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.title('特征相关性热力图', fontproperties=font)
plt.show()

# 图 12:特征重要性条形图
coefficients = pd.Series(model.coef_, index=X.columns)
coefficients = coefficients.sort_values(ascending=False)

plt.figure(figsize=(10, 6))
coefficients.plot(kind='barh')
plt.title('特征重要性排序', fontproperties=font)
plt.xlabel('系数值', fontproperties=font)
plt.ylabel('特征', fontproperties=font)
plt.show()

4.1.2 波士顿代码结果

4.3.3 波士顿房价预测模型结果分析

1. 模型评估

  • 均方误差 (MSE):模型的MSE较小,表示预测值与实际房价之间的差距较小,模型在一定程度上准确预测了房价。
  • R²值:R²值表明模型能解释房价变化的主要部分,虽然表现良好,但仍存在部分未解释的变化。整体上,模型对数据的拟合度较好。

2. 可视化分析

  • 真实房价 vs 预测房价散点图:大多数数据点沿对角线分布,表明预测值与实际房价相对接近,模型具有一定的预测能力。但部分散点偏离较大,反映出模型在某些情况下存在预测误差。
  • 残差分布图:残差接近正态分布,说明预测误差较均匀,没有系统性偏差。残差分析显示,模型适用于该数据集。

3. 特征相关性分析

  • 相关性热力图:通过热力图可以看出不同特征之间的相关性。例如,房间数(RM) 与房价正相关,意味着房间数较多的房屋房价较高;而低收入人口比例(LSTAT) 与房价负相关,表示低收入比例越高,房价越低。

4. 特征重要性分析

  • NOX(一氧化氮浓度):对房价的负面影响最大,说明环境污染对房价有显著的负面影响。
  • RM(房间数):对房价的正面影响较大,房间数越多,房价越高。
  • LSTAT(低收入人口比例)DIS(与就业中心的距离):负面影响明显,说明社会经济因素和地理位置对房价有重要作用。

总体来看,模型能够较好地捕捉数据中的关键特征,并合理预测房价。

4.2 鸢尾花

4.2.1  鸢尾花代码

# 导入必要的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
from matplotlib.font_manager import FontProperties

# 设置中文字体
font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf')  # 修改为系统中中文字体的路径

# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
feature_names = iris.feature_names
target_names = iris.target_names

# 数据探索
df = pd.DataFrame(X, columns=feature_names)
df['Species'] = y
print(df.head())

# 特征关系可视化
sns.pairplot(df, hue='Species')
plt.show()

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 训练逻辑回归模型
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)

# 预测并评估模型
y_pred = model.predict(X_test)

# 混淆矩阵和分类报告
cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=target_names, yticklabels=target_names)
plt.xlabel('预测值', fontproperties=font)
plt.ylabel('实际值', fontproperties=font)
plt.title('混淆矩阵', fontproperties=font)
plt.show()

print(classification_report(y_test, y_pred, target_names=target_names))

# 可视化逻辑回归决策边界(选取两个特征)
X_two_features = X[:, :2]  # 选择两个特征
X_train, X_test, y_train, y_test = train_test_split(X_two_features, y, test_size=0.3, random_state=42)
model.fit(X_train, y_train)

x_min, x_max = X_two_features[:, 0].min() - 1, X_two_features[:, 0].max() + 1
y_min, y_max = X_two_features[:, 1].min() - 1, X_two_features[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.contourf(xx, yy, Z, alpha=0.3, cmap=plt.cm.Paired)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, edgecolors='k', cmap=plt.cm.Paired)
plt.xlabel('花萼长度(cm)', fontproperties=font)
plt.ylabel('花萼宽度(cm)', fontproperties=font)
plt.title('逻辑回归决策边界', fontproperties=font)
plt.show()

4.2.2 鸢尾花代码运行结果

4.2.3  鸢尾花模型结果分析

1. 模型评估

  • 准确率:通过分类报告可以看到模型的精确率、召回率和F1值。模型在三个类别上的表现较为均衡,整体分类准确率较高,表明逻辑回归在鸢尾花数据集上的表现良好。

2. 可视化分析

  • 混淆矩阵:混淆矩阵展示了模型的分类效果,大多数数据点被正确分类。少量误分类集中在某些相近类别之间(如Versicolor和Virginica),但总体误差较小。

3. 决策边界可视化

  • 决策边界:通过选取两个特征(花萼长度和花萼宽度)绘制的决策边界图展示了模型的分类能力。不同类别的数据点大部分落在各自的决策区域,说明逻辑回归能够较好地将不同类别的鸢尾花分开。

4. 特征关系分析

  • 特征关系图:通过 pairplot 展示了各个特征的两两关系,不同类别的鸢尾花在某些特征维度上区分明显(如花瓣长度和宽度),这帮助解释了模型能够有效分类的原因。

总体来看,逻辑回归模型在鸢尾花分类任务中表现优异,准确率高,决策边界清晰,分类效果较好。

举报

相关推荐

0 条评论