如何对数据框进行线性回归?

时间:2020-02-27 13:02:53

标签: python pandas regression

我正在用Python构建一个应用程序,该应用程序可以从数据帧中预测Pm2.5污染的值。我正在使用11月的值,并且尝试首先建立线性回归模型。如何不使用日期进行线性回归?我只需要预测Pm2.5,就可以知道日期了。 这是我到目前为止尝试过的:

mutate { add_field => {"[otherDoc][e1]" => "%{[document][infoArray][0][elements][e1]}"} }

此代码引发以下错误:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

data = pd.read_csv("https://raw.githubusercontent.com/iulianastroia/csv_data/master/final_dataframe.csv")
data['day'] = pd.to_datetime(data['day'], dayfirst=True)

#Splitting the dataset into training(70%) and test(30%)
X_train, X_test, y_train, y_test = train_test_split(data['day'], data['pm25'], test_size=0.3,
                                                    random_state=0
                                                    )

#Fitting Linear Regression to the dataset
lin_reg = LinearRegression()
lin_reg.fit(data['day'], data['pm25'])

2 个答案:

答案 0 :(得分:5)

对于X的值,您需要传递 pandas数据框而不是 pandas系列,因此您可能需要执行以下操作

更新:

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
import datetime

data = pd.read_csv("https://raw.githubusercontent.com/iulianastroia/csv_data/master/final_dataframe.csv")
data['day'] = pd.to_datetime(data['day'], dayfirst=True)

print(data.head())

x_data = data[['day']]
y_data = data['pm25']

#Splitting the dataset into training(70%) and test(30%)
X_train, X_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.3,
                                                    random_state=0
                                                    )
# linear regression does not work on date type of data, convert it into numerical type
X_train['day'] = X_train['day'].map(datetime.datetime.toordinal)
X_test['day'] = X_test['day'].map(datetime.datetime.toordinal)

#Fitting Linear Regression to the dataset
lin_reg = LinearRegression()
lin_reg.fit(X_train[["day"]], y_train)

现在您可以使用来预测数据了,

print(lin_reg.predict(X_test[["day"]])) #-->predict the data

答案 1 :(得分:1)

这就是为什么您需要“ [[”以及如何避免沮丧的原因。

data [['day']]有效而data ['day']无效的原因是,fit方法期望X的形状为2的元组,但是不希望Y的形状,请参见{{3 }}:

fit(self,X,y,sample_weight = None)[源]¶拟合线性模型。

形状的参数X {类似数组的稀疏矩阵}(n_samples, n_features)训练数据

形状为(n_samples)或(n_samples,n_targets)的类似yarray的目标 价值观。如有必要,将被强制转换为X的dtype

例如:

data[['day']].shape
(43040, 1)
data['day'].shape
(43040,)
np.resize(data['day'],(len(data['day']),1)).shape
(43040, 1)

这些工作是因为它们具有所需的结构:

lin_reg.fit(data[['day']], data['pm25'])
lin_reg.fit(np.resize(data['day'],(len(data['day']),1)), data['pm25'])

这不是:

lin_reg.fit(data['day'], data['pm25'])

因此在运行功能之前,请检查您是否以必需的格式提供输入:)