用于返回下一个要素以拆分树的决策树实现

时间:2013-03-01 09:43:05

标签: python filter machine-learning scikit-learn decision-tree

假设我的数据由水果组成,用颜色和颜色来描述 形状和更多功能。我想返回具有用户声明的功能的X果实的最大数量,并且我想在最少数量的问题中进行。

我总是问用户的第一个问题是水果的颜色和形状。 根据用户的回答,我想问K更多的功能,如纹理大小剥离类型等。我希望K是最小的数字,将返回最准确的X结果,因此我想知道下一个功能是什么我应该问用户。 我的DB由分类为特征(任意值)的水果组成。

这是机器学习问题吗? 我应该使用什么算法以及我应该使用哪种实现。 我试图用scikit-learn,nltk,weka来寻找合适的算法来回答这个问题。这些算法都不适合回答这个问题,或者我需要更具体的指导使用它们。

谢谢!

2 个答案:

答案 0 :(得分:1)

是的。

决策树将点投射到每个要素并找到最佳拆分。这种拆分可以通过不同的指标来确定,例如:基尼指数或熵(信息收益)科学家学习在sklearn.tree中有这个

假设您有5个数据点:

 color   shape   fruit
 orange  oblong  orange
 red     round   apple
 orange  round   orange
 red     oblong  apple
 red     round   apple

所以训练你会做这样的事情:

feature   class  |  feature  class
orange    orange |  oblong   orange
red       apple  |  round    apple
orange    orange |  round    orange
red       apple  |  oblong   apple
red       apple  |  round    apple

正如你所看到的,最好的分割是颜色,因为对于这个数据集,如果color = red,那么fruit = apple,如果color = orange,那么fruit = orange。

对这些数据点进行培训,您将拥有决策树:

        color
___________________
|                 |
|                 |
red               orange
apple             orange

在现实生活中,这些分裂将基于数值,即num > .52

至于使用什么算法,这取决于。您必须对自己的数据进行研究,因为它更像是每个数据集/首选项。

您可以在上面的示例中使用sci-kit learn,如下所示:

from sklearn.trees import DecisionTreeClassifier
#make your sample matrix 
samples = [[1,1], [0,0], [1,0], [0,1], [0,0]]
#make your target vector ( in this case fruit)
fruitname = [1, 0, 1, 0, 0]
#create and fit the model
dtree =  DecisionTreeClassifier()
dtree =  dtree.fit(samples, fruitname)
#test an unknown red fruit that is oblong
dtree.predict([0,1])

请注意,color = 1表示水果为橙色,shape = 1表示水果为椭圆形。

浏览一下sci-kit user guide,了解更深入的概述。

答案 1 :(得分:0)

是的,这是机器学习问题(在某种程度上)。我会建议decision tree方法有许多不同的算法。 ID3C4.5是一种简单的算法,可以帮助您最小化深度,因为它基于最大information gain的下一个问题(分割树的下一个功能)。