代码之家  ›  专栏  ›  技术社区  ›  Natalie

Python监督的ML文本概率分类

  •  0
  • Natalie  · 技术社区  · 6 年前

    我正在处理一个庞大的推特数据集,从中我将一个小子集训练成四个手动分类的类别。手动分类每个大约有20条推文,而数据集有数万条推文。这是我用来训练模型的代码。

    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.feature_extraction.text import TfidfTransformer
    
    tweets = []
    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_list
    
    X_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条推文中?

    我试着研究多项式逻辑回归,但我找不到任何类型的概率输出,所以也许我只是做错了什么,或者我想知道是否有其他方法!

    1 回复  |  直到 6 年前
        1
  •  1
  •   baddog    6 年前

    您可以使用 .predict_proba() 方法 clf 获取每个推特的每个类的概率。然后,为了获得排名前100的推文,比如说,0级推文,你按照0级的概率对所有推文进行排序,并获得排名前100的推文。

    您可以轻松地使用 pandas 例如:

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