我有3个列表
x = [1,2,3,4,5]
y = [0.1,0.01,0.001,0.0001]
z = [100,200,300,400]
我需要这样选择:
state1:
1 --->0.1--->100
1 --->0.1--->200
1 --->0.1--->300
1 --->0.1--->400
==============
state2:
1 --->0.01--->100
1 --->0.01--->200
1 --->0.01--->300
1 --->0.01--->400
.
.
.
.
.
5 --->0.0001--->100
5 --->0.0001--->200
5 --->0.0001--->300
5 --->0.0001--->400
在每种选择状态下,我都需要将它们放在下面的代码段中:
params = {'n_estimators': 100, 'max_depth':1, 'min_samples_split': 2,
'learning_rate': 0.1, 'loss': 'ls'}
clf = ensemble.GradientBoostingRegressor(**params)
clf.fit(X_train, y_train)
mse = mean_squared_error(a4, clf.predict(a3))
mae=mean_absolute_error(a4,clf.predict(a3))
r2=r2_score(a4, clf.predict(a3))
def mape_vectorized(a, b):
mask = a != 0
return (np.fabs(a[mask] - b[mask])/a[mask]).mean()
print("MAPE:%.5f" %mape_vectorized(a4, clf.predict(a3)))
print("MAE: %.5f" % mae)
print("MSE: %.5f" % mse)
print("R2: %.5f" % r2)
并将结果打印到每个状态。而不是手动进行操作,而是从每个状态中逐个元素地选择,这将需要时间。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
您可以使用itertools.product
枚举每个状态:
import itertools
x = [1, 2, 3, 4, 5]
y = [0.1, 0.01, 0.001, 0.0001]
z = [100, 200, 300, 400]
for s in itertools.product(x, y, z):
print(s)
然后,可以将生成器中的每个状态用作自变量以提供回归。