news 2026/4/18 0:51:32

如何使用机器学习来指导设计决策和进行预测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用机器学习来指导设计决策和进行预测

原文:towardsdatascience.com/how-to-use-machine-learning-to-inform-design-decisions-and-make-predictions-838106acf639

将数据科学方法和模型应用于商业案例是大多数数据科学工作的最终目标。但跨越数据科学理论与应用之间的鸿沟具有挑战性,需要数据科学家理解业务领域、与该领域相关的独特数据,以及客户的需求和需求。

本文提供了一种将数据科学方法,如机器学习,应用于假设商业案例的方法。遵循本文学习如何:

  • 接收业务场景和数据。

  • 进行数据探索。

  • 应用机器学习分类模型。

  • 根据模型进行预测和推荐。

情景:

你是一家汽车公司的数据科学家。公司以制造运动型、快速汽车而闻名,正在为 1983 年款车型开发一款新车。设计团队有几种新的驱动配置可供选择,每种配置都对性能和燃油经济性有影响。

新型汽车设计需要接受环境测试机构的测试,这些机构评估汽车的燃油经济性,以每加仑英里数(MPG)为单位。消耗过多燃料的汽车将收取“油老虎税”,这是一种消费税。这个标签有负面影响,因为税收会转嫁给汽车购买者,使得汽车相对于没有税收的替代品不那么受欢迎。

公司领导层发布了一项新的、明确的要求,即所有未来的设计都应避免油老虎税的标签。

虽然美国环境保护署有自己的油老虎税规定[1],但对于本文中的情景,如果汽车在环境机构测试中未能达到 21 或更高的目标 MPG,则被视为“油老虎”。

作为公司的数据科学家,你的任务是帮助设计团队在花费时间和金钱构建不同原型进行实际测试之前,就他们的驱动配置做出明智的决定。幸运的是,公司有自己汽车以及竞争对手的历史数据,可以帮助你为设计团队提供见解。

代码和数据:

代码可在**链接的 GitHub 页面**上找到。使用的数据是 Auto MPG 数据集,可通过加州大学欧文分校机器学习图书馆使用,受 Creative Commons 4.0 许可证[2]保护。数据可通过以下代码在 Jupyter 中访问:

fromucimlrepoimportfetch_ucirepo# Fetch dataset:auto_mpg=fetch_ucirepo(id=9)# Data (as pandas dataframes):X=auto_mpg.data.features y=auto_mpg.data.targets# Make into pandas dataframe:mpg=pd.concat([X,y],axis=1)# Fill NaNs with mean:mpg=mpg.fillna(mpg.mean())mpg.head()

数据框有 398 行,8 列,看起来如下:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d1abf37b9b4e1290eb1133fd1baa953a.png

作者截图。

本文使用了以下 Python 库:

# Data handling:importpandasaspd# Data visualization:importmatplotlib.pyplotaspltimportseabornassns# Machine Learning:fromsklearn.model_selectionimporttrain_test_splitfromsklearn.ensembleimportRandomForestClassifierfromsklearn.metricsimportaccuracy_score,classification_report,confusion_matrix

1. 数据准备和探索性数据分析

让我们从一些数据准备和数据分析开始。要求是避免燃油消耗税,该税针对测试中得分低于 21 MPG 的汽车。这设置了一个分类建模问题,公司对设计提案是否被不利的燃油消耗税分类感兴趣。

让我们将mpg列改为二进制 0 或 1,其中 0 归因于所有在 21 MPG 或以上表现良好的汽车,1 归因于所有被标记为燃油消耗税的汽车。这将使我们能够快速看到哪些汽车未能满足要求。以下代码准备数据:

# Add the "Gas Guzzler" column based on the criteria:mpg['mpg']=mpg['mpg'].apply(lambdax:1ifx<21else0)mpg=mpg.rename(columns={'mpg':'gas_guzzler_tax'})mpg.head()

数据框现在看起来像这样,其中mpg列重命名为**_gas_guzzler_tax**:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/94f058c80f62e782e0f08a19030177dc.png

作者截图。

在“燃油消耗税”列上运行 value_counts()函数显示,有 227 辆车避免了税收,而 171 辆车则缴纳了税收。

对于探索性数据分析,让我们从一个相关矩阵开始。以下代码生成一个:

