我在Weka中使用决策树,并且我有一些连续数据,所以当我使用Weka时,它会自动为我找到阈值,但出于某些原因我想自己实现决策树,所以我需要知道使用什么方法来找到阈值以离散化我的连续数据?
回答:
ID3 和 C4.5 使用熵启发式方法来离散化连续数据。该方法为每个变量(特征)找到一个二元切割。你可以递归地应用相同的方法,从连续数据中获得多个区间。
假设在某个树节点上,所有实例属于集合S
,你正在处理变量A
和特定的边界(切割)T
,由T
诱导的分区的类信息熵,记作E(A,T,S)
,由以下公式给出:
|S1| |S2|E(A, T, S) = ---- Entropy(S1) + ---- Entropy(S2) |S| |S|
其中|S1|
是第一分区中的实例数量;|S2|
是第二分区中的实例数量;|S| = |S1|+|S2|
。
对于给定的特征A
,在所有可能的分区边界中最小化熵函数的边界T_min
被选为二元离散化边界。
例如,你可能有一个变量Length
,其所有可能的值为:
Length = {2.1, 2.8, 3.5, 8.0, 10.0, 20.0, 50.0, 51.0}
那么你的T
可以是:
T = {2.1, 2.8, 3.5, 8.0, 10.0, 20.0, 50.0, 51.0}
其中你在每个可能的Length
值处进行切割。你也可以在相邻的Length
值的中间点处进行切割,例如,
T = {2.45, 3.15, 5.75, 9.0, 15.0, 35.0, 50.5}
在离散化时,你将遍历所有可能的T
值,并评估哪个值能获得最小的E(A, T, S)
。就是这样。
更多细节请参见这篇论文,其中还描述了其他可选方法:
- ChiMerge离散化方法。
- 基于学习向量量化(LVQ)的方法
- 基于直方图的方法。