Python监督机器学习文本分类到不同类别并给出概率

我正在处理一个包含大量推文的数据集,我已经从中训练了一个小部分数据,并将其手动分类为四个类别。每个手动分类包含大约二十条推文,而整个数据集则包含数万条推文。以下是我用来训练模型的代码。

from sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.model_selection import train_test_splitfrom sklearn.feature_extraction.text import CountVectorizerfrom sklearn.naive_bayes import MultinomialNBfrom sklearn.feature_extraction.text import TfidfTransformertweets = []labels_list = []tfidf = TfidfVectorizer(sublinear_tf=True, min_df=5, norm='l2', encoding='latin-1', ngram_range=(1, 2), stop_words='english')features = tfidf.fit_transform(tweets).toarray()labels = labels_listX_train, X_test, y_train, y_test = train_test_split(tweets, labels, random_state = 0)count_vect = CountVectorizer()X_train_counts = count_vect.fit_transform(X_train)tfidf_transformer = TfidfTransformer()X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)clf = MultinomialNB().fit(X_train_tfidf, y_train)

每当我输入

print(clf.predict(count_vect.transform(["Some random content"])))

如果我输入的内容与训练数据匹配,机器就会准确地输出该推文所属的标签。然而,如果我输入完全无意义的内容,它也会输出一个我知道不属于该推文的随机类别。

我的目标是找出最有可能属于该类别的100条推文,但上述四个类别并不能代表整个数据集,因此,我想知道是否有某种概率阈值可以用来排除那些概率过低的推文,不将其添加到100条推文中?

我尝试研究了多项式逻辑回归,但没有找到任何概率输出,所以如果我做错了什么,或者有其他方法,我很想知道!


回答:

你可以使用.predict_proba()方法在你的clf上获取每条推文属于每个类别的概率。然后,要获取类别0的前100条推文,你可以按类别0的概率对所有推文进行排序,并取前100条。

你可以使用pandas轻松实现这一点,例如:

import pandas as pdprobsd = pd.DataFrame(clf.predict_proba(Xtest_tfidf))top_100_class_0_tweets = probsd.sort_values(0, ascending=False).head(100).index

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注