【问题标题】:Different size of array after fit_transformfit_transform 后数组的大小不同
【发布时间】:2015-11-25 12:23:41
【问题描述】:

fit_transform 函数有问题。有人可以解释为什么数组的大小不同吗?

In [5]: X.shape, test.shape

Out[5]: ((1000, 1932), (1000, 1932))

In [6]: from sklearn.feature_selection import VarianceThreshold
        sel = VarianceThreshold(threshold=(.8 * (1 - .8)))
        features = sel.fit_transform(X)
        features_test = sel.fit_transform(test)

In [7]: features.shape, features_test.shape

Out[7]:((1000, 1663), (1000, 1665))

UPD:哪种转换可以帮助我获得相同大小的数组?

【问题讨论】:

  • 对于测试集,您不应该应用 fit_transform()。您的代码应该是 features_test = sel.transform(test) 正如您已经弄清楚的那样。为什么? stackoverflow.com/a/63912149/5114585 回答了应用 fit_transform() 或 transform() 的“为什么”部分

标签: python scikit-learn


【解决方案1】:

这是因为您两次拟合选择器

首先,请注意fit_transform 只是对fit 的调用,然后是对transform 的调用。

fit 方法允许您的 VarianceThreshold 选择器根据您提供的参数找到它想要保留在数据集中的特征。

transform 方法执行实际的特征选择并返回一个仅包含所选特征的 n 数组。

【讨论】:

  • 谢谢!我更改了features = sel.fit(X_small).transform(X_small) features_test = sel.transform(little_test) 并且它的工作。
  • 这就是要走的路;)。您仍然可以在第一步使用fit_transformfeatures = sel.fit(X_small).transform(X_small) 相当于features = sel.fit_transform(X_small))。
【解决方案2】:

因为fit_transform 对数组应用了降维。这就是结果数组维度与输入不同的原因。

看到这个what is the difference between 'transform' and 'fit_transform' in sklearn和这个http://scikit-learn.org/stable/modules/feature_extraction.html

【讨论】:

  • 哪种转换可以帮助我获得相同大小的数组?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-15
  • 2013-06-18
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
相关资源
最近更新 更多