概率和机器学习

5
我将使用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
你的吸血鬼数据集是公开的吗?这样有兴趣的人可以浏览它吗? - schreon
我已将它保存为CSV文件。 - Demetri Pananos
4个回答

3
如果您正在使用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...])

2
使用DecisionTreeClassifier代替回归器,并使用predict_proba方法。或者,您可以使用逻辑回归(也可在scikit learn中使用)。
基本思路是这样的:
clf = tree.DecisionTreeClassifier()

clf=clf.fit(X,Y)


print clf.predict_proba(W)

你介意详细说明一下吗?可以加上一些代码语法吗?我访问了链接,但是很难理解。 - Demetri Pananos
@DemetriP:请看我的编辑答案。代码应该与您现有的代码几乎相同,除了我提到的更改。 - BrenBarn
我的输出只是 [[ 1. 0.]]。我该如何解释这个结果? - Demetri Pananos
@DemetriP:我相信这是在说它预测第一类的概率为1,第二类的概率为0。再次强调,这在我提供链接的文档中有说明。文档中说,类别按数字顺序排列。由于“False”是0,“True”是1,这意味着第一类是0,即不是吸血鬼。因此,模型认为这个人绝对不是吸血鬼。 - BrenBarn

0

你正在使用一个回归器,但你可能想要使用一个分类器。

你还需要使用一个可以给你后验概率的分类器,比如决策树或逻辑回归。其他分类器可能会给你一个分数(某种置信度测量),这也可能适合你的需求。


0

你想使用一个可以给出概率的分类器。此外,在测试数组W中,你需要确保数据点不是任何训练数据的复制品。如果它与任何训练数据完全匹配,那么它会认为它肯定是吸血鬼或肯定不是吸血鬼,因此会给出0或1。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接