首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用sklearn的cross_val_score()来标准化数据

如何用sklearn的cross_val_score()来标准化数据
EN

Stack Overflow用户
提问于 2017-06-08 22:23:22
回答 1查看 8.6K关注 0票数 15

假设我想使用LinearSVC对数据集执行k-折叠交叉验证。我将如何对数据执行标准化?

我读过的最佳实践是在培训数据上构建标准化模型,然后将该模型应用于测试数据。

当您使用一个简单的train_test_split()时,这很容易,因为我们可以这样做:

代码语言:javascript
运行
复制
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)

如何在进行k-折叠交叉验证的同时对数据进行标准化?问题来自这样一个事实,即每个数据点都是用于培训/测试的,因此不能在cross_val_score()之前标准化所有数据点。您不需要对每个交叉验证进行不同的标准化吗?

文档没有提到在函数内部进行标准化。我是索尔吗?

编辑:这篇文章非常有用:Python-到底什么是sklearn.pipeline.Pipeline?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-09 01:09:29

可以使用管道将这两个进程组合起来,然后将其发送到cross_val_score()中。

当管道上调用fit()时,它将一个接一个地对所有的转换进行拟合,并对数据进行转换,然后使用最终的估计器对转换后的数据进行拟合。在predict() (仅当管道中的最后一个对象是一个估计器时可用,否则是transform()),它将对数据进行转换,并使用最终的估计器进行预测。

如下所示:

代码语言:javascript
运行
复制
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)

查看各种管道示例,以便更好地理解它:

  • http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.Pipeline.html#examples-using-sklearn-pipeline-pipeline

如果有任何疑问,请随意询问。

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44446501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档