本文通过预测汽车一加仑油能跑多少公里来熟悉python中线性回归模型。数据集可在该网址进行下载:http://archive.ics.uci.edu/ml/datasets/Auto+MPG,数据是网页版的,先复制到文本文档中再保存成data格式。
一、读入数据集
import pandas as pd
import matplotlib.pyplot as plt
columns = ['mpg','cylinders','displacement','horsepower','weight','acceleration',
'model year','origin','car name']
#mpg(miles per gallon)为每加仑可以行驶多少公里,一加仑约等于3.79升
#我们的数据不是csv格式的,所以这里用read_table,第二个参数指数据是不是以空格符间隔的,第三个参数加上每列的特征名
data = pd.read_table('auto_mpg.data',delim_whitespace=True,names=columns)
data.head()
读入的数据如下所示:
简单分析一下车重‘weight’和加速度‘acceleration’分别对油耗‘mpg’的影响
fig = plt.figure(figsize = (10,10))
ax1 = fig.add_subplot(2,1,1)
ax2 = fig.add_subplot(2,1,2)
data.plot('weight','mpg',kind = 'scatter',ax = ax1)
data.plot('acceleration','mpg',kind = 'scatter',ax = ax2)
plt.show()
结果如下图所示:
可看出车重越重,油耗越大即每加仑油跑的路程越少,加速度越快,油耗越小,即每加仑油跑的路程越多。
二、选择模型
from sklearn.linear_model import LinearRegression
model = LinearRegression()
#这里以一个特征‘weight’举例便于可视化,真正预测时要用到多个特征,比如#model.fit(data[['weight','acceleration']],data[['mpg']])
model.fit(data[['weight']],data[['mpg']])#训练
prediction = model.predict(data[['weight']])#预测
print(prediction[0:5])#显示预测值
print(data['mpg'][0:5])#显示真实值
####运行结果如下:
[[19.41852276]
[17.96764345]
[19.94053224]
[19.96356207]
[19.84073631]]
0 18.0
1 15.0
2 18.0
3 16.0
4 17.0
Name: mpg, dtype: float64
三、模型评估
plt.scatter(data['weight'],data['mpg'],c = 'red')#车重与真实值
plt.scatter(data['weight'],prediction,c = 'blue')#车重与预测值
结果如下图所示:
线性回归模型用均方差mse进行评估
#线性回归模型的评估,一般用mse(均方差)
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(data['mpg'],prediction)
mse = mse **(0.5)#一般再开个根号
print(mse)
随便拿一个数据进行预测
import numpy as np
model.predict(np.array(data['weight'].iloc[1]).reshape(1,-1))
####运行结果如下:
array([[17.96764345]])