嗨,善良且乐于助人的人们,
我正在使用两个不同的数据集进行文本分类,目的是使用一个数据集进行训练,使用另一个数据集进行测试。请注意,我不想合并数据集以防止泄漏(我认为这就是它的名字)。与训练数据集(16k 行)相比,测试数据集要小得多(约 1000 行)
我正在使用 CountVectorizer,由于两个数据集具有不同的词汇表,因此会产生不同数量的列 - 这会导致预测步骤期间出现错误。
ValueError:X 有 55229 个特征,但 DecisionTreeClassifier 期望 387964 个特征作为输入。
我已经进行 GPT 和谷歌搜索有一段时间了,我得到了混合的指导,例如:
任何智慧都将受到赞赏。代码片段如下:
# read dfs
df_1 = pd.read_csv("data1.csv",header=0) # for training, has text, and class columns
df_2 = pd.read_csv("data2.csv",header=0) # for testing, has text, and class columns
# vectorise
CV1 = CountVectorizer(ngram_range=(1,3), stop_words="english").fit(df_1['text'])
x_train = CV1.transform(df_1['text'])
y_train = df_1['class']
CV2 = CountVectorizer(ngram_range=(1,3), stop_words="english").fit(df_2['text'])
x_test = CV2.transform(df_2['text'])
y_test = df_test['class']
## shapes of objects
## x_test (1589, 55229), y_test(1589,)
## x_train (16716, 387964), y_train(16716,)
# build classifier and predict
classifier = DecisionTreeClassifier(random_state=1234)
model = classifier.fit(x_train,y_train)
y_pred = model.predict(x_test)
# error ValueError: X has 55229 features, but DecisionTreeClassifier is expecting 387964 features as input.
与每个预处理步骤一样,不适合测试集。您应该有一个
CountVectorizer
实例,用于 fit_transform
训练集和 transform
测试集。
您的情况:
CV = CountVectorizer(ngram_range=(1,3), stop_words="english")
x_train = CV.fit_transform(df_1['text'])
y_train = df_1['class']
x_test = CV.transform(df_2['text'])
y_test = df_test['class']