python - 为什么 DictVectorizer 会改变特征数量?

标签 python scikit-learn categorical-data dictvectorizer

我有一个 324 行和 35 列的数据集。我将其分为训练数据和测试数据:

X_train, X_test, y_train, y_test = train_test_split(tempCSV[feaure_names[0:34]], tempCSV[feaure_names[34]], test_size=0.2, random_state=32)    

这似乎工作正常,我的 X_train 和 X_test 都有 34 个特征。我使用 DictVectorizer 应用一些进一步的转换,因为我有分类变量。

from sklearn.feature_extraction import DictVectorizer
vecS=DictVectorizer(sparse=False)
X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.fit_transform(X_test.to_dict(orient='record'))

现在,当我比较 X_train 和 X_test 时,前者有 46 个特征,而后者只有 44 个。发生这种情况的可能原因有哪些?

最佳答案

因为您正在使用不同的拟合进行矢量化。当您使用fit_transform时:

X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.fit_transform(X_test.to_dict(orient='record'))

这会导致两个不同拟合的矢量化器作用于您的数据集。第一个将在 X_train.to_dict 中的所有功能上进行训练,另一个将在 X_test.to_dict 中的所有功能上进行训练,您想要训练一次向量化器您的训练数据,然后仅使用transform,因为fit_transform refits:

X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.transform(X_test.to_dict(orient='record'))

请注意,您的模型只会了解训练集中的特征。

关于python - 为什么 DictVectorizer 会改变特征数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381295/

相关文章:

Python:exec 总是不好的做法吗?如果是,为什么不弃用

python - sklearn imputer 删除具有缺失值的列

Python sklearn 的带有分类箱的标签编码器

python - len 没有很好地定义符号。请调用 `x.shape` 而不是 `len(x)` 获取形状信息

python - 使用 pyparsing 累积

python - 使用 Python 创建图表和图形

python - 如何处理json中的大括号转义

python - 机器学习分类数据集设置

r - 如何为分类数据创建 'clustered dotplots'?

r - 当因变量是因子/分类变量时的线性模型 (lm)?