首页 > 解决方案 > 使用具有不同熊猫数据框的 scikit-learn 运行 LinearRegression 模型(循环问题)

问题描述

我有一个包含成本、风能、太阳能和一天中的小时数的数据框,我喜欢使用 scikit-learn 的线性回归模型来找出风能和太阳能如何影响成本。我用 P1-P24 (一天 24 小时)标记了每个小时,即根据一天中的时间为每一行分配一个 P(1-24)

因此,我根据一天中的时间将风/太阳能/成本的每一行定义为不同的数据框

代码运行正常,我想做的一切。但是,我很难构建一个 for 循环代码,每小时重复运行一次,以从 scikit-learn 在各种熊猫数据帧(P1 到 P24 )。

所以目前我必须手动更改 P 数 24 次才能找到每小时对应的截距/系数/均方误差

我在下面有一些代码用于工作,但我总是很难构建 for 循环

我尝试在 [P1,P2...] 中使用 for i 构建 for 循环,但数据框变成了一个列表,我也很难将它合并到 scikit-learn 部分

b 是带有列的原始数据框:成本、周期(半小时一次,因此我有周期 1 到 48)、风能、太阳能

导入数据框

 b = pd.read_csv('/Users/Downloads/cost_latest.csv')

因此,将其放入每小时:

 P1 = b[b['Period'].isin(['01','02'])]
 P2 = b[b['Period'].isin(['03','04'])]...

scikit-learn 部分:

 feature_cols = ['wind','Solar']
 X = P1[feature_cols]
 y = P1['Price']

这是我的问题,我需要在运行以下代码之前将 P1 更改为 P2...P24 以获取我的参数

以下是 scikit-learn 部分:

 from sklearn.model_selection import train_test_split
 X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
 from sklearn.linear_model import LinearRegression

 linreg = LinearRegression()

将模型拟合到训练数据(学习系数)

 linreg.fit(X_train, y_train)
 print(linreg.intercept_)
 print(linreg.coef_)
 list(zip(feature_cols, linreg.coef_))
 y_pred = linreg.predict(X_test)
 from sklearn import metrics
 print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

我认为有一种更聪明的方法可以避免我手动编辑以下(P 值)并一次性运行所有内容,我欢迎您的建议,建议谢谢

 X = P1[feature_cols]
 y = P1['Price']

标签: pandasloopsdataframefor-loopscikit-learn

解决方案


只需使用这个:

for P in [P1,P2, P3,P4,P5,P6,P7]:
    X = P[feature_cols]
    y = P['Price']

全部一起:

from sklearn import metrics
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

all_intercepts = []
all_coefs = []

for P in [P1,P2, P3,P4,P5,P6,P7]:
    X = P[feature_cols]
    y = P['Price']
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
    linreg = LinearRegression()
    linreg.fit(X_train, y_train)
    print(linreg.intercept_)
    print(linreg.coef_)
    list(zip(feature_cols, linreg.coef_))
    y_pred = linreg.predict(X_test)
    print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
    all_intercepts.append(linreg.intercept_)
    all_coefs.append(linreg.coef_)


print(all_intercepts)
print(all_coefs)

P将是您的数据框 P1,P2,... 根据每次迭代


推荐阅读