als*_*5ev 6 python standardized svm scikit-learn cross-validation
假设我要使用LinearSVC对数据集执行k折交叉验证。如何对数据进行标准化?
我读过的最佳实践是在培训数据上建立标准化模型,然后将此模型应用于测试数据。
当使用简单的train_test_split()时,这很容易,因为我们可以这样做:
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y)
clf = svm.LinearSVC()
scalar = StandardScaler()
X_train = scalar.fit_transform(X_train)
X_test = scalar.transform(X_test)
clf.fit(X_train, y_train)
predicted = clf.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
做k折交叉验证时如何标准化数据?问题出在每个数据点都用于训练/测试,因此您无法在cross_val_score()之前将所有数据标准化。每个交叉验证是否都需要不同的标准化?
该文档没有提到函数内部发生的标准化。我是SOL吗?
编辑:这篇文章超级有帮助:Python-sklearn.pipeline.Pipeline到底是什么?
您可以使用管道来组合两个过程,然后将其发送到cross_val_score()中。
在fit()管道上调用时,它将一个接一个地拟合所有变换并变换数据,然后使用最终估算器拟合变换后的数据。并且在过程中predict()(仅在管道中的最后一个对象是估计器时才可用,否则transform()),它将对数据应用转换,并使用最终估计器进行预测。
像这样:
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)
查看各种管道示例以更好地理解它:
随时询问是否有任何疑问。
| 归档时间: |
|
| 查看次数: |
2501 次 |
| 最近记录: |