# Plot a correlation matrix:plt.figure(figsize=(8,6))sns.heatmap(mpg.corr(),annot=True,cmap='coolwarm',fmt=".2f",linewidths=.5)plt.title('Correlation Matrix')plt.show()

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5c6f93b39c176d0635668a0d3d0fdaa5.png

作者截图。

相关矩阵可视化了数据中各种特征之间的关系。例如,发动机排量与发动机汽缸数有强烈的正相关关系。这意味着数据倾向于同一方向移动;也就是说,排量更大的发动机也倾向于拥有更多的汽缸。

注意,然而,加速度马力呈负相关,这在两个特征的交叉处的深蓝色方框中可以看出。更多的马力导致 60 英里/小时的测量加速时间更短。

回想一下,燃油消耗税是用 1 或 0 编码的,其中 1 代表有燃油消耗税的汽车。相关矩阵显示四个特征(排量、汽缸数、马力重量)与被标记为燃油消耗者呈正相关。

还要注意,model_year和收到**_gas_guzzler_tax**是负相关的,这意味着新车型不太可能收到消费税——这可能意味着汽车设计随着时间的推移而改变,以有利于效率,或者可能是新技术影响了车辆效率。

我们可以开始看到特征之间存在冲突或权衡;虽然增加发动机功率似乎与成为燃油消耗者的可能性相关,但它也有一些可取的影响,例如提高加速性能。

Seaborn 对数图可以提供一些额外的见解[3]。让我们严格查看正相关的特征:排量、汽缸数、马力、重量燃油消耗税

# Create a pairplot:sns.pairplot(mpg[['displacement','cylinders','horsepower','weight','gas_guzzler_tax']],hue='gas_guzzler_tax')

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9e5cc69eaa6511286b650a30a0be7e13.png

作者截图。

在上面,我们看到符合我们目标的无油老虎税(用蓝色表示值为 0)的车辆往往马力较小,发动机较小,重量较轻。它们也倾向于拥有 4 缸发动机。

从对数据的简单视觉探索中,设计团队得出了一些初步见解:重量发动机排量马力气缸数都与油老虎税的收取呈正相关;避免油老虎税的汽车在这四个特征上往往具有较小的值。但是,这些特征的较高值可以从驾驶性能的角度为消费者带来积极的好处。

2. 应用机器学习技术

问题的结构和数据适合于监督机器学习技术,即分类建模。有各种机器学习算法可用于分类建模,以下链接的 Towards Data Science 文章概述了一些可用的选择 [4]。

让我们尝试在数据上运行一个随机森林分类模型,看看我们是否能更多地了解数据以及各种特征如何影响汽车是否被分类为油老虎。以下代码设置了一个随机森林分类器:

# Separate the target variable:y=mpg['gas_guzzler_tax']X=mpg.drop(columns='gas_guzzler_tax')# Split into train and test:X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_state=42)# Train the model:rf_model=RandomForestClassifier(random_state=42)rf_model.fit(X_train,y_train)

上述代码将目标变量 _gas_guzzlertax从数据框中分离出来,并使用 scikit learn 的 train_test_split()准备机器学习数据 [5]。然后设置 scikit learn 的 RandomForestClassifier()模型并将其拟合到训练数据 [6]。

以下代码通过 predict()函数测试拟合的模型,然后生成模型的准确度得分 [7]。

# Test the model:y_pred=rf_model.predict(X_test)# Return the accuracy score:rfAccuracy=accuracy_score(y_test,y_pred)print("Accuracy:",rfAccuracy)

对于这个模型,**初始准确率为 93.75%。**我们可以通过混淆矩阵和分类报告等技术进一步评估分类模型的性能:

# Print classification report:print('Classification Report:n',classification_report(y_test,y_pred))# Generate the plot:plt.figure(figsize=(8,6))sns.heatmap(confusion_matrix(y_test,y_pred),annot=True,cbar=False,fmt='d',xticklabels=['Predicted 0','Predicted 1'],yticklabels=['Actual 0','Actual 1'])plt.title('Confusion Matrix')plt.show()

结果如下:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/33fd8214a875f7847530eb86d5a95c2d.png

作者截图。

混淆矩阵有助于评估模型性能。虽然作为数据科学家,你的最终产品交付可能不会包括模型准确度和混淆矩阵等细节,但确保模型用于提供洞察力的可信度和稳健性是一个重要的步骤。

