这是我的数据
@attribute Service_type {Fund,Loan,CD,Bank_Account,Mortgage}@attribute Customer {Student,Business,Other,Doctor,Professional}@attribute Monthly_fee real@attribute Advertisement_budget real@attribute Size {Small,Large,Medium}@attribute Promotion {Web&Email,Full,Web,None}@attribute Interest_rate real@attribute Period real@attribute Label real
这是一行对应的示例数据。
Fund,Student,0.64,0.95,Small,Full,0,10,26.72
问题在于我想预测LABEL属性,它是一个实数,但WEKA在J48决策树中没有提供这个选项。
我得到一个建议,说我需要将LABEL属性分类成不同的范围,比如LABEL大于25且小于30的定义为C1,依此类推。
我的问题是,对于J48是否有其他方法可以做到这一点,或者是否有特定的方法或理由来对数据进行分类?
回答:
你需要明确“对数据进行分类”是什么意思,因为在实值类标签的背景下,这个术语是模糊的。如果一个假设的分类器对你的示例行预测出Label=26.7200000000001,这应该被认为是正确的吗?如果是,那么在什么样的误差范围内不再是正确的?如果不是,那么由于计算机处理实数的固有性质,你可能就无能为力了。
J48无法(也确实不能)解决这些问题。它需要从有限数量的值中进行选择。传统的方法是,如你的建议所说,对变量进行离散化处理。因此,不是拥有无限数量的标签,而是为“0<=x<10”设定一个标签,为“10<=x<20”设定另一个标签,依此类推。具体如何做取决于问题本身——你需要多少精度,你能观察到的值范围是多少,等等。离散化越精细,结果分类器的准确性就可能越高,但这会以时间和所需训练数据量的增加为代价。
如果你不想像这样对输出变量进行离散化处理,另一种方法是将其视为回归问题而不是分类问题。在这种情况下,目标是输出一个实数,使得某种误差度量(例如,整个训练集上的均方误差)最小化。J48不适合这种方法。我对WEKA的使用不多,但似乎weka.classifiers.functions
命名空间包含了WEKA对回归模型的基本支持。或者,如果你想坚持使用基于决策树的东西,你可以看看weka.classifiers.trees.M5P
。
请注意,这并不是我的专业领域,但由于你在18小时左右没有收到其他回答,我想这可能会有所帮助。请记住,如果你看到与我的说法相矛盾的内容,不要自动假设我对细节的描述是正确的。