这就是我所做的。我认为One热编码器正在发生某些事情。

from sklearn.datasets import make_classification
from sklearn.feature_selection import RFE


X, y = make_classification(n_samples=50, n_features=10, random_state=10)
encoder = preprocessing.LabelEncoder()
encoder.fit(X)
X = encoder.transform(X)
print X
print X.shape

encoder = preprocessing.OneHotEncoder()
encoder.fit(X)
X = encoder.transform(X)


print encoder.feature_indices_

estimator = SVR(kernel="linear")
selector = RFE(estimator, 100, step=1)
selector = selector.fit(X, y)


在X上使用标签编码器后,我得到了一个形状为(50,10)的数组(很明显)。但是在进行一次热编码后,我得到的特征索引如下。

[   0  499  987 1487 1968 2459 2957 3401 3886 4379 4868]


据我所知,两个索引之间的最大范围应该小于或等于行数,不是吗?这是50。但是在这里我得到的是500,而不是50。我对一种热编码有误吗?或者,一种热编码功能还有其他问题吗?

(此示例仅用于说明我的问题)

最佳答案

行数无关紧要,而是任何给定列(即功能)中各行的值范围。当您打印X时,您会看到任何给定列中的值都可以覆盖从1:500开始的整个范围。

关于python - 一热编码器困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17542357/

10-12 20:50