从精确度、召回率和准确度得分以及混淆矩阵来看,该模型在识别真正的负例(预测为 0,实际为 0)和识别真正的正例(预测为 1,实际为 1)方面表现良好。对于对混淆矩阵的深入了解,请参考以下链接的 Towards Data Science 文章 [8]。

2.1. 特征重要性

在构建和拟合随机森林模型后,我们现在可以提取特征重要性。这样做使用 sklearn 库中的 featureimportances非常简单 [9]:

# Get the feature importances:rf_feature_importance=rf_model.feature_importances_ rf_feature_importance=pd.DataFrame({'Feature':X.columns,'Importance':rf_feature_importance})rf_feature_importance=rf_feature_importance.sort_values(by='Importance',ascending=False)

这给出了以下代码可可视化的表格:

# Plot feature importance:# Set plot size:plt.figure(figsize=(10,6))# Feature importance:sns.barplot(data=rf_feature_importance,x='Importance',y='Feature',palette='mako')# Set labels:plt.title('Feature Importance - Random Forest',fontsize=18,y=1.03)plt.show()

图表看起来是这样的:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a219c3dbab09f8324a22b1fabf39ca9.png

作者截图。

这意味着什么呢?特征重要性有助于解释哪些特征,或列,对模型预测目标变量(gas_guzzler_tax)的能力影响最大。

在这种情况下,发动机的位移是我们模型预测汽车是否为油老虎(Gas Guzzler)能力中最具影响力的特征。像车型年份加速度这样的特征对我们随机森林分类器预测车辆是否为油老虎或不是油老虎的能力来说不太重要。

通过我们的探索性数据分析,我们通过相关矩阵发现,位移、汽缸数、重量马力都与被分类为油老虎有强烈的正相关。在我们的随机森林分类器中,这四个特征是模型预测汽车是否为油老虎或不是油老虎能力中最重要的。这加强了一些关于影响汽车最终消费税状态的初步见解。

注意,与相关矩阵不同,特征重要性并不能告诉我们特征对预测的影响方向(例如:如果发动机位移增加或减少,预测会发生什么变化?)。像 SHAP 这样的模型解释工具可能提供更多关于特征如何影响特定预测的见解;更多关于 SHAP 值的信息,请参阅这篇 Towards Data Science 文章 [10]。

2.2. 预测

在探索数据和构建模型的过程中,设计团队将他们的提案带给你。他们提出了 1983 年车型的四种选择,目的是推出一款符合公司形象的具有运动驾驶体验的汽车。鉴于公司的经验,设计团队在从设计选项和变速器齿轮中数学估计发动机马力加速度方面非常熟练。然而,设计必须满足公司避免油老虎消费税的新要求,这对设计团队来说是一个未知数。设计提案如下:

# Create car design dataframe:car_designs=pd.DataFrame({'displacement':[305,240,240,180],'cylinders':[8,6,6,4],'horsepower':[225,200,190,170],'weight':[3600,3440,3350,3250],'acceleration':[7.1,7.3,7.6,7.8],'model_year':[83,83,83,83],'origin':[1,1,1,1]})car_designs

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/9f1e62d3feb584ffc275b7e35a080138.png

作者截图。

基于探索性数据分析和训练好的随机森林,我们可以开始对哪些汽车设计更有可能获得油老虎税做一些假设。但与其假设,不如利用训练好的随机森林分类器进行一些预测:

# Make predictions on the new data points:predictions=rf_model.predict(car_designs)print(f'Predicted Class:{predictions}')

输出结果为:

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8a2b050c38dc0711c3346b934c2c05d1.png

作者截图。

模型预测 car_designs 数据框中的前两个设计(行)将获得油老虎税,而最后两个则不会。

回想一下,汽车公司以制造运动型、高性能汽车而闻名。设计团队真的希望达到 7.3 秒或更好的加速目标,所以他们建议用先进的材料重新设计第二个设计,以略微减轻重量。这将也会略微提高加速估计。幸运的是,随机森林模型可以通过以下代码接受用户创建的输入并预测车辆是否将成为油老虎:

