【发布时间】:2020-04-08 11:42:44
【问题描述】:
我正在从 sklearn 运行 gridsearchCV 以尝试使用此代码找到最佳模型参数。
modelDNN= KerasRegressor(build_fn=build_DNN_model, epochs=700, verbose=2)
hiden1=[16,32,64,128,256]
hiden2=[16,32,64,128,256]
hiden3=[16,32,64,128,256]
opt=['SGD', 'RMSprop','Adam']
drop=[0.0,0.2,0.3,0.4]
start = time.time()
param_gridDNN = dict(hiden1=hiden1,hiden2=hiden2,hiden3=hiden3,opt=opt,drop=drop)
gridDNN = GridSearchCV(estimator=modelDNN, param_grid=param_gridDNN, n_jobs=-1, cv=ShuffleSplit(1, test_size=0.2, random_state=584),scoring=R2_scorer(),verbose=2)
k.clear_session()
grid_resultDNN = gridDNN.fit(xtrain,ytrain,epochs=700 , validation_data=(xtest, ytest),verbose=2)
gridsearch 最好的结果是这个
Best: 0.840487 using {'drop': 0.4, 'hiden1': 64, 'hiden2': 32, 'hiden3': 128, 'opt': 'Adam'}
但我根本无法达到这个 R2 精度 尝试:
p=gridCNN.best_estimator_.predict(xtest)
r2_score(np.asarray(ytest).ravel(), p)
我得到 0.4696 并在火车数据上运行它得到 0.7521:
p=gridDNN.best_estimator_.predict(xtrain)
r2_score(np.asarray(ytrain).ravel(), p)
我也尝试用相同的参数重建模型:
def build_DNN_final_model():
model = Sequential()
model.add(Dense(2,input_shape=(2,)))
model.add(Dense(64,activation="relu"))
model.add(Dense(32,activation="relu"))
model.add(Dense(128,activation="relu"))
model.add(Dropout(0.4))
model.add(Dense(1,activation="linear"))
model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mse'] )
return model
训练后我得到这个 R2 分数 0.6764 所以我的问题是 0.8404 的精度是多少?以及我如何才能达到 gridserachCV (0.8404) 的准确性,并指出我在网格搜索期间使用它消除了交叉验证:
cv=ShuffleSplit(1, test_size=0.2, random_state=584)
提前谢谢你
【问题讨论】:
-
这不是更多的统计/机器学习问题而不是编程问题吗?
-
其实gridsearch之前也达到了这个精度。所以我问的是一种编程方式来检索或再次达到这种精度!
-
对,但是你有证据表明这是一个编程错误/错误/问题,而不是机器学习本身的问题吗?
-
我不知道这是一个编程问题的直觉
标签: python machine-learning keras scikit-learn grid-search