从多类分类算法输出前2类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从多类分类算法输出前2类相关的知识,希望对你有一定的参考价值。

我正在研究文本的多类分类问题,其中我有很多不同的类(超过15个)。我已经训练了Linearsvc svm方法(方法只是示例)。但是它只输出最高概率的单个类别,有没有一种算法可以同时输出两个类别的方法

我正在使用的示例代码:

    from sklearn.svm import LinearSVC
    import matplotlib.pyplot as plt
    from sklearn.feature_extraction.text import TfidfVectorizer,CountVectorizer
    count_vect = CountVectorizer( max_df=.9,min_df=.002,  encoding='latin-1', ngram_range=(1, 3))
    X_train_counts = count_vect.fit_transform(df_upsampled['text'])
    tfidf_transformer = TfidfTransformer(sublinear_tf=True,norm='l2')
    X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
    clf = LinearSVC().fit(X_train_tfidf, df_upsampled['reason'])
    y_pred = model.predict(X_test)

当前输出:

    source  user   time    text         reason
0   hi      neha    0      0:neha:hi       1
1   there   ram     1      1:ram:there     1
2   ball    neha    2      2:neha:ball     3
3   item    neha    3      3:neha:item     6
4   go there ram    4      4:ram:go there  7
5   kk       ram    5      5:ram:kk        1
6   hshs    neha    6      6:neha:hshs     2
7   ggsgs   neha    7      7:neha:ggsgs    15

期望的输出:

    source  user   time    text         reason  reason2
0   hi      neha    0      0:neha:hi       1      2
1   there   ram     1      1:ram:there     1      6
2   ball    neha    2      2:neha:ball     3      7
3   item    neha    3      3:neha:item     6      4
4   go there ram    4      4:ram:go there  7      9
5   kk       ram    5      5:ram:kk        1      2
6   hshs    neha    6      6:neha:hshs     2      3
7   ggsgs   neha    7      7:neha:ggsgs    15     1

如果我只输出一列就可以了,因为我可以拆分并从中分成两列,这没关系。

答案

[linearSVC有一个称为decision_function的方法,该方法给出了各个类别的能力分数:]

样本的置信度分数是该样本的有符号距离采样到超平面。

具有三类数据集的示例:

decision_function

以上是关于从多类分类算法输出前2类的主要内容,如果未能解决你的问题,请参考以下文章

为序数神经网络编码我的多类分类问题

大型数据库的多类分类(matlab)

在Tensorflow中限制多类分类中的输出类

单标签多类分类随机森林python

用于构建多类(相对于二进制)分类器的算法

SVM+二分类+多分类