我是靠谱客的博主 老迟到寒风,最近开发中收集的这篇文章主要介绍数据处理之连续数据离散化,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一些数据挖掘算法,比如Apriori算法等,要求数据是分类属性形式,需要进行连续数据离散化。

连续数据离散化就是在数据的取值范围内,设定若干个离散的划分点,将取值范围划分为一些离散化的区间,最后用不同的符号或整数值代表落在每个子区间中的数据值。

离散化涉及两个子任务:

1、确定分类数

2、将连续属性值映射到这些分类值

 

举例1,先导入数据,如下:

常用的离散化方法:

1、等宽法

将数据的值域分成具有相同宽度的区间。区间的个数根据数据特点或用户指定。

缺点是对离群点比较敏感,不均匀地分布数据。

R语言:

v1 = ceiling(data[,1]*10) #宽度设为1,进行等宽离散化

Python:

import pandas as pd
data = pd.read_excel('discretization_data.xls')
data = data[u'肝气郁结证型系数'].copy()
k = 4
d1 = pd.cut(data,k,labels=range(k))

2、等频法

将相同数量的记录放进每个区间。

缺点是可能将相同的数据分到不同的区间。

R语言:

names(data) = 'f' #变量重命名
attach(data)
seq(0,length(f),length(f)/6) 等频分为6组,结果是每组的索引值
v = sort(f) #按大小排序,作为离散化的依据
v2 = rep(0,930) 定义新变量,930个0
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))))) #通过ifelse()条件判断函数分组
detach(data)

Python:

w = [i/k for i in range(k+1)]
w = data.describe(percentiles=w)[4:4+k+1] #计算分位数
w[0] = w[0]*(1-1e-10)
d2 = pd.cut(data,w,labels=range(k))

3、基于聚类分析的方法

两个步骤:

(1)将连续属性的值用聚类算法进行聚类,需要用户指定分组个数。

(2)将聚类得到的簇进行处理,合并到一个簇的连续属性值,并做统一标记。

R语言:

result = kmeans(data,6)
v3 = result$cluster

Python:

from sklearn.cluster import KMeans
kmodel = KMeans(n_clusters=k,n_jobs=4) #建立模型,n_jobs是并行数,一般等于CPU个数
kmodel.fit(data.values.reshape((len(data),1))) #训练模型,reshape是数组的方法
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(by=0) #输出聚类中心,并且排序
w = c.rolling(2).mean().iloc[1:] #相邻两项求中点,作为边界点
w = [0] + list(w[0]) + [data.max()] #把首末边界点加上
d3 = pd.cut(data,w,labels=range(k))

 

举例2:

原始数据如下:

type = 4 #离散化的分组个数
index = 8 #TNM分期数据所在列
typelabel = c("A","B","C","D","E","F") #离散化后的标识前缀
set.seed(1234)
cols = ncol(datafile[,1:6])
rows = nrow(datafile[,1:6])
disdata = matrix(NA,rows,cols+1) #初始化为NA
for (i in 1:cols) {
+ cl = kmeans(datafile[,i],type,nstart = 20)
+ disdata[,i] = paste(typelabel[i],cl$cluster)
+ } #分别对单个属性列进行聚类
disdata[,cols+1] = datafile[,index]
disdata[,cols+1] = paste("H",disdata[,cols+1],sep="") #增加TNM分期数据所在列

 

最后

以上就是老迟到寒风为你收集整理的数据处理之连续数据离散化的全部内容,希望文章能够帮你解决数据处理之连续数据离散化所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部