假设我的数据包括水果,这些水果通过颜色、形状以及更多特征来描述。我希望返回最多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的用户指南以获得更深入的概述。