决策树实现用于返回下一个用于分裂树的特征

假设我的数据包括水果,这些水果通过颜色、形状以及更多特征来描述。我希望返回最多X个具有用户指定特征的水果,并且希望在最少的问题数量下完成这一点。

我总是首先询问用户水果的颜色和形状是什么。根据用户的回答,我希望再询问K个特征,如质地、大小、果皮类型等。我希望K是最小的数字,以便返回最准确的X个结果,因此我想知道我应该询问用户的下一个特征是什么。我的数据库包含按特征(任意值)分类的水果。

这是一个机器学习问题吗?我应该使用什么算法,哪个实现我应该使用?我已经尝试在scikit-learn、nltk、weka中寻找适合回答这个问题的算法。这些算法要么不适合回答这个问题,要么我需要更具体的指导来使用它们。

谢谢你!


回答:

是的,这是的。

决策树将点投影到每个特征上,并找到最佳分裂。这种分裂可以通过不同的度量来确定,例如:基尼指数或熵(信息增益)。Sci-kit learn 在 sklearn.tree 中有这个功能

假设你有5个数据点:

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

所以要训练,你会做类似这样的事情:

feature   class  |  feature  classorange    orange |  oblong   orangered       apple  |  round    appleorange    orange |  round    orangered       apple  |  oblong   applered       apple  |  round    apple

如你所见,最佳分裂是颜色,因为对于这个数据集,如果颜色=红色,那么水果=苹果,如果颜色=橙色,那么水果=橙子。

在这些数据点上训练,你将得到决策树:

        color___________________|                 ||                 |red               orangeapple             orange

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

至于使用什么算法来做这个,这取决于情况。你需要为自己的数据进行研究,因为这更多的是每个数据集/偏好的事情。

你可以像这样在上面的例子中使用sci-kit learn:

from sklearn.trees import DecisionTreeClassifier#制作你的样本矩阵 samples = [[1,1], [0,0], [1,0], [0,1], [0,0]]#制作你的目标向量(在这种情况下是水果)fruitname = [1, 0, 1, 0, 0]#创建并拟合模型dtree =  DecisionTreeClassifier()dtree =  dtree.fit(samples, fruitname)#测试一个未知的红色、长形的水果dtree.predict([0,1])

请注意,color=1表示水果是橙色,shape=1表示水果是长形的。

请查看sci-kit的用户指南以获得更深入的概述。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注