我是否需要使用 Gridsearch 的超参数来训练整个训练集以获得最终模型?

数据挖掘 分类 超参数 网格搜索 网格搜索
2022-02-09 19:40:20

我只是想确保我在正确的路线上,所以如果错了请纠正我。我正在测试哪些超参数最适合我的数据 X、y 的逻辑回归,其中 X 是特征,y 是目标。X, y 来自我的训练集。我也有一个测试集。

from sklearn.linear_model import LogisticRegression

# split train into target and features 
    y = Train['target']
    X = Train.drop(['target'], axis = 1)
    X = pd.get_dummies(X)
#split test data into target and features 

y_test = Test['target']
X_test = Test.drop(['target'], axis = 1)
X_test = pd.get_dummies(X_test)


logistic = LogisticRegression()  # initialize the model
# Create regularization penalty space

    param_grid = {'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000] }

clf=GridSearchCV(logistic,param_grid=param_grid,cv=5)



best_model = clf.fit(X, y)# View best hyperparameters
print('Best Penalty:', best_model.best_estimator_.get_params()['penalty'])
print('Best C:', best_model.best_estimator_.get_params()['C']) #

我现在将使用这些超参数并在我的训练数据上“训练”它。所以我确定当我们说训练时,我会采用 best_model 并在整个 X 数据上进行训练。然后我使用我的 X_test,这是我在这个新训练模型上的保留数据:

bestLog=best_model.best_estimator_
trained_model=bestLog.fit(X,y)
predicted=trained_model.predict(X_test)

然后使用上面的这个输出作为我的最终模型来测试?

1个回答

据我了解(免责声明:我对 Python 不是很熟悉)您的方法是正确的:所选的超参数在不同于训练集的保留测试集上进行测试,这样就没有数据泄漏和您可以在将模型应用于测试集之前评估其真实性能。

出于分析目的,比较最佳模型在 X(训练集)和 X_test(保持)上的性能以检查过度拟合可能很有用。

请注意,在这种情况下,您直接选择最佳超参数,我认为跳过对保留集的测试是可以接受的,但是在这种情况下,您将不知道模型的真实性能(例如您将无法检查它是否过拟合)。需要明确的是:我认为你不应该这样做,这只是为了显示有/没有支持集的差异。