我已经使用sklearn为两个类训练了SVM和NN模型。一个班级有24000条推文和另外32000条推文。
当我做验证时,就会这样给出
对于 -
text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')), ('tfidf',TfidfTransformer(use_idf=True)),('clf',MLPClassifier(activation="relu", solver='adam', alpha=0.001, hidden_layer_sizes=(5, 2), random_state=1)),])
precision recall f1-score support
disaster 1.00 1.00 1.00 12862
nondisaster 1.00 1.00 1.00 9543
micro avg 1.00 1.00 1.00 22405
macro avg 1.00 1.00 1.00 22405
weighted avg 1.00 1.00 1.00 22405
对于
text_clf = Pipeline([('vect', CountVectorizer(stop_words='english')), ('tfidf',TfidfTransformer(use_idf=True)),('clf',SGDClassifier(loss='hinge', penalty='l2', alpha=1e-3, random_state=42, verbose=1)),])
text_clf.fit(X_train, y_train)
precision recall f1-score support
disaster 1.00 1.00 1.00 6360
nondisaster 1.00 1.00 1.00 4842
micro avg 1.00 1.00 1.00 11202
macro avg 1.00 1.00 1.00 11202
weighted avg 1.00 1.00 1.00 11202
当我将NN模型中的alpha
值从0.001更改为0.00001时
precision recall f1-score support
disaster 1.00 0.99 0.99 12739
nondisaster 0.98 1.00 0.99 9666
micro avg 0.99 0.99 0.99 22405
macro avg 0.99 0.99 0.99 22405
weighted avg 0.99 0.99 0.99 22405
当我测试几个记录时,它总是偏向于一个类。例如,SVM预测非灾难的每个输入,NN将其用于灾难类。
任何想法或建议我如何微调这个模型?
据我所知,当数据集有偏差时会发生这种情况。我相信Garbage in-Garbage out的概念。
您可以将您的列车测试数据可视化。我相信这会有偏见。
话虽如此,假设您的用例是通过推文进行灾难预测,可以理解的是,如果您随机发送一组推文,那么千分之一甚至不会发生灾难。
因此,明智的做法是将查询范围缩小到精致的主题和用户,以便获得足够好的数据集。
思考?
谢谢阿伦