LuL*_*U W 1 python pipeline scikit-learn cross-validation
之前看过一个帖子,代码是这样的:
scalar = StandardScaler()
clf = svm.LinearSVC()
pipeline = Pipeline([('transformer', scalar), ('estimator', clf)])
cv = KFold(n_splits=4)
scores = cross_val_score(pipeline, X, y, cv = cv)
Run Code Online (Sandbox Code Playgroud)
我的理解是:当我们应用缩放,我们应该使用3出4倍来计算平均值和标准差,那么我们应用均值和标准差的所有4倍。
在上面的代码中,我怎么知道 Sklearn 遵循相同的策略?另一方面,如果 sklearn 不遵循相同的策略,这意味着 sklearn 将计算所有 4 折的均值/标准差。这是否意味着我不应该使用上述代码?
我喜欢上面的代码,因为它节省了大量的时间。
在您给出的示例中,我将使用sklearn.model_selection.train_test_split以下方法添加一个额外的步骤:
folds = 4
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=(1/folds), random_state=0, stratify=y)
scalar = StandardScaler()
clf = svm.LinearSVC()
pipeline = Pipeline([('transformer', scalar), ('estimator', clf)])
cv = KFold(n_splits=(folds - 1))
scores = cross_val_score(pipeline, X_train, y_train, cv = cv)
Run Code Online (Sandbox Code Playgroud)
我认为最好的做法是只使用训练数据集(即X_train, y_train)调整模型的超参数和测试数据集(即当X_test, y_test)应作为最后的检查,以确保您的模型不偏朝向验证折叠。那时,您会将scaler适合您的训练数据集的相同内容应用到您的测试数据集。
| 归档时间: |
|
| 查看次数: |
3555 次 |
| 最近记录: |