我正在用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'])
答案 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'])
因此在运行功能之前,请检查您是否以必需的格式提供输入:)