这就是我所做的。我认为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)的数组(这是显而易见的)。但在进行了One hot编码后,我得到的特征索引如下。
[ 0 499 987 1487 1968 2459 2957 3401 3886 4379 4868]
据我所知,2个索引之间的最大范围应该小于或等于行数,不是吗?即50。但我得到了500,而不是50。我是不是搞错了One hot编码,还是One hot编码器功能有其他问题?
(此示例仅用于演示我的问题)
行数并不重要,重要的是任何给定列(即特征)中跨行的值范围。当您打印X时,您将看到您在任何给定列中的值可能跨越1:500的整个范围。