Sklearn - 如何预测所有目标标签的概率

时间:2016-07-15 19:40:19

标签: python scikit-learn multilabel-classification

我有一个带有目标变量的数据集,可以有7个不同的标签。我的训练集中的每个样本只有一个目标变量的标签。

对于每个样本,我想计算每个目标标签的概率。所以我的预测将包括每行的7个概率。

在sklearn网站上,我读到了多标签分类,但这似乎不是我想要的。

我尝试了以下代码,但这只为每个样本提供了一个分类。

from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(DecisionTreeClassifier())
clf.fit(X_train, y_train)
pred = clf.predict(X_test)

有人对此有一些建议吗?谢谢!

3 个答案:

答案 0 :(得分:4)

您只需删除OneVsRestClassifer并使用predict_probaDecisionTreeClassifier方法即可。您可以执行以下操作:

clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
pred = clf.predict_proba(X_test)

这将为您提供7种可能类别的概率。

希望有所帮助!

答案 1 :(得分:2)

您可以尝试使用scikit-multilearn - sklearn的扩展,用于处理多标签分类。如果您的标签没有过度相关,您可以为每个标签训练一个分类器并获得所有预测 - 尝试(在 pip install scikit-multilearn 之后):

  echo '<div>';                
           foreach ($r['result']['achievements']['0']['achievements'] as $item) 
           {
              echo '<div class="achiev-title">'.$item['title'].'</div>
             <div class="description">'.$item['description'].'</div>

             <div class="criteria">'; 
               if(!empty($item['criteria'])) 
               {       
                  foreach ($item['criteria'] as $item2)
                  {
                    echo '<li>'.$item2['description'].'</li>';
                  }
               }
       echo '</div></br>';

         }
echo '</div>';

预测将包含大小的稀疏矩阵(n_samples,n_labels) - n_labels = 7,每列包含所有样本的每个标签的预测。

如果您的标签相关,您可能需要更复杂的方法来进行多标签分类。

免责声明:我是scikit-multilearn的作者,随时可以提出更多问题。

答案 2 :(得分:0)

如果您坚持使用def octToDec(oct): lenOct = str(oct) le = len(lenOct) octal = 0 for i in (range(le)): octal = octal + int(lenOct[i])* pow(8, le-1) le -=1 print(octal) octToDec(number) ,那么也可以调用OneVsRestClassifer支持的predict_proba(X_test)

例如:

OneVsRestClassifer

获得结果的标签顺序可在以下位置找到:

from sklearn.multiclass import OneVsRestClassifier
clf = OneVsRestClassifier(DecisionTreeClassifier())
clf.fit(X_train, y_train)
pred = clf.predict_proba(X_test)