写点什么

【案例共创】线性回归 - 汽车行驶里程与油耗关系预测

  • 2025-12-18
    贵州
  • 本文字数:3026 字

    阅读完需:约 10 分钟

【案例共创】线性回归 - 汽车行驶里程与油耗关系预测

最新案例动态,请查阅【案例共创】线性回归 - 汽车行驶里程与油耗关系预测。小伙伴们快来领取华为开发者空间进行实操吧!


本案例由:梅科尔工作室提供

1 概述

1.1 案例介绍

在机器学习领域,线性回归就是使用一个线性函数(多项式回归可以是曲线)去拟合给定的训练集,测试时,对输入的 x 值,返回这个线性函数的 y 值。最终目标是找到 y=Θ0 + Θ1x1 + Θ2x2 + …… + Θnxn 函数式中的Θ0、Θ1、Θ2、……、Θn 值。


本案例通过在开发者空间 Notebook 中,基于 numpy 并使用 MindSpore 框架进行训练神经网络,输出汽车行驶里程和油耗之间的关系预测。


通过本案例可以对线性回归进行学习,同时了解 MindSpore 框架的使用。

1.2 适用对象

  • 企业

  • 个人开发者

  • 高校学生

1.3 案例时间

本案例总时长预计 30 分钟。

1.4 案例流程


说明:


  1. 登录开发者空间,启动 Notebook;

  2. 在 Notebook 中编写代码运行调试。

1.5 资源总览

本案例预计花费总计 0 元。


2 资源与开发环境准备

2.1 启动 Notebook

参考“DeepSeek模型API调用及参数调试(开发者空间Notebook版)”案例的第 2.2 章节启动 Notebook。

2.2 安装依赖库

在 Notebook 的新执行框中输入如下代码并运行,安装所有依赖库。


!pip install numpy
!pip install mindspore
!pip install pandas
!pip install matplotlib
复制代码

3 汽车行驶里程与油耗关系预测

1. 导入必要的库


  • numpy (np):用于数值计算。

  • mindspore:用于构建和训练神经网络。

  • 张量操作:提供张量数据结构和相关的操作。

  • 神经网络构建:用于定义模型、损失函数和优化器。

  • 自动微分:自动计算梯度,用于模型的训练。

  • 数据转换:将 numpy 数组转换为 Tensor,以便在 mindspore 框架中进行计算。

  • 模型输入和输出:作为模型的输入和输出数据类型。


在 Notebook 的新执行框中输入如下代码并运行,导入所有使用到的库。


import numpy as npimport mindspore as msfrom mindspore import Tensorimport pandas as pdimport matplotlib.pyplot as pltimport warningswarnings.filterwarnings("ignore", category=UserWarning)
复制代码


2. 数据加载与预处理数据准备:将如下链接数据集下载,并通过 notebook 上传。https://dtse-mirrors.obs.cn-north-4.myhuaweicloud.com/case/0038/auto-mpg.data


下载到本地的数据



点击 Notebook 左上角上传按钮,选中下载的数据集,进行上传。



数据上传成功:



在 Notebook 的新执行框中输入如下代码并运行:


# 加载数据path = 'auto-mpg.data'columns = ["mpg", "cylinders", "displacement", "horsepower", "weight","acceleration", "model year", "origin", "car name"]cars = pd.read_csv(path, delim_whitespace=True, names=columns)# 数据预处理cars = cars[cars.horsepower != '?']cars['horsepower'] = cars['horsepower'].astype(float)
复制代码


数据准备:▪ 这段代码使用 pandas 加载汽车数据集,并对数据进行初步处理。由于数据中


的“horsepower”列包含字符串“?”,代码过滤掉这些行,并将“horsepower”列转换


为浮点数类型。这一步是必要的,因为机器学习模型需要数值型数据进行训练。


3. 数据可视化


这里使用 matplotlib 打造了一个可视化界面,展示了不同特性(气缸数、排量、重量、加速度、马力)与燃油效率(mpg)之间的关系。这一步有助于理解数据特性以及各特性与目标变量之间的关系。


在 Notebook 的新执行框中输入如下代码并运行:


#可视化数据fig = plt.figure(figsize=(13, 20))ax1 = fig.add_subplot(321)ax2 = fig.add_subplot(322)ax3 = fig.add_subplot(323)ax4 = fig.add_subplot(324)ax5 = fig.add_subplot(325)ax1.scatter(cars['cylinders'], cars['mpg'], alpha=0.5)ax1.set_title('cylinders')ax2.scatter(cars['displacement'], cars['mpg'], alpha=0.5)ax2.set_title('displacement')ax3.scatter(cars['weight'], cars['mpg'], alpha=0.5)ax3.set_title('weight')ax4.scatter(cars['acceleration'], cars['mpg'], alpha=0.5)ax4.set_title('acceleration')ax5.scatter(cars['horsepower'], cars['mpg'], alpha=0.5)ax5.set_title('horsepower')plt.show()
复制代码




4. 准备数据集


这个模块将“weight”选为特征变量,“mpg”作为目标变量。然后使用 train_test_split 函数将数据划分为训练集和测试集,测试集占总数据的 20%。这是为了在训练模型后有一个独立的数据集来评估模型的性能。


在 Notebook 的新执行框中输入如下代码并运行:


# 准备数据Y = cars['mpg']X = cars[['weight']]# 划分数据集from sklearn.model_selection import train_test_splitX_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2,random_state=0)
复制代码


5. 数据转换为 MindSpore 张量


将数据转换为 MindSpore 张量,以便在 MindSpore 框架中使用这些数据进行模型训练。


在 Notebook 的新执行框中输入如下代码并运行:


# 转换为 MindSpore 张量X_train_tensor = Tensor(X_train.values, dtype=ms.float32)Y_train_tensor = Tensor(Y_train.values, dtype=ms.float32)X_test_tensor = Tensor(X_test.values, dtype=ms.float32)Y_test_tensor = Tensor(Y_test.values, dtype=ms.float32)
复制代码


6. 模型训练与评估


将数据从 MindSpore 张量转换回 numpy 数组,用于训练 scikit-learn 的线性回归模型。输出模型的权重和偏置,并计算模型在测试集上的得分,以评估模型的性能。


在 Notebook 的新执行框中输入如下代码并运行:


# 转换回 numpy 数组用于 scikit-learn 模型X_train = X_train.values.reshape(-1, 1)X_test = X_test.values.reshape(-1, 1)Y_train = Y_train.valuesY_test = Y_test.values# 构建和训练线性回归模型from sklearn.linear_model import LinearRegressionlr = LinearRegression()lr.fit(X_train, Y_train)# 输出模型参数print(f"Weight: {lr.coef_[0]}, Bias: {lr.intercept_}")# 评估模型print(f"Score: {lr.score(X_test, Y_test)}")
复制代码



7. 可视化结果


绘制了训练集和测试集的预测结果与真实值的散点图,帮助直观地评估模型的预测性能。


在 Notebook 的新执行框中输入如下代码并运行:


# 可视化结果plt.scatter(X_train, Y_train, color='red', alpha=0.3, label='Train Data')plt.scatter(X_train, lr.predict(X_train), color='green', alpha=0.3,label='Train Predictions')plt.xlabel('Weight')plt.ylabel('MPG')plt.title('Train Data vs Predictions')plt.legend()plt.show()plt.scatter(X_test, Y_test, color='blue', alpha=0.3, label='Test Data')plt.scatter(X_test, lr.predict(X_test), color='green', alpha=0.3, label='Test Predictions')plt.xlabel('Weight')plt.ylabel('MPG')plt.title('Test Data vs Predictions')plt.legend()plt.show()
复制代码


运行结果:



8. 计算黑塞矩阵


黑塞矩阵计算:将 X_train 转换为包含偏置项的 numpy 数组,然后计算其转置与⾃⾝的点积,得到黑塞矩阵。


在 Notebook 的新执行框中输入如下代码并运行:


# 计算⿊塞矩阵X_matrix = X_train.copy()X_matrix = np.hstack((X_matrix, np.ones((X_matrix.shape[0], 1)))) # 添加偏置项Hessian = np.dot(X_matrix.T, X_matrix)
print(f"黑塞矩阵:\n{Hessian}")
复制代码


4 总结

根据上述训练预测结果,总结如下:


1. 模型参数


  • 训练完成后,模型会输出两个参数:Bias(偏置项)和 Weight(里程数的权重)。


2. 可视化


  • 可视化预测结果。


3. 黑塞矩阵


  • 计算了黑塞矩阵,用于衡量损失函数在参数空间中的曲率,反映了模型参数的敏感性和优化的稳定性。


用户头像

提供全面深入的云计算技术干货 2020-07-14 加入

生于云,长于云,让开发者成为决定性力量

评论

发布
暂无评论
【案例共创】线性回归 - 汽车行驶里程与油耗关系预测_人工智能_华为云开发者联盟_InfoQ写作社区