【问题标题】:Scikit-learn fit_transform return type not homogeneousScikit-learn fit_transform 返回类型不齐
【发布时间】:2018-03-10 00:00:08
【问题描述】:
我目前正在使用 sklearn,但有些事情困扰着我。
Imputer.fit_transform()、LabelEncoder.fit_transform等的返回类型是numpy.ndarray,但OneHotEncoder.fit_transform()返回一个coo_matrix。
有解释吗?
谢谢。
【问题讨论】:
标签:
python
machine-learning
scikit-learn
【解决方案1】:
Imputer 适用于现有的数据数组。所以输出将取决于 fit() 的输入。如果输入稀疏,则输出很可能是稀疏的。
LabelEncoder 只是将字符串值更改为整数,因此它需要一个简单的数组(不是稀疏的),并且会输出一个类似的数组。
现在来到 OneHotEncoder,one-hot 编码器的工作是为一列获取虚拟编码,其中对于单个样本只有一个 1(这就是为什么称为 1-hot)而所有其他的都是 0。
因此,如果一列 100 个样本有 7 个不同的类别,那么您将在输出中得到 7 个不同的列,总共有 700 个单元格,其中只有 100 个单元格有 1 个(每个样本一个),其余 600 个单元格有数据0. 这大约是一列。现在考虑这种情况,对于可能大于 10000 的大量样本数据的多列。大多数单元格将为 0。这就是为什么要节省内存,它返回一个稀疏矩阵。
如果您有足够的内存来处理,您应该将 OneHotEncoder 初始化为:
enc = OneHotEncoder(sparse=False)
在此,transform() 将返回一个简单的密集数组。