使用R并行方式对数值型数据离散化
使用R并行方式对数值型数据离散化
数据的特征按照其取值可以分为连续型和离散型。离散数值属性在数据挖掘的过程中具有重要的作用。比如在信用卡评分模型中,当自变量很多时,并非所有字段对于目标字段来说都是有效的,因此通常的做法是通过计算woe值和iv值(类似于信息增益)来初步挑选通过对目标变量重要的字段,然后建模逻辑回归模型。而这当中就需要对数值型数据离散化。
数值型数据离散化通常分为有监督离散化和无监督离散化。考虑到数据建模通常是建立目标字段和其影响因素之间的关系的量化,因此会选择有监督离散化。
R语言中用于数值型数据离散化的包discretization。安装和加载如下:
>install.packages("discretization") >library(discretization)
以R自带数据集iris为例,以”Species” 为目标字段,对”Sepal.Length”、”Sepal.Width”、”Petal.Length” 、”Petal.Width” 四个数值型属性离散化。
>lisan_result <- mdlp(iris)
>class(lisan_result)
[1] “list”
>names(lisan_result)
[1] “cutp” “Disc.data”
使用mdlp()方法对iris离散化,该方法默认数据框最后一列最后为目标字段。返回结果为列表。”cutp”为各列的分割点向量。”Disc.data”为离散化后的数据框。
该方法对于较小的样本量和维度时,程序运行时间还可以接受。但随着数据量的增大,数据维度的增加,程序运行时间会越来越长。因此考虑采用并行的方式对数据进行离散化。介绍R用于离散化的包parallel。
>install.packages(“parallel”)
>library(parallel)
>cores <- detectCores() ##查看本机虚拟核心数
> cores
[1] 4
现在考虑以并行的方式实现离散化方法。考虑设计思路如下:
1.将字段10个为一组分别与目标字段组合成数据框,(不足10个时以实际数量字段与目标字段组合)存放在一个列表中。列表的元素即离散字段与目标字段构成的数据框。
2.启动M个附属进程,并初始化。M<=本机虚拟核心数。使用parLapply()作用于步骤1中建立的列表数据。此时既有M个附属进程对数据进行离散化。
3.将步骤2中的离散化结果合并。
4.将上述步骤封装成函数。整理后使得返回结果与mdlp()函数一致。这样方便调用。
将上述设计思路写成R代码,如下:输入离散数据、使用核心数,返回结果与使用mdlp()函数相同
parallel_lisan <- function(lisan_data,cores_num){
library(parallel)
library(discretizationres <- list()
lisan_data_v <- list()
cut_point <- list()
Disc.data <- data.frame(c(rep(NA,nrow(lisan_data))))name_num = ncol(lisan_data)-1 ##将原始数据分割成多列,先考虑每组10列。不足的单独分为一组。
group_num = floor(name_num/10)
last_group_num = name_num%%10if( name_num > 10{ ##当原始数据列数多余10列
for(i in 1:group_num){
lw_flag <- lisan_data[,ncol(lisan_data)]
lisan_data_v[[i]] <- cbind(lisan_data[,(10*i-9):> (10*i)],lw_flag)
}
lisan_data_v[[group_num+1]] <- lisan_data[, (10*group_num+1):ncol(lisan_data)]
}else{
lisan_data_v[[group_num+1]] <- lisan_data[,(10*group_num+1):ncol(lisan_data)]
}cl <- makeCluster(cores_num) ##初始化核心
results <- parLapply(cl,lisan_data_v,mdlp) ##对列表数据使用mdlp函数并行离散化
for(i in 1:length(results)){
for(j in 1:length(results[[i]][[1]])){
cut_point[[(i-1)*10+j]] <- results[[i]][[1]][[j]]
}
temp <- as.data.frame(results[[i]][[2]])
Disc.data <- cbind(Disc.data,temp[,1:(ncol(temp)-1)]) ##合并离散数据结果
}Disc.data <- Disc.data[,2:ncol(Disc.data)]
Disc.data$lw_flag <- lisan_data[,ncol(lisan_data)]
names(Disc.data) <- names(lisan_data)
stopCluster(cl)
res[[“cutp”]] <- cut_point
res[[“Disc.data”]] <- Disc.datareturn(res)
}
使用R并行方式对数值型数据离散化相关推荐
- 【R】分类数据与数值型数据分组与绘图
分类数据与数值型数据分组 绘制条形图,分组条形图,堆砌条形图,饼图,直方图,茎叶图,箱线图,小提琴图,散点图,3d散点图,气泡图 #数据预处理 load("E:\\研究生学习\\大数据统计基 ...
- 一种基于随机投影的本地差分隐私高维数值型数据收集算法
一种基于随机投影的本地差分隐私高维数值型数据收集算法 孙慧中, 杨健宇, 程祥, 苏森 北京邮电大学网络与交换技术国家重点实验室,北京 100876 摘要:对满足本地差分隐私的高维数值型数据收集问题进 ...
- 一节双曲型方程基于MATLAB的求解,二维双曲型方程的分组并行格式及其数值实验...
第 28卷第 2期 2010年 6月 湖北民族学院学报 (自然科学版 ) Journal of Hubei University for Nationalities(Natural Science E ...
- R语言replace函数数值替换实战
R语言replace函数数值替换实战 目录 R语言replace函数数值替换实战 #基本语法 #仿真数据 #replace函数应用
- R并行做大数据时间序列分析与bootstrap
转载自:www.loyhome.com/r并行做大数据时间序列分析与bootstrap/ 好久没写关于经济学的文章了...今天看到两个搞matching的人拿到诺奖,瞬间想起当年和一个学心理学出身的童 ...
- 【Excel】数值型数字和文本型数字
文章目录 一.介绍 文本型数字 数值型数字 二.相互转换 文本型转数值型 数据分列法 提醒法 选择性粘贴法 数值型转文本型 数据分列法 英文单引号法 一.介绍 文本型数字 特点: 单元格默认左对齐 单 ...
- 《LabVIEW数据采集》视频教程第18集:数值型数据—无符号整形数
<LabVIEW数据采集>视频教程第18集:数值型数据-无符号整形数
- 《LabVIEW数据采集》视频教程第19集:数值型数据—复数
<LabVIEW数据采集>视频教程第19集:数值型数据-复数
- matlab符号表达式vpa,对MATLAB中符号和数值型数据以及sym(),sym(''),sym(,'d'),vpa()的理解【更新版】...
对MATLAB中符号和数值型数据以及 sym(),sym(''),sym(,'d'),vpa()的理解 [说明:正文中命令部分可以直接在matlab中运行,作者用的是MA TLAB R2009a(7. ...
最新文章
- JStorm与Storm源码分析(六)--收集器 IOutputCollector 、OutputCollector
- 构建轻量级的Table View注意事项[UIKit]
- GDCM:gdcm::terminal的测试程序
- 20--两个数组的交集
- 深度学习——行数据的分拆及如何“喂”给训练过程
- Windows 10下 jupyter notebook 安装,打开,使用,关闭方法
- InnoDB存储引擎有三大特性
- 2013年9月份第2周51Aspx源码发布详情
- java 生成 顺序 uuid_Java 生成有序 UUID
- DHI Mike 后处理工具——污染带面积、长度、宽度统计工具
- Oracle创建directory
- Windows脚本 同网段ip检测与持续ping包测试
- uc浏览器的navigator.userAgent
- nicegram安卓_Nicegram测试版
- mysql sql 不能为空_SQL为空和=空
- NVIDIA Jetson官网资料整理
- Python中字符串的操作(图文详情)
- 采购申请、采购订单、供应商
- 【2020.10.29 洛谷团队赛 普及组】T2 U138014 魔法药水
- 【日常Exception】第二十四回:nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool