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



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

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

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

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

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

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

您可以通过

简单地删除OneVsRestClassifer并使用predict_proba DecisionTreeClassifier方法来实现。您可以执行以下操作:

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

这将为您提供 7 个可能类中每个类的概率。

希望对您有所帮助!

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

from skmultilearn.problem_transform import BinaryRelevance    
classifier = BinaryRelevance(classifier = DecisionTreeClassifier())
# train
classifier.fit(X_train, y_train)
# predict
predictions = classifier.predict(X_test)
在您的

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

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

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

如果你坚持使用 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)

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

clf.classes_

相关内容

  • 没有找到相关文章

最新更新