Scikit-Learn 决策树:预测概率是 a 还是 b?

Dav*_*ene 7 python classification machine-learning decision-tree scikit-learn

我有一个带有 Scikit-Learn 的基本决策树分类器:

#Used to determine men from women based on height and shoe size

from sklearn import tree

#height and shoe size
X = [[65,9],[67,7],[70,11],[62,6],[60,7],[72,13],[66,10],[67,7.5]]

Y=["male","female","male","female","female","male","male","female"]

#creating a decision tree
clf = tree.DecisionTreeClassifier()

#fitting the data to the tree
clf.fit(X, Y)

#predicting the gender based on a prediction
prediction = clf.predict([68,9])

#print the predicted gender
print(prediction)
Run Code Online (Sandbox Code Playgroud)

当我运行程序时,它总是输出“男性”或“女性”,但是我如何才能看到预测是男性还是女性的概率?例如,上面的预测返回“男性”,但我如何让它打印预测为男性的概率?

谢谢!

mak*_*kis 7

您可以执行以下操作:

from sklearn import tree

#load data
X = [[65,9],[67,7],[70,11],[62,6],[60,7],[72,13],[66,10],[67,7.5]]
Y=["male","female","male","female","female","male","male","female"]

#build model
clf = tree.DecisionTreeClassifier()

#fit
clf.fit(X, Y)

#predict
prediction = clf.predict([[68,9],[66,9]])

#probabilities
probs = clf.predict_proba([[68,9],[66,9]])

#print the predicted gender
print(prediction)
print(probs)
Run Code Online (Sandbox Code Playgroud)

理论

结果clf.predict_proba(X)是: 预测的类概率,即叶子中同一类样本的比例。

结果解读:

第一个print返回,['male' 'male']因此数据[[68,9],[66,9]]预测为males

第二个print返回:

[[ 0. 1.] [ 0. 1.]]

这意味着数据被预测为男性,这是由第二列中的数据报告的。

要查看类的顺序,请使用:clf.classes_

这将返回:['female', 'male']

  • 我认为你没有提供OP所寻找的概率。这只是返回一个类似的二进制答案。我假设 OP 正在寻求提供一些信心,就像在逻辑回归中一样,这样大多数值将在 0 和 1 之间,但不等于 0 或 1。我什至不确定这是否可能。 (3认同)