最新案例动态,请查阅【案例共创】线性回归 - 汽车行驶里程与油耗关系预测。小伙伴们快来领取华为开发者空间进行实操吧!
本案例由:梅科尔工作室提供
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 案例流程
说明:
登录开发者空间,启动 Notebook;
在 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. 导入必要的库
在 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. 模型参数
2. 可视化
3. 黑塞矩阵
评论