我正在使用j48方法开发像Akinator这样的Weka应用程序。
样品: http://jbossews-vdoctor.rhcloud.com/doctor
以下是应用程序的表定义和示例数据 qa表示问题ID(请参考可由用户设置的主人)+回答(1:是,2:我不知道,3:否)。 每1个问题1行答案。
ID,QA,类
A,13,1
A,23,1
B,13,2
B,21,2
重点是找到一种方法来选择可以最大化熵的问题。 目前这个应用程序将决策树的第一个节点ID作为最佳问题。 然后它通过这种消除方式缩小了选项。
但准确性太差,无法正确运行所以我想改进它。 我注意到qa列被识别为数字,因此无法构建正确的决策树。
我很困惑我应该做些什么来改进。数据集?表定义?逻辑?
答案 0 :(得分:0)
这是一个相当广泛的问题,你要问的是,没有代码或对问题的清楚理解很难回答,但我会给出一些改进的提示:
表格定义
这里更有意义的是每个问题都有一个属性,而不是每个问题使用一个实例。例如,您可以使用A,B,C,D,E,F和疾病代替id,qa和class。 (我相信有六个问题,并且建议命名每个属性而不是A-F)
数据集
您需要至少与疾病一样多的病例,如果不是更多用于为同一疾病定义问题空间的多个子集。在某些情况下,某些问题可能无关紧要或缺失,模型可能需要处理此类情况。
<强>逻辑强>
在这种情况下,您可以通过从根节点开始并提出问题直到达到估计的课程来进行问卷调查。这样,您可以从节点到节点询问,直到到达一个类。
我希望这有助于改善现有模式。
注意:我尝试了你的问卷并对你的所有问题回答了“否”,我奇怪的是最后得到了毛滴虫病。也许可能会出现“没有疾病”。您的培训数据类别。
答案 1 :(得分:0)
我的名义qa数据是通过二元分割构建这样的决策树。 实际上这个结构没有意义,因为只有一面有树。当qa等于23时,它将永远是&#39; 3&#39;回答。这是不合理的。
答案 2 :(得分:0)
如果你想让你的树得到一个序列,你应该首先重新格式化你的特征以获得所有可能的问题A,B,C,D ...作为二进制特征和你的最终答案(即猜测什么)作为目标类问题达到你的答案。您的数据肯定是稀疏的(许多问题没有数据/答案)。
顺便说一句,二叉树不是正确的ML结构和算法来构建Akinator或20Q / Guess-who。请在此处查看一些建议:https://stats.stackexchange.com/questions/6074/akinator-com-and-naive-bayes-classifier