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

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

时间:2024-09-05 23:54:27浏览次数:8  
标签:plt 特征 回归 font train test 鸢尾花 波士顿 模型

目录

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 波士顿代码结果

   CRIM    ZN  INDUS  CHAS    NOX     RM   AGE     DIS  RAD  TAX  PTRATIO  \
0  0.00632  18.0   2.31     0  0.538  6.575  65.2  4.0900    1  296     15.3   
1  0.02731   0.0   7.07     0  0.469  6.421  78.9  4.9671    2  242     17.8   
2  0.02729   0.0   7.07     0  0.469  7.185  61.1  4.9671    2  242     17.8   
3  0.03237   0.0   2.18     0  0.458  6.998  45.8  6.0622    3  222     18.7   
4  0.06905   0.0   2.18     0  0.458  7.147  54.2  6.0622    3  222     18.7   

        B  LSTAT  MEDV  
0  396.90   4.98  24.0  
1  396.90   9.14  21.6  
2  392.83   4.03  34.7  
3  394.63   2.94  33.4  
4  396.90   5.33  36.2  
             CRIM          ZN       INDUS        CHAS         NOX          RM  \
count  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   
mean     3.613524   11.363636   11.136779    0.069170    0.554695    6.284634   
std      8.601545   23.322453    6.860353    0.253994    0.115878    0.702617   
min      0.006320    0.000000    0.460000    0.000000    0.385000    3.561000   
25%      0.082045    0.000000    5.190000    0.000000    0.449000    5.885500   
50%      0.256510    0.000000    9.690000    0.000000    0.538000    6.208500   
75%      3.677083   12.500000   18.100000    0.000000    0.624000    6.623500   
max     88.976200  100.000000   27.740000    1.000000    0.871000    8.780000   

              AGE         DIS         RAD         TAX     PTRATIO           B  \
count  506.000000  506.000000  506.000000  506.000000  506.000000  506.000000   
mean    68.574901    3.795043    9.549407  408.237154   18.455534  356.674032   
std     28.148861    2.105710    8.707259  168.537116    2.164946   91.294864   
min      2.900000    1.129600    1.000000  187.000000   12.600000    0.320000   
25%     45.025000    2.100175    4.000000  279.000000   17.400000  375.377500   
50%     77.500000    3.207450    5.000000  330.000000   19.050000  391.440000   
75%     94.075000    5.188425   24.000000  666.000000   20.200000  396.225000   
max    100.000000   12.126500   24.000000  711.000000   22.000000  396.900000   

            LSTAT        MEDV  
count  506.000000  506.000000  
mean    12.653063   22.532806  
std      7.141062    9.197104  
min      1.730000    5.000000  
25%      6.950000   17.025000  
50%     11.360000   21.200000  
75%     16.955000   25.000000  
max     37.970000   50.000000  
均方误差(MSE):24.29111947497348
R²值:0.6687594935356325

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 鸢尾花代码运行结果

 sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)  \
0                5.1               3.5                1.4               0.2   
1                4.9               3.0                1.4               0.2   
2                4.7               3.2                1.3               0.2   
3                4.6               3.1                1.5               0.2   
4                5.0               3.6                1.4               0.2   

   Species  
0        0  
1        0  
2        0  
3        0  
4        0  

 precision    recall  f1-score   support

      setosa       1.00      1.00      1.00        19
  versicolor       1.00      1.00      1.00        13
   virginica       1.00      1.00      1.00        13

    accuracy                           1.00        45
   macro avg       1.00      1.00      1.00        45
weighted avg       1.00      1.00      1.00        45

4.2.3  鸢尾花模型结果分析

1. 模型评估

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

2. 可视化分析

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

3. 决策边界可视化

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

4. 特征关系分析

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

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

标签:plt,特征,回归,font,train,test,鸢尾花,波士顿,模型
From: https://blog.csdn.net/FHY26828/article/details/141942762

