改进多类逻辑回归

时间:2021-03-16 19:54:12

标签: python machine-learning scikit-learn logistic-regression multiclass-classification

我正在开发一个产品分类器,它将接收与产品描述连接的标题,并从 8 个类别中预测其类别。我有每个班级的 1500 个项目,因此数据是平衡的。我当前的数据如下所示:

enter image description here

我然后使用具有以下参数的 TfidfVectorizer,然后构建、训练和测试 LogisticRegression 模型。

corpus_train, corpus_test, y_train, y_test = train_test_split(data['Name_Description'],
                                                              data['Category'],
                                                              test_size=0.2,
                                                              random_state=0)

vectorizer = TfidfVectorizer(stop_words=stopwords.words('english'),
                             ngram_range=(1, 3),
                             min_df=3, 
                             analyzer='word')

X_train = vectorizer.fit_transform(corpus_train)
X_test = vectorizer.transform(corpus_test)

classifier = LogisticRegression(C=10, max_iter=1000)
classifier.fit(X_train, y_train)
y_pred = classifier.predict(X_test)

我得到的结果如下:

训练准确度:0.99875 测试准确度:0.915

所以模型有点过拟合。这些是我尝试过的东西:

  • 预处理,例如小写、词干提取、删除非字母数字字符、制表符、换行符等。有趣的是,这些都没有改进模型。它在仅删除停用词的情况下表现最佳。
  • 交叉验证
  • 超参数调整并尝试了矢量化器中当前使用的参数的所有不同组合。
  • 其他分类器(SGDClassifierLinearSVM = 1% 增益)。其他分类器也好不到哪里去。
  • 我还尝试将文档更改为仅包含 N 个最常用单词的字符串。尝试了在 5 到 300 之间以 5 为增量的 N。准确率达到了 92%。

以下是错误分析中的几张图片:

预测:食物

真正的标签:健康 enter image description here 预测:玩具

真实标签:HOUSEHOLD enter image description here

对于第一个单词,婴儿出现在描述中,但它仍然预测美丽,因为其他词给了它更高的分数。在另一个中,电池这个词与家庭有关,但它没有预测到这一点。有没有办法让经常出现的词有更大的影响?

我想不出如何进一步改进模型的想法。有什么想法吗?

这里是整个笔记本的链接:https://colab.research.google.com/drive/1fGzVciF30uRTvhGpsKqCJyIv0n46eolU?usp=sharing

0 个答案:

没有答案