《深度学习》实操——利用机器学习进行回归分析
<div class='showpostmsg'><div>在进行深度学习一书阅读的过程中根据实例进行了关于线性回归分析的学习。其中在网络上有一项练习是预测燃油效率。其最终使用机器学习达成的目标是根据各种输入特征预测车辆的燃油效率。燃油效率通常以每加仑英里数(MPG)或每100公里升数(L/100km)来衡量,是消费者和环境关注的一个关键因素。准确预测燃油效率有助于汽车制造商设计更环保的汽车,并帮助消费者对油耗做出明智的选择。</div><div>其输入和输出本别为:</div>
<div><strong>车辆特征</strong><strong>:</strong></div>
<ul>
<li>分类特征:品牌、型号、燃料类型(汽油、柴油、电动、混合动力等)。).</li>
<li>数字特征:发动机排量、马力、重量、加速度、气缸数等。</li>
<li>时间特征(可能):制造年份,因为旧汽车可能有不同的效率标准。</li>
<li>可选功能:空气动力学特性、轮胎类型、变速器类型(手动、自动)。</li>
</ul>
<div><strong>输出</strong><strong>:</strong></div>
<ul>
<li>燃油效率:输出变量是连续的,代表车辆在特定条件下可以达到的每加仑英里数(MPG)或每100公里升数(L/100km)。</li>
</ul>
<div><strong>数据集结构</strong><strong>为</strong><strong>:</strong></div>
<div>该问题的数据集将以表格形式构建,其中每行代表一辆特定的车辆,列代表各种特征和目标变量:</div>
<ul>
<li>产地和型号名称:车辆的品牌或制造商(分类)。</li>
<li>车型年:车辆制造的年份(时间,数字)。</li>
<li>发动机排量:车辆发动机的大小,单位为升(数值)。</li>
<li>马力:车辆发动机的马力(数值)。</li>
<li>重量:车辆的重量,单位为磅或千克(数值)。</li>
<li>加速度:车辆从0加速到60英里/小时所用的时间,以秒为单位(数值)。</li>
<li>气缸数:车辆发动机中的总气缸数(数字)。<br />
<strong>标变量</strong><strong>:</strong></li>
<li>燃油效率:车辆达到的每加仑英里数(MPG)或每100公里升数(L/100km)(数值)。</li>
</ul>
<div><strong>方法和模型选择</strong><strong>:</strong></div>
<div><strong>线性回归</strong><strong>:</strong><br />
线性回归是用于预测建模的基本且广泛使用的统计技术。它假设输入要素和目标变量之间存在线性关系。在预测燃油效率的背景下,线性回归是一个合理的选择,因为它允许我们以一种直接的方式探索各种车辆特征和燃油效率之间的关系。线性回归计算效率高,可解释,并为理解数据提供了一个良好的起点。</div>
<div><strong>均方误差</strong><strong>(MSE)</strong><strong>作为评估指标</strong><strong>:</strong><br />
均方差是一种常用的度量标准,用于测量回归问题中预测值和实际值之间的平均平方差。在燃料效率预测的情况下:</div>
<div></div>
<h3>为什么线性回归和MSE适合这个问题:</h3>
<div><strong>线性关系假设</strong><strong>:</strong><br />
线性回归假设输入要素和目标变量之间存在线性关系。就燃油效率而言,许多因素,如发动机尺寸、重量和马力,都可能呈现线性关系。线性回归允许我们有效地捕捉这些关系。</div>
<div><strong>可解释性</strong><strong>:</strong><br />
线性回归为每个特征提供了可解释的系数,这有助于理解单个特征对燃料效率的影响。这种可解释性对研究人员和消费者都很有价值,因为它提供了对哪些车辆特性对燃油效率影响最大的见解。</div>
<div><strong>MSE</strong><strong>衡量预测准确性</strong><strong>:</strong><br />
MSE是一个相关的度量,因为它对较大的错误惩罚更重。在燃油效率方面,准确的预测至关重要。MSE确保模型对于与实际燃料效率值的较大偏差受到更多惩罚,与准确燃料效率预测的实际重要性一致。</div>
<div><strong>简单性和性能</strong><strong>:</strong><br />
线性回归易于实现,并可用作基线模型。尽管它很简单,但当特征和燃料效率之间的关系近似为线性时,它可以表现得很好。它还提供了一个比较复杂模型的基准。</div>
<h3>项目中使用的不同Python库:</h3>
<div>Pandas:该库有助于将数据框加载到2D数组格式中,并提供各种功能来在一次操作中高效地执行多项分析任务。</div>
<div>Matplotlib:该库用于创建数据的可视化表示和图形可视化。</div>
<div>Sklearn–该模块包含几个配有预实现功能的库,支持从数据预处理到模型开发和评估的各种任务。</div>
<h3>收集和探索数据:</h3>
<div>资料组:收集包含马力、重量、气缸等特征的数据集。,以及相应的燃料效率值。</div>
<div>这资料组可以从这里下载:https://archive.ics.uci.edu/dataset/9/auto+mpg</div>
<div>import pandas as pd</div>
<div>columns = ["mpg","cylinders","displacement","horsepower","weight","acceleration","model year","origin","car name"]</div>
<div>cars = pd.read_table("auto-mpg.data", delim_whitespace=True,names=columns)</div>
<div>print(cars.head(5))</div>
<div></div>
<h3>探索性数据分析:</h3>
<div>将汽车重量和加速度与燃油效率联系起来。</div>
<div>from matplotlib import pyplot as plt</div>
<div>fig = plt.figure()</div>
<div>ax1 = fig.add_subplot(2,1,1)</div>
<div>ax2 = fig.add_subplot(2,1,2)</div>
<div>cars.plot('weight','mpg',kind='scatter',ax=ax1)</div>
<div>cars.plot('acceleration','mpg',kind='scatter',ax=ax2)</div>
<div>plt.show()</div>
<div></div>
<div>上面的散点图显示了体重和mpg之间强烈的负线性关系以及加速度和mpg之间微弱的正关系。</div>
<h3>拟合回归模型:</h3>
<div>当然,让我们使用scikit-learn的线性回归来量化体重和mpg之间的关系。</div>
<div>from sklearn.linear_model import LinearRegression</div>
<div>lr = LinearRegression()</div>
<div>lr.fit(cars[["weight"]].values, cars["mpg"])</div>
<h3>做出预测:</h3>
<div>一旦用提供的数据训练了模型,就可以利用它进行预测。</div>
<div>虽然在用于机器学习训练的相同数据集上进行预测不是标准做法,但这样做对于评估模型在准确捕获数据方面的有效性是有价值的。</div>
<div>predictions=lr.predict(cars[["weight"]])</div>
<h3>绘制模型:</h3>
<div>我们准备将每辆车的实际燃油效率值与预测燃油效率一起可视化,以获得对模型性能的直观了解。</div>
<div>plt.scatter(cars['weight'],cars['mpg'],c="red")</div>
<div>plt.scatter(cars['weight'],predictions,c='blue')</div>
<div>plt.show()</div>
<div></div>
<h3>误差度量:</h3>
<div>为了获得对模型准确性的更精确的定量评估,我们必须计算其误差。</div>
<div>为此,我们将使用scikit-learn库中的均方误差函数。</div>
<div>from sklearn.metrics import mean_squared_error as mean_sq_err</div>
<div>mse=mean_sq_err(cars['mpg'],predictions)</div>
<div>print("Mean Squared Error =",mse)</div>
<div></div>
<div>rmse = mse ** 0.5</div>
<div>print("Root Mean Squared Error = ", rmse)</div>
<div></div>
<h3>数据清理:</h3>
<div>与重量列相反,马力列包含表示为“?”的缺失值。为了准备建模数据,我们将排除缺少这些值的行。</div>
<div>filtered_cars = cars != '?']</div>
<div>filtered_cars['horsepower'] = filtered_cars['horsepower'].astype('float')</div>
<h3>数据探索:</h3>
<div>清理数据后,我们可以绘制马力和mpg之间的相关性。</div>
<div>plt.scatter(cars['weight'],cars['mpg'],c="red")</div>
<div>plt.scatter(cars['weight'],predictions,c='blue')</div>
<div>plt.show()</div>
<div></div>
<div></div>
<h3>拟合模型:</h3>
<div>很难量化mpg和其他属性之间的关系。</div>
<div>lr = LinearRegression()</div>
<div>lr.fit(filtered_cars[['horsepower']],filtered_cars[['mpg']])</div>
<div>predictions = lr.predict(filtered_cars[['horsepower']])</div>
<h3>绘制预测图:</h3>
<div>让我们绘制预测值与实际值的对比图。</div>
<div>plt.scatter(filtered_cars['horsepower'],predictions,c='blue')</div>
<div>plt.scatter(filtered_cars['horsepower'],filtered_cars['mpg'],c='red')</div>
<div>plt.show()</div>
<div></div>
<h3>误差度量:</h3>
<div>这就是我们如何计算模型预测的误差。</div>
<div>mse = mean_sq_err(predictions, filtered_cars['mpg'])</div>
<div>rmse = mse ** 0.5</div>
<div>print("Mean Square Error =",mse)</div>
<div>print("Root Mean Square Error =",rmse)</div>
<div><strong></strong></div>
<div><strong>结论</strong><strong>:</strong></div>
<div>在分析了马力和重量的MSE和RMSE值后,很明显,与马力相比,重量与mpg的相关性更强。</div>
<div>因此,如果我们只需要为我们的模型选择一个输入,权重无疑应该是首选。</div>
<p><!--importdoc--></p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页:
[1]