如何在文本分类中使用不同的数据集进行训练和测试,同时避免特征数量不匹配?

问题描述 投票:0回答:1

我正在使用两个不同的数据集进行文本分类,目的是使用一个数据集进行训练,使用另一个数据集进行测试。请注意,我不想合并数据集以防止泄漏(我认为这就是它的名字)。与训练数据集(16k 行)相比,测试数据集要小得多(约 1000 行)

我正在使用 CountVectorizer,由于两个数据集具有不同的词汇表,因此会产生不同数量的列 - 这会导致预测步骤期间出现错误。

ValueError: X has 55229 features, but DecisionTreeClassifier is expecting 387964 
features as input.

我已经进行 GPT 和谷歌搜索有一段时间了,我得到了混合的指导,例如:

  1. 将零填充列添加到较小的 x_test
  2. 使用 scikit-learn 管道

以下代码片段:

# 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.
python scikit-learn nlp text-classification
1个回答
0
投票

每个预处理步骤一样,不适合测试集。您应该有一个

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']
© www.soinside.com 2019 - 2024. All rights reserved.