对列表中的所有数据帧执行回归



我有一个名为"数据";包含81个数据帧(df1、df2…df81(,每个数据帧具有相同的形状标签。假设自变量(X(是'a','b','c',因变量是[Y]。我可以对列表内的每个数据帧执行多元回归吗;数据";同时而不是一个接一个地做?以及每个回归的准确性(r2_score(存储到准确性列表中?

例如我使用以下的代码进行回归

accuracy_list =[]
#First dataframe (df1)
X = Data['df1'][['a','b','c']]
Y = Data['df1']['y']
from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,train_size=0.9,random_state=42)
from sklearn.linear_model import LinearRegression
rgs = LinearRegression()
rgs.fit(X_train,Y_train)
from sklearn.metrics import r2_score
y_pred = rgs.predict(X_test)
r2_score(Y_test,y_pred) # append it to accuracy_list
#second dataframe (df2)
X = Data['df2'][['a','b','c']]
Y = Data['df2']['y']
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,train_size=0.9,random_state=42)
rgs = LinearRegression()
rgs.fit(X_train,Y_train)
y_pred = rgs.predict(X_test)
r2_score(Y_test,y_pred) # append it to accuracy_list
# and so on

正如我从您的问题中了解到的,重要的部分是您可以并行处理它们以加快计算速度。因此,您可以尝试使用多处理,它可以启动各种进程来执行代码。一种非常方便的方法,也在sci工具包学习中使用,就是在这里使用joblib并行。

在代码中,大致读作

from joblib import Parallel, delayed
def compute_r2_score(model, X, y) -> float:
y_pred = rgs.predict(X)
return r2_score(y, y_pred)
n_jobs = 2 # For having 2 processes. That should be at max n_cpus - 1
# verbose=10 gives you some output on the iterations
accuracy_list = Parallel(n_jobs=n_jobs, verbose=10)(delayed(compute_r2_score)(rgs, df[['a','b','c']], df['y']) for df in data.values())

请注意,多处理不是免费的,它会带来额外的通信和处理开销。除此之外,在单个流程中运行的所有内容都必须是可选择的,以防遇到该问题。

顺便说一句,由于全局解释器锁和此任务肯定受CPU限制,多线程处理在这里不会加快任何速度。

最新更新