我正在使用scikitlearn,我创建了一个循环遍历弹性网络回归的几个参数的函数。我的功能在500000 x 1100000稀疏矩阵中,因此只需一次迭代就需要一个小时。因此,我正在研究多处理以及使用ipyparallel的并行计算,但我并不真正理解这个概念或如何将它应用于我的函数。您会为我的设置推荐哪种方法(多处理,ipyparallel或其他?)?你能给我一个如何应用它的第一个想法吗?
这是我应用流水线弹性网络回归的函数:
def do_penalized_regression(x, y, alphavalue, lambdavalue):
enr = ElasticNetCV(n_alphas = lambdavalue, l1_ratio = alphavalue, normalize=False)
pipeliner = make_pipeline(StandardScaler(with_mean=False), enr)
pipeliner.fit(x, y)
return enr
这是迭代不同alpha参数并发回模型拟合指数的函数:
d = {}
evaluation = {}
lambdavalue = 100
def alpha_lambda_evaluation(x):
Xtrain, Xtest, Ytrain, Ytest = sklearn.model_selection.train_test_split(x, Y, test_size=.2, random_state = 42)
for alphavalue in np.arange(0.05, 1.0, 0.05):
enr = do_penalized_regression(Xtrain, Ytrain, alphavalue, lambdavalue)
rmse = get_rmse(enr, Xtest, Ytest)
aic = get_aic(enr, Xtest, Ytest)
bic = get_bic(enr, Xtest, Ytest)
rsquared = get_rsquared(enr, Xtest, Ytest)
F = get_F_value_test(enr, Xtest, Ytest)
d[f'alpha_{alphavalue}'] = [rmse, aic, bic, rsquared, F]
return d
evaluation = pd.DataFrame(d)
evaluation = evaluation.rename({0: "rmse", 1: "aic", 2: "bic", 3: "rsquared", 4: "F"})
我是python和编程的新手,欢迎任何有关如何改进代码的建议和提示!