相关文章

  • 逻辑回归模型
      核心:线性回归+sigmoid映射。一、概述  逻辑回归模型(LogisticRegression,LR),由名称上来看,似乎是一个专门用于解决回归问题的模型,事实上,该模型更多地用于解决分类问题,尤其是二分类问题。这并不矛盾,因为逻辑回归直接输出的是一个连续值,我们将其按值的大小进行切分,不足一定范......
  • 回归、分类、生成三大任务实现原理
    在机器学习与深度学习相关项目需求实现中,通常可以细分成很多个回归、分类、生成任务的实现,由这些任务组成一个完整的任务。下面分别介绍这三种任务回归:什么是回归?找到一个函数,通过输入的特征值X,输出一个连续的数值Y。回归任务的目标是预测连续值的输出。例如,预测房价、温度......
  • 回归の一些想法
    现在是2024.9.520:00我坐在离BJUT2公里外的一家星巴克里简短的写下这些文字距离第一次接触算法竞赛已经过去了三年“我并没有如此强大闪耀一次就足够”感谢:感谢我的父母家人对我无限的支持感谢GG带我进入OI的世界感谢KHIN、wind_whisper两位神仙给予我莫大的帮助......
  • ELASTIC意外回归开源背后的原因是什么?
    随着Elastic改变Elasticsearch和Kibana的许可证,其转变似乎更像是一种商业策略,而不是拥抱公共资源。译自What'sBehindElastic'sUnexpectedReturntoOpenSource?,作者StevenJVaughan-Nichols。你说什么?在Elastic将Elasticsearch的开源Apache许可证改为半专有的S......
  • 数据分析:R语言计算XGBoost线性回归模型的SHAP值
    介绍SHAP(SHapleyAdditiveexPlanations)值是一种解释机器学习模型预测的方法。它基于博弈论中的Shapley值概念,用于解释任何机器学习模型的输出。为什么机器学习模型需要用到SHAP值:解释性:机器学习模型,尤其是复杂的模型如深度学习,往往被视为“黑箱”。SHAP值提供了一种方......
  • 回归树模型 0基础小白也能懂(附代码)
    回归树模型0基础小白也能懂(附代码)啥是回归树模型大家在前面的部分学习到了使用决策树进行分类,实际决策树也可以用作回归任务,我们叫作回归树。而回归树的结构还是树形结构,但是属性选择与生长方式和分类的决策树有不同。要讲回归树,我们一定会提到CART树,CART树全称Classification......
  • 前波士顿咨询Platinion董事总经理陈果加入望繁信科技
    “很荣幸邀请果总加盟望繁信科技!作为中国互联网可以查到的写作流程挖掘介绍文章第一人,他的先驱性工作为流程挖掘在中国的知识普及和应用创新做出了重要贡献!更难能可贵的,是我们和果总在价值观层面高度契合!我们非常欢迎他加入,他深厚的行业影响力、洞察力和经验将对公司加速成长起到极......
  • NumPyro入门API和开发人员参考 pyro分布推理效果处理程序贡献代码更改日志入门教程使
    NumPyro文档¶NumPyro入门API和开发人员参考烟火元素分布推理效果处理程序贡献代码更改日志入门教程使用NumPyro的贝叶斯回归贝叶斯分层线性回归例如:棒球击球率示例:变型自动编码器例子:尼尔的漏斗例子:随机波动例如:亚麻和俳句可变推断参数化NumPyro模型的自动绘制不良后几何及......
  • 【机器学习】任务二:波士顿房价的数据与鸢尾花数据分析及可视化
    目录1.实验知识准备1.1NumPy1.2Matplotlib库1.3scikit-learn库:1.4 TensorFlow1.5 Keras2.波士顿房价的数据分析及可视化2.1波士顿房价的数据分析2.1.1步骤一:导入所需的模块和包2.1.2步骤二:从Keras库中加载波士顿房价数据集2.1.3步骤三:加载本地CSV数据......
  • [全网独家原创]FVIM-XGBoost多输出回归 基于四向量优化算法优化XGBoost多输出回归多输
    [全网独家原创]FVIM-XGBoost多输出回归基于四向量优化算法优化XGBoost多输出回归Matlab代码(多输入多输出)每个输出都有以下线性拟合图等四张图!!!具体看图,独家图像!!!程序已经调试好,替换数据集根据输出个数修改outdim值即可运行!!!数据格式为excel!(如下)需要其他算法的都可以定制......