机器学习第3天:预测汽车的燃油效率

时间:2022-07-22
本文章向大家介绍机器学习第3天:预测汽车的燃油效率,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

文章目录
  • 一、具体实现步骤
    • 1.导入数据
    • 2.探究数据关系
    • 3.提取数据
    • 4.拆分数据
    • 5.训练模型
  • 二、可视化结果展示
    • 1.训练集
    • 2. 测试集
    • 3.计算模型得分
  • 三、多元线性回归
    • 1.训练模型
    • 2.计算得分
    • 3.可视化预测结果


写在前面: 这篇文章将通过线性回归模型预测汽车的燃油效率,文本所用到的数据以及代码可根据文末的联系方式向我索取

一、具体实现步骤

1.导入数据

import pandas as pd
import matplotlib.pyplot as plt

cars = pd.read_csv('../data/auto-mpg.data',names=["燃油效率","气缸","排量","马力","重量","加速度","型号年份","编号","原产地"],delim_whitespace = True)
cars.head()

2.探究数据关系

import numpy as np
import matplotlib.ticker as ticker
#删除horsepower值为'?'的行
cars = cars[cars.马力 != '?']
#设置中文显示
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']

#用散点图分别展示气缸、排量、重量、加速度与燃油效率的关系
fig = plt.figure(figsize = (13,10))
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['气缸'], cars['燃油效率'], alpha=0.5)
ax1.set_title('气缸')
ax2.scatter(cars['排量'], cars['燃油效率'], alpha=0.5)
ax2.set_title('排量')
ax3.scatter(cars['重量'], cars['燃油效率'], alpha=0.5)
ax3.set_title('重量')
ax4.scatter(cars['加速度'], cars['燃油效率'], alpha=0.5)
ax4.set_title('加速度')
ax5.scatter([ float(x) for x in cars['马力'].tolist()], cars['燃油效率'], alpha=0.5)
ax5.set_title('马力')

从上图中可以看出汽车的燃油效率与排量、重量、马力三者都存在一定的线性关系,其中汽车重量与燃油效率线性关系最为明显,下面我们取这二者来构建一元线性回归模型,看看是否能通过汽车重量来预测汽车的燃油效率。

3.提取数据

Y = cars['燃油效率']
X = cars['重量']
X = X.reshape(len(X),1)
Y = Y.reshape(len(Y),1)

4.拆分数据

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

5.训练模型

from sklearn.linear_model import LinearRegression
LR = LinearRegression()
LR = LR.fit(X_train, Y_train)

二、可视化结果展示

1.训练集

import matplotlib.pyplot as plt

plt.scatter(X_train, Y_train, color='red', alpha=0.3)
plt.scatter(X_train, LR.predict(X_train), color='green', alpha=0.3)
plt.xlabel("重量")
plt.ylabel("燃油效率")  
plt.title("这是训练数据")
plt.show()

2. 测试集

plt.scatter(X_test, Y_test, color='blue', alpha=0.3)
plt.scatter(X_train, LR.predict(X_train), color='green', alpha=0.3)
plt.xlabel("重量")
plt.ylabel("燃油效率")
plt.title("这是测试集数据")
plt.show()

3.计算模型得分

score = LR.score(cars[['重量']],cars['燃油效率'])
score
"""
得分为:0.6925641006507041
"""

通过汽车重量与燃油效率构建的一元线性回归模型的得分为0.69,上文我们得知汽车的燃油消耗率不仅和汽车重量是线性线性关系,也和汽车排量、马力存在着线性关系。如果采用多元线性回归模型预测效果是否更好呢?

三、多元线性回归

1.训练模型

#初始化模型
mul_LR_model = LinearRegression()
"""
拟合模型
多元线性回归模型的调用相对于一元线性回归,仅需要将X的传入由一个变为多个,即
由:LR_model.fit(cars['重量'], cars['燃油效率'])
变为:LR_model.fit(cars[['重量','马力','排量']], cars['燃油效率'])
"""
mul_LR_model.fit(cars[['重量','马力','排量']], cars['燃油效率'])
#预测
cars['燃料效率预测值'] = mul_LR_model.predict(cars[['重量','马力','排量']])
#显示
cars.head(5)

2.计算得分

mul_score = mul_LR_model.score(cars[['重量','马力','排量']], cars['燃油效率'])
mul_score
"""
mul_score得分为:0.7069554693444708
"""

多元线性回归模型的得分为0.71相对于一元线性回归模型(0.69分)得分更高,预测效果更好。

3.可视化预测结果

fig = plt.figure(figsize = (16,8))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax1.scatter(cars['重量'], cars['燃油效率'], c='blue', alpha=0.3)
ax1.scatter(cars['重量'], cars['燃料效率预测值'], c='red', alpha=0.3)
ax1.set_title('重量')
ax2.scatter([ float(x) for x in cars['马力'].tolist()], cars['燃油效率'], c='blue', alpha=0.3)
ax2.scatter([ float(x) for x in cars['马力'].tolist()], cars['燃料效率预测值'], c='red', alpha=0.3)
ax2.set_title('马力')
ax3.scatter(cars['排量'], cars['燃油效率'], c='blue', alpha=0.3)
ax3.scatter(cars['排量'], cars['燃料效率预测值'], c='red', alpha=0.3)
ax3.set_title('排量')
plt.show()