2013-11-09 51 views
4

我正在使用python来做一些机器学习。概率和机器学习

我有一个具有2000个条目的python nd数组。每个条目都有关于一些主题的信息,最后有一个布尔值来告诉我他们是不是吸血鬼。

阵列中的每个条目看起来是这样的:

[height(cm), weight(kg), stake aversion, garlic aversion, reflectance, shiny, IS_VAMPIRE?] 

我的目标是能够给出一个概率的一个新课题,给出了对象上面显示的数据的吸血鬼。

我用sklearn做一些机器学习对我来说:

clf = tree.DecisionTreeRegressor() 

clf=clf.fit(X,Y) 


print clf.predict(W) 

其中w是数据的新课题的数组。我写的脚本返回布尔值,但我希望它返回概率。我如何修改它?

+1

是您的吸血鬼dataset public,所以感兴趣的人可以看看吗? – schreon

+0

我把它作为一个CSV文件。 –

回答

2

使用DecisionTreeClassifier而不是回归器,并使用predict_proba方法。或者,你可以使用一个逻辑回归

的基本思路是这样的(也可以在scikit学习。):

clf = tree.DecisionTreeClassifier() 

clf=clf.fit(X,Y) 


print clf.predict_proba(W) 
+0

你介意一点点吗?也许包括一些sintax?我访问了这个链接,但我很难理解。 –

+0

@DemetriP:看到我编辑的答案。代码应该与您现有的代码几乎相同,除了我提到的更改。 – BrenBarn

+0

我的输出只是'[[1.0]]'。我如何解释这一点? –

0

您希望使用的分类,让您的概率。此外,您需要确保在您的测试数组W中,数据点不是您的任何训练数据的复制品。如果它与你的任何训练数据完全一致,它认为它绝对是吸血鬼或绝对不是吸血鬼,所以会给你0或1.

2

如果你使用DecisionTreeRegressor(),那么你可以使用score函数来确定预测的决定系数R^2。

请在以下链接中找到相关文档。

http://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html#sklearn.tree.DecisionTreeRegressor

你也可以列出交叉验证得分(10个样品),如下

from sklearn.model_selection import cross_val_score 


clf = tree.DecisionTreeRegressor() 

clf=clf.fit(X,Y) 

cross_val_score(clf, X, Y, cv=10) 

print clf.predict(W) 

这提供了一种类似于这样的输出的东西,

array([ 0.61..., 0.57..., -0.34..., 0.41..., 0.75..., 
     0.07..., 0.29..., 0.33..., -1.42..., -1.77...])