【问题标题】:How do you treat a new sample after training a model using sklearn preprocessing scale?使用 sklearn 预处理规模训练模型后,如何处理新样本?
【发布时间】:2018-08-12 00:26:28
【问题描述】:

假设我有一个数据集 X 和标签 Y 用于监督机器学习任务。

假设 X 有 10 个特征和 1000 个样本,我认为使用 sklearn.preprocessing.scale 扩展我的数据是合适的。执行此操作并训练我的模型。

我现在希望将它用于新数据的模型,因此我收集了 X 的 10 个特征的新样本,并希望使用我训练过的模型来分类这个样本。

在尝试分类之前,是否有一种简单的方法可以在将我的模型训练到这个新样本之前应用在 X 上执行的相同缩放?

如果不是,唯一的解决方案是在缩放之前保留 X 的副本并将我的新样本添加到此数据中,然后缩放此数据集并在通过此过程缩放新样本后尝试对新样本进行分类?

【问题讨论】:

    标签: scikit-learn


    【解决方案1】:

    使用类 api 而不是函数 api。比如preprocessing.MinMaxScaler,preprocessing.StandardScaler

    http://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

    函数 scale 提供了一种在 单个类数组数据集

    预处理模块进一步提供了一个实用程序类 StandardScaler 实现 Transformer API 来计算 训练集,以便以后能够在 测试集。

    【讨论】:

      【解决方案2】:

      假设您拥有训练数据集“training_dataset”,并且您执行了以下操作来扩展它,

      x__feature_scaler = MinMaxScaler(feature_range = (0, 1))
      training_scaled_dataset = x__feature_scaler.fit_transform(training_dataset)
      

      使用同一个 MinMaxScaler 实例来缩放新数据集。如果您的新数据集是“new_dataset”,请执行以下操作,

      new_scaled_dataset = x__feature_scaler.transform(new_dataset)
      

      这样您就可以将新数据集缩放到与训练数据集相同的比例。

      【讨论】:

      • 永远不要在新的(测试)数据集上调用 fit_transform() 或 fit()`。它将擦除之前学习的训练数据,因此您对same instance of MinMaxScaler 的使用没有任何影响。仅对来自同一实例的新数据调用 transform()。
      • 感谢@VivekKumar 的澄清。你是绝对正确的。
      • 我正在使用 OneHotEncode 数据来适应模型。当我想使用一个新的数据集来进行预测时,它就成了一个问题。如何解决这个问题?我是否只需要使用正常比例的数据集来适应模型?
      猜你喜欢
      • 2021-12-19
      • 2018-05-07
      • 2014-12-19
      • 1970-01-01
      • 2022-08-10
      • 2019-07-23
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多