首页 > 解决方案 > 为什么我们在使用管道时不转换 X_test

问题描述

我在一篇文章中看到https://towardsdatascience.com/multi-class-text-classification-with-sklearn-and-nltk-in-python-a-software-engineering-use-case-779d4a28ba5

   X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.25)

Step1:我们可以使用管道一次完成这些步骤,而不是一次完成这些步骤

      pipeline = Pipeline([('vect', tfidf),
                 ('clf', RandomForestClassifier())])

Step2 拟合我们的模型并将其保存在泡菜中以备后用

      model = pipeline.fit(X_train, y_train)
      prediction= model.predict(X_test)

通常,如果我们手动执行

   X_train= tfidf.fit_transform(X_train)
   X_test=tfidf.transform(X_test)
   model=RandomForestClassifier()
   model.fit(X_train,y_train)
   prediction=model.predict(X_test)

我的问题是:如果我按照文章,并在 step2 中执行这些代码,我是否会错过这段代码

   X_test=tfidf.transform(X_test)

我没有看到作者转换 X_test。他只是使用原始的 X_test。作者是真的吗?

标签: pythonscikit-learnpipeline

解决方案


我的问题是:如果我按照文章,并在 step2 中执行这些代码,我是否会错过这段代码

不,作者是对的。

调用model.predict()时,作者使用的是 Pipeline 类函数predict()您可以在文档中看到...

对数据应用变换,并使用最终估计器进行预测

所以 X_test 首先被转换然后用于预测目标变量。


推荐阅读