卡方分裂算法是把整个属性值区间当做一个离散的属性值,然后对该区域进行划分,把一个区间分为两个相邻的区间,每个区间对应一个离散的属性值,该划分一直进行下去,直到满足某种停止条件。
例如对一个数据集,从值域中任意一处插入一个断点,对其进行卡方检验得出卡方值,而后不断对不同的断点进行卡方检验,比较各自卡方值,取卡方值最大值断点处为第一次分裂的断点,将值域一分为二;
然后类似地,进行第二次分裂,得出第二个断点将值域分为3个区间,如此分裂下去;
直到满足p值>=α(取0.05)时停止分裂,即卡方分裂停止准则为:当p值<α,继续分裂区间;当p值>=α,停止分裂区间。
若用java(或者scala)实现这种算法,应如何实现?