我正在使用scikit learn创建一个决策树模型,我需要使用StandardScaler()分割数据BEFORE.然而,我还想使用cross_val_score()方法.

我首先使用make_column_transformer()中的OneHotEncoding()对我的一些分类数据进行编码,如下所示:

transformer = sklearn.compose.make_column_transformer(
            (sklearn.preprocessing.OneHotEncoder(handle_unknown='ignore'), ['SoilDrainage', 'Geology', 'LU2016']),
            remainder='passthrough')

然后实例化我的模型和定标器类:

model = sklearn.tree.DecisionTreeClassifier()

scalar = sklearn.preprocessing.StandardScaler()

我将它们添加到我的管道中:

pipe = sklearn.pipeline.make_pipeline(transformer, scalar, model)

最后,我将管道输入到cross_val_score():

sklearn.model_selection.cross_val_score(pipe, X, y, cv=5, scoring='accuracy').mean()

当我这样做时,我没有得到任何错误,但因为分割是在cross_val_score()方法内完成的,我不确定如何验证在分割数据之前或之后是否应用了定标器.

推荐答案

https://github.com/scikit-learn/scikit-learn/blob/baf0ea25d/sklearn/model_selection/_validation.py#L381

如果您查看_fit_and_score()的文档,就会清楚地看到估计器(=您的管道)仅应用于数据集的分割.

此外,在cross_validate()中,为每次分割克隆估计器.

Python相关问答推荐

实现的差异取决于计算出的表达是直接返回还是首先存储在变量中然后返回

如何使用entry.bind(FocusIn,self.Method_calling)用于使用网格/列表创建的收件箱

如何根据日期和时间将状态更新为已过期或活动?

Matlab中是否有Python的f-字符串等效物

按列分区,按另一列排序

什么相当于pytorch中的numpy累积ufunc

发生异常:TclMessage命令名称无效.!listbox"

如何列举Pandigital Prime Set

使用@ guardlasses. guardlass和注释的Python继承

基于字符串匹配条件合并两个帧

导入...从...混乱

使用groupby方法移除公共子字符串

使用Python和文件进行模糊输出

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

如何创建引用列表并分配值的Systemrame列

使用Openpyxl从Excel中的折线图更改图表样式

不允许 Select 北极滚动?

python的文件. truncate()意外地没有截断'

Pandas数据框上的滚动平均值,其中平均值的中心基于另一数据框的时间

python3中np. divide(x,y)和x/y有什么区别?'