Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么DictVectorizer会改变功能的数量?_Python_Scikit Learn_Categorical Data_Dictvectorizer - Fatal编程技术网

Python 为什么DictVectorizer会改变功能的数量?

Python 为什么DictVectorizer会改变功能的数量?,python,scikit-learn,categorical-data,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_训练和X_测试都有34个特性。我使用DictVectorizer应用了一些进一步的转换,因为我有分类变量 from sklearn

我有一个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_训练和X_测试都有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个。发生这种情况的可能原因是什么?

因为您正在使用不同的拟合进行矢量化。使用
拟合变换时

X_train=vecS.fit_transform(X_train.to_dict(orient='record'))
X_test=vecS.fit_transform(X_test.to_dict(orient='record'))
这将导致两个不同的矢量器作用于您的数据集。第一个将针对
X\u train.中的所有功能进行培训。to\u dict
,另一个针对
X\u test.中的所有功能进行培训。to\u dict
,您希望在培训数据上对矢量器进行一次培训,然后仅使用
transform
,因为
拟合transform
重新安装:

请注意,您的模型将只知道培训集中的功能

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