# Get user input for each feature:displacement=int(input("Enter displacement: "))cylinders=int(input("Enter cylinders: "))horsepower=int(input("Enter horsepower: "))weight=int(input("Enter weight: "))acceleration=float(input("Enter acceleration: "))model_year=int(input("Enter model year: "))origin=int(input("Enter origin: "))# Create new data point for prediction:car_design=pd.DataFrame({'displacement':[displacement],'cylinders':[cylinders],'horsepower':[horsepower],'weight':[weight],'acceleration':[acceleration],'model_year':[model_year],'origin':[origin]})# Make a prediction:prediction=rf_model.predict(car_design)print(f'Prediction:{prediction}')

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/995548852a48399d504a637e6a11d3b1.png

作者截图。

我们现在看到,第二行设计,重量较轻,既符合避免油老虎税的指导原则,又提供了强劲的加速性能。

3. 分析结果和下一步行动

以下见解现在对设计团队可用,这些见解得到了数据分析和机器学习建模的支持:

  • 发动机排量、发动机气缸、车辆重量马力与车辆成为油老虎呈正相关。

  • 增加这些四个特征中的一些或全部的值,会增加车辆成为油老虎的可能性。

  • 机器学习强化了这四个特征的重要性,因为它们是最能影响模型预测车辆是否为油老虎的特征。

  • 在四个候选设计中,机器学习建模预测其中两个将无法满足公司的要求。

  • 将第二个设计修改为更具侵略性的重量目标,导致模型预测汽车将满足公司的要求。

这些见解对设计团队来说很好,但我们如何改进数据科学方法?

  • 特征选择:

注意,在这个例子中,我们将所有数据特征都通过了模型。然而,特征重要性和相关矩阵表明我们可能有一些机会来减少特征空间。

例如,产地车型年份对随机森林分类器的重要性都很低。可以选择保留产地,因为它可能意味着不同的地理设计考虑和监管要求,从而对设计产生影响。但公司位置也超出了设计团队的控制范围。

车型年份特征类似,它也超出了控制范围。然而,较新的车型年份可能意味着更现代的技术和选项,或者变化的法规和消费者口味。例如,考虑车辆重量作为年份的函数如何变化,表明车型年份对汽车的特征数据有影响:

# Set plot size:plt.figure(figsize=(10,6))# Create scatter plot:sns.boxplot(data=mpg,x="model_year",y="weight",palette='mako')# Set labels:plt.title('Year versus Weight',fontsize=18,y=1.03)plt.xlabel('Year',fontsize=13)plt.ylabel('Weight',fontsize=13)plt.show()

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b05a87bf792fa3e2096799bbb103fdf6.png

作者截图。

无论决定保留哪些特征,支持包含或丢弃特征的决定的分析必须是可辩护的且方法上可信的。

  • 附加特征和数据:

有许多其他影响决策空间但未包含在数据集中的特征,主要是因为这个数据集,作为一个学习用的玩具或实验数据集,不包括它们。但在现实世界场景中,设计团队可以计算或提供其他数据特征,如阻力系数估计或估计的车辆前面积。这些都会通过空气中的车辆运动影响燃油效率。

对于企业来说,定价信息也很重要。回想一下,在我们的场景中,第二个设计方案在收到一个较轻的修订后才失败。也许这种重量减轻是通过更昂贵的新型材料实现的。虽然新的设计满足了核心的油老虎避免要求,但有没有价格阈值要求?

最后,请记住,UCI 存储库中的 mpg 数据集是一个低维数据集,主要用于学习。理想情况下,现实世界的数据将具有更高的维度和更多的观测值。

  • 替代和高级建模技术:

此示例仅使用了随机森林分类器,但还有其他机器学习算法可以用于分类任务。可以通过集成方法使用多个模型来更深入地理解特征。

可以使用随机森林回归器或其他回归建模技术来解决这个问题,预测设计方案的 MPG 连续值,或者将问题作为一个二进制 1 或 0 的分类模型来处理。

此示例使用了一个没有超参数调整或平衡调整的随机森林分类器。在示例数据中,目标变量有 227 个 0 的实例和 171 个 1 的实例,表示轻微的不平衡。更大的数据集可能具有更大的目标变量不平衡,需要技术来解决此问题。此外,在分析模型性能后,对于更大的现实世界数据集,可能需要进行超参数调整。

  • 生产管道和应用程序:

