常用的离散化方法有等宽法、 等频法和(一维) 聚类。
(1) 等宽法
该法将属性的值域分成具有相同宽度的区间, 区间的个数由数据本身的
特点决定, 或者由用户指定, 类似于制作频率分布表。
(2) 等频法
该法将相同数量的记录放进每个区间。
这两种方法简单, 易于操作, 但都需要人为地规定划分区间的个数。 同
时, 等宽法的缺点在于它对离群点比较敏感, 倾向于不均匀地把属性值分布
到各个区间。 有些区间包含许多数据, 而另外一些区间的数据极少, 这样会
严重损坏建立的决策模型。 等频法虽然避免了上述问题的产生, 却可能将相
同的数据值分到不同的区间以满足每个区间中固定的数据个数。
(3) (一维) 聚类
(一维) 聚类的方法包括两个步骤, 首先将连续属性的值用聚类算法
(如K-Means算法) 进行聚类, 然后再将聚类得到的簇进行处理, 合并到一
个簇的连续属性值并做同一标记。 聚类分析的离散化方法也需要用户指定簇
的个数, 从而决定产生的区间数。
##设置工作空间
#把“数据及程序” 文件夹复制到F盘下, 再用setwd设置工作空间
setwd("F: /数据及程序/chapter4/示例程序")
#读取数据文件, 提取标题行data=read.csv('./data/discretization_data.csv', header=T)
#等宽离散化
v1=ceiling(data[, 1] *10)
#等频离散化
names(data) ='f'#变量重命名
attach(data)
seq(0, length(f) , length(f) /6) #等频划分为6组
v=sort(f) #按大小排序作为离散化依据
v2=rep(0, 930) #定义新变量
for(i in 1: 930) v2[i] =ifelse(f[i] <=v[155] , 1,
ifelse(f[i] <=v[310] , 2,
ifelse(f[i] <=v[465] , 3,
ifelse(f[i] <=v[620] , 4,
ifelse(f[i] <=v[775] , 5, 6) ) ) ) )
detach(data)
#聚类离散化
result=kmeans(data, 6)
v3=result$cluster
#图示结果
plot(data[, 1] , v1, xlab='肝气郁结证型系数')
plot(data[, 1] , v2, xlab='肝气郁结证型系数')
plot(data[, 1] , v3, xlab='肝气郁结证型系数')
三个资料Q群下载不了也转发不了,先放这里Fine_tuning.zipLangChain.zipdata_clear.rar