pandas - 使用具有不同熊猫数据框的 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']
解决方案
只需使用这个:
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,... 根据每次迭代
推荐阅读
- regex - 正则表达式和 config.json -文件
- oracle - oracle sql中的“语句”和“函数”之间到底有什么区别?
- javascript - GAE - 让环境变量与 node.js 应用程序配合得很好
- r - 基于R中的多个范围获取数据框中的行
- powerquery - Power Query - 一列中有多种数据类型(日期和文本) - 添加条件列以分解数据
- python - 如何在 Python 中使用 ctypes 获得正确的结构大小
- javascript - 在我的 C: 驱动器上启动 EXE 的 Web 浏览器小书签
- c# - 在 C# 中读取字节数组并转换为浮点数
- java - IOException:无法运行程序“python”
- javascript - Ajax popup view update data using php with sql