最后一个混淆矩阵用于测试集。这是逻辑回归过度拟合的情况吗?因为即使不对文本进行太多预处理(包括表情符号,标点符号),准确性也仍然很高。好人能提供一些帮助/建议吗?
答案 0 :(得分:3)
您正在对TfidfVectorizer
之前的整个数据执行train_test_split
,这可能是由于“数据泄漏”而导致性能提高的原因。由于TfidfVectorizer
正在学习整个数据上的词汇,因此:
out-of-bag
个单词)tf-idf
得分尝试以下操作:
tweets_train, tweets_test, y_train, y_test = train_test_split(reviews['text'].tolist(),
reviews['airline_sentiment'],
test_size=0.3,
random_state=42)
X_train = v.fit_transform(tweets_train)
X_test = v.transform(tweets_test)
然后检查性能。
注意:这可能不是性能的唯一原因。或者,也许数据集使得简单的tf-idf可以很好地工作。
答案 1 :(得分:2)
默认情况下,Tf-idf矢量化器会执行所有基本预处理
设置好这一点后,@ vivek Kumar提到的就是一个正确的观点。将矢量化器适合完整的数据不是正确的做法。
交叉检查性能指标的一种关键方法是了解什么模型学习是对/错!
查看输入要素的模型系数(如果是线性模型,则为SHAP)。
根据您的github存储库,当我尝试了解Model co-eff时,这就是我所得到的。由于luggage
,systems
之类的单词也被赋予了负权重,因此看起来有点过拟合。
top_n,bottom_n = 15,15
df = pd.DataFrame({'feature_names':v.get_feature_names(),
'co_eff':clf.coef_[0]})
df=df.sort_values('co_eff',ascending=False).iloc[np.r_[0:top_n,-bottom_n:0]]
print(df)
输出:
feature_names importn
606 thank 6.918280
607 thanks 6.269803
281 great 4.497794
74 awesome 4.366976
391 love 4.296043
84 best 3.864701
40 amazing 3.710287
213 excellent 2.749308
623 thx 2.695160
358 kudos 2.663612
279 good 2.618669
149 cool 2.582528
53 appreciate 2.399666
528 rock 2.222901
502 quick 2.020487
595 system -1.829668
643 trying -1.839126
80 bags -1.899045
394 luggage -1.957718
78 bag -1.968421
192 dont -2.060734
104 call -2.075544
532 rude -2.255443
308 hold -2.588171
316 hour -2.640191
110 cancelled -2.719347
445 nothing -2.743778
171 delayed -2.869854
704 worst -3.262978
317 hours -3.348654
P.S。 :对于情感分析,这不是一个很好的表现范围。一旦您选择了复杂的模型/更好的文本处理-结果将改善很多。