本文提供了一个基于 Jupyter 笔记本的示例。一个针对商业用例的完整解决方案可能包括一个在分析平台上的生产管道,该平台具有调度器,可以自动从数据库或用户输入中拉取新数据,在新的数据上运行训练好的模型,并通过基于网络的界面向设计团队提供预测。

3. 结论:

本文的目标是展示如何将一个假设的商业问题与数据科学技术相结合,以提供洞察。通过应用探索性数据分析和机器学习,描述性甚至预测性分析成为辅助业务流程的可能性。请随意下载、使用和修改可在**链接的 GitHub 页面**上找到的代码 – 感谢您的阅读!

参考文献:

[1] 环境保护局,油老虎税 | 美国环保署 (2024)。

[2] UCI 机器学习仓库, Auto MPG (1993).

[3] Seaborn, seaborn.pairplot (2024).

[4] D. Gong, 分类的六大机器学习算法 (2022), Towards Data Science.

[5] Scikit learn, train_test_split (2024).

[6] Scikit learn, RandomForestClassifier (2024).

[7] Scikit learn, RandomForestClassifier (2024).

[8] I. Chelliah, 混淆矩阵 - 清晰解释 (2020), Towards Data Science.

[9] Scikit learn, 使用森林树进行特征重要性分析 (2024).

[10] V. Trevisan, 使用 SHAP 值解释你的机器学习模型是如何工作的 (2022), Towards Data Science.

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 23:58:06

PyTorch-CUDA-v2.7镜像中匿名化处理用户输入数据的方法

PyTorch-CUDA-v2.7镜像中匿名化处理用户输入数据的方法 在当今深度学习项目频繁部署于云端共享环境的背景下&#xff0c;一个看似不起眼的问题正逐渐浮现&#xff1a;当研究人员通过 Jupyter Notebook 上传患者病历文本、金融客服记录或用户聊天日志进行模型训练时&#xff0c;…

作者头像 李华
网站建设 2026/4/17 1:42:49

Jupyter Notebook定时自动保存防止数据丢失

Jupyter Notebook 定时自动保存&#xff1a;构建稳定高效的深度学习开发环境 在现代 AI 实验中&#xff0c;一个常见的场景是&#xff1a;你正在训练一个复杂的神经网络模型&#xff0c;已经跑了三个多小时&#xff0c;终于看到损失曲线开始收敛。这时&#xff0c;浏览器标签页…

作者头像 李华
网站建设 2026/4/11 13:19:01

PyTorch学习率调整策略:Cosine、Step等调度器使用

PyTorch学习率调整策略&#xff1a;Cosine、Step等调度器使用 在深度学习的实践中&#xff0c;模型能否高效收敛、最终达到理想性能&#xff0c;往往不只取决于网络结构或数据质量&#xff0c;一个常被低估但至关重要的因素是——学习率的动态管理。你有没有遇到过这样的情况&…

作者头像 李华
网站建设 2026/4/16 14:14:28

Proteus信号发生器与频谱分析工具操作指南

用Proteus玩转信号发生器与频谱分析&#xff1a;从入门到实战你有没有遇到过这种情况&#xff1f;设计了一个滤波电路&#xff0c;仿真跑通了&#xff0c;结果一上板子就“水土不服”——频率响应不对、噪声满天飞、谐波莫名其妙冒出来。问题出在哪&#xff1f;可能不是你的电路…

作者头像 李华
网站建设 2026/3/27 19:35:01

Rainmeter 时钟皮肤:带 Bing 搜索功能

[Rainmeter] ; 全局设置&#xff08;仅允许一个 [Rainmeter] 节&#xff09; Update1000 AccurateText1 DynamicWindowSize1 BackgroundMode2 SolidColor0,0,0,1 [Metadata] NameMyClock with Bing AuthorYourName Description时钟&#xff08;时间/中英星期/日期&#xff09;…

作者头像 李华
网站建设 2026/4/16 17:16:18

Git stash暂存未提交更改以便切换PyTorch开发分支

Git stash暂存未提交更改以便切换PyTorch开发分支 在深度学习项目开发中&#xff0c;尤其是使用 PyTorch 搭建模型时&#xff0c;你可能正调试一个复杂的 UNet 变体&#xff0c;刚写完注意力模块的代码&#xff0c;还没来得及测试完整功能。这时&#xff0c;团队通知你在主干分…

作者头像 李华