基于数据帧的Python线性回归预测模型

基于数据帧的Python线性回归预测模型,python,pandas,python-2.7,linear-regression,spyder,Python,Pandas,Python 2.7,Linear Regression,Spyder,这是我的样本数据: import pandas as pd avg_consumption = pd.DataFrame({ 'Car.Year.Model':[2009, 2010, 2011, 2012], 'City.mpg':[17.9, 17, 16.9, 18.3], 'Highway.mpg':[24.3, 23.6, 23.6, 25.7] }) 我想使用线性回归来预测每一车型年每种燃油范围类型(城市和公路)的平均燃油消耗量 我的期望输出与我的数据框架相同,但它使用我的现有数

这是我的样本数据:

import pandas as pd

avg_consumption = pd.DataFrame({
'Car.Year.Model':[2009, 2010, 2011, 2012],
'City.mpg':[17.9, 17, 16.9, 18.3],
'Highway.mpg':[24.3, 23.6, 23.6, 25.7]
})
我想使用线性回归来预测每一车型年每种燃油范围类型(城市和公路)的平均燃油消耗量

我的期望输出与我的数据框架相同,但它使用我的现有数据预测了截至2025年的车型年平均燃油消耗量。 我不完全确定该怎么做

我尝试过的:

我试图按照问题的答案来回答:

from sklearn.linear_model import LinearRegression

years = pd.DataFrame()
years['Car.Year.Model'] = range(2009, 2025)
# I include 2009-2012 to test the prediction values are still the same as the original

X = avg_consumption.filter(['Car.Year.Model'])
y = avg_consumption.drop('Car.Year.Model', axis=1)

model = LinearRegression()
model.fit(X, y)

X_predict = years
y_predict = model.predict(X_predict)
我的结果如下所示:


如果我假设我的第一行具有2009年的预测值,那么这是不正确的,因为我的2009年款原始数据框中的值不同

我想确保它能够正确预测到2025年为止每年的平均燃油消耗量。我还希望我的结果以类似于样本数据的数据框架呈现

有人能给我指出正确的方向吗?

你可以使用和进行线性外推。然后加上预测年数,如下所示:

import pandas as pd
import numpy as np

avg_consumption = pd.DataFrame({
'Car.Year.Model':[2009, 2010, 2011, 2012],
'City.mpg':[17.9, 17, 16.9, 18.3],
'Highway.mpg':[24.3, 23.6, 23.6, 25.7]
})

f_city = np.poly1d(np.polyfit(avg_consumption["Car.Year.Model"], avg_consumption["City.mpg"], 1))
f_highway = np.poly1d(np.polyfit(avg_consumption["Car.Year.Model"], avg_consumption["Highway.mpg"], 1))
new_data = pd.DataFrame([[i, f_city(i), f_highway(i)] for i in range(2013, 2026)], columns=avg_consumption.columns)
avg_consumption = pd.concat([avg_consumption, new_data], axis=0)
收益率:

    Car.Year.Model  City.mpg  Highway.mpg
0             2009     17.90        24.30
1             2010     17.00        23.60
2             2011     16.90        23.60
3             2012     18.30        25.70
0             2013     17.80        25.35
1             2014     17.91        25.77
2             2015     18.02        26.19
3             2016     18.13        26.61
4             2017     18.24        27.03
5             2018     18.35        27.45
6             2019     18.46        27.87
7             2020     18.57        28.29
8             2021     18.68        28.71
9             2022     18.79        29.13
10            2023     18.90        29.55
11            2024     19.01        29.97
12            2025     19.12        30.39

“这是不正确的,因为我的2009年款原始数据框中的值不同。”:这是因为您的(输入)值是实际数据,但此数据框具有来自最佳拟合模型的预测。输出不是您的数据:它基本上是一条穿过一些分散点的线。
ax = avg_consumption.set_index("Car.Year.Model").iloc[:4].plot()
avg_consumption.set_index("Car.Year.Model").iloc[3:].plot(ls="-.", ax=ax)