欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

R語言數(shù)據(jù)預(yù)處理操作——離散化(分箱)

 更新時(shí)間:2021年03月11日 14:56:46   作者:Y_Wolf  
這篇文章主要介紹了R語言數(shù)據(jù)預(yù)處理操作——離散化(分箱),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

一、項(xiàng)目環(huán)境

開發(fā)工具:RStudio

R:3.5.2

相關(guān)包:infotheo,discretization,smbinning,dplyr,sqldf

二、導(dǎo)入數(shù)據(jù)

# 這里我們使用的是鳶尾花數(shù)據(jù)集(iris)
data(iris)
head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa

相關(guān)數(shù)據(jù)解釋:

Sepal.Length:萼片長度

Sepal.Width:萼片寬度

Petal.Length:花瓣長度

Petal.Width:花瓣寬度

Species:鳶尾花品種

三、 數(shù)據(jù)劃分

library(dplyr)
library(sqldf)
# 為數(shù)據(jù)集增加序號(hào)列(id)
iris$id <- c(1:nrow(iris))
# 將鳶尾花數(shù)據(jù)集中70%的數(shù)據(jù)劃分為訓(xùn)練集
iris_train <- sample_frac(iris, 0.7, replace = TRUE)
# 使用sql語句將剩下的30%花費(fèi)為測(cè)試集
iris_test <- sqldf("
    select *
    from iris
    where id not in (
    select id
    from iris_train
    )
    ")
# 去除序號(hào)列(id)
iris_train <- iris_train[,-6]
iris_test <- iris_test[,-6]

【注】:這里使用到sqldf包的函數(shù)sqldf函數(shù)來時(shí)間在R語言中使用SQL語句

四、 無監(jiān)督分箱

常見的幾種無監(jiān)督分箱方法

等寬分箱法

等頻分箱法

kmeans分箱法

1、 分箱前準(zhǔn)備法

# 導(dǎo)入無監(jiān)督分箱包——infotheo
library(infotheo)
# 分成幾個(gè)區(qū)域
nbins <- 3 

2、 等寬分箱法

### 等寬分箱的原理非常簡(jiǎn)單,就是按照相同的間距將數(shù)據(jù)分成相應(yīng)的等分
# 將連續(xù)型數(shù)據(jù)分成三份,并以1、2、3賦值
equal_width <- discretize(iris_train$Sepal.Width,"equalwidth",nbins)
### 查看分箱情況
# 查看各分類數(shù)量
table(equal_width)
# 用顏色表明是等寬分箱
plot(iris_train$Sepal.Width, col = equal_width$X)
### 保存每個(gè)等分切割點(diǎn)的值(闕值)
# 計(jì)算各個(gè)分類相應(yīng)的切割點(diǎn)
width <- (max(iris_train$Sepal.Width)-min(iris_train$Sepal.Width))/nbins
# 保存闕值
depreciation <- width * c(1:nbins) + min(iris_train$Sepal.Width)

3、 等頻分箱

### 等頻分箱是將數(shù)據(jù)均勻的分成相應(yīng)的等分(數(shù)量不一定是完全相同的)
# 將連續(xù)型數(shù)據(jù)分成三份,并以1、2、3賦值
equal_freq <- discretize(iris_train$Sepal.Width,"equalfreq",nbins)
### 查看分箱情況
# 查看各分類數(shù)量
table(equal_width)
# 用顏色表明是等頻分箱
plot(iris_train$Sepal.Width, col = equal_freq$X)
### 保存每個(gè)等分切割點(diǎn)的值(闕值)
data <- iris_train$Sepal.Width[order(iris_train$Sepal.Width)]
depreciation <- as.data.frame(table(equal_freq))$Freq

4、kmeans分箱法

# kmeans分箱法,先給定中心數(shù),將觀察點(diǎn)利用歐式距離計(jì)算與中心點(diǎn)的距離進(jìn)行歸類,再重新計(jì)算中心點(diǎn),直到中心點(diǎn)# 不再發(fā)生變化,以歸類的結(jié)果做為分箱的結(jié)果。
# 將連續(xù)型數(shù)據(jù)分成三份,并以1、2、3賦值
k_means <- kmeans(iris_train$Sepal.Width, nbins)
# 查看各分類數(shù)量
table(k_means$cluster)
# 查看實(shí)際分箱狀況
k_means$cluster
# 保存闕值
# rev() 的作用是倒置數(shù)據(jù)框
# 統(tǒng)一從左往右,從大到小
depreciation <- rev(k_means$centers)

五、 有監(jiān)督分箱

discretization提供了幾個(gè)主要的離散化的工具函數(shù):

chiM,ChiM算法進(jìn)行離散化

chi2, Chi2算法進(jìn)行離散化

mdlp,最小描述長度原理(MDLP)進(jìn)行離散化

modChi2,改進(jìn)的Chi2方法離散數(shù)值屬性

disc.Topdown,自上而下的離散化

extendChi2,擴(kuò)展Chi2算法離散數(shù)值屬性

smbinning提供的工具函數(shù):

smbinning ,基于構(gòu)造條件推斷樹ctree的監(jiān)督式分箱

1、chiM算法進(jìn)行離散化

### 有監(jiān)督的數(shù)據(jù)離散化
library(discretization)# 有監(jiān)督分箱
# 使用ChiMerge算法基于卡方檢驗(yàn)進(jìn)行自下而上的合并
chi1 <- chiM(iris_train, alpha = 0.05) # alpha 為顯著性指標(biāo)
apply(chi1$Disc.data,2,table)
# 保存闕值
depreciation <- chi1$cutp[[2]]
## 其他有監(jiān)督分享算法
# chi2 <- chi2(iris,alp=0.5,del=0.05) # chi2()算法
# chi3 <- modChi2(iris,alp=0.5)  # modChi2()算法
# chi4 <- extendChi2(iris,alp = 0.5) # extendChi2()算法
# m1 <- mdlp(iris)     # 使用熵準(zhǔn)則將最小描述長度作為停止規(guī)則來離散化
# d1 <- disc.Topdown(iris,method=1) # 該功能實(shí)現(xiàn)了三種自上而下的離散化算法(CAIM,CACC,Ameva)

2、基于構(gòu)造條件推斷樹ctree的監(jiān)督式分箱

# 分箱前數(shù)據(jù)準(zhǔn)備
library(smbinning) 
# 查看測(cè)試用例
head(smbsimdf1)
fgood cbs1 cbs2 cbinq cbline cbterm cblineut cbtob cbdpd cbnew pmt tob dpd dep dc od home inc dd online rnd period
1 60.11 NA 02 2 00 47.51361 5 No No M 2 00No 10481.40 20 01 No W06 00 Yes 0.46641029 2018-03-31
1 45.62 66.72 02 2 02 52.36222 4 No No A 1 02Hi 10182.43 17 01 No W10 00 Yes 0.91980286 2018-05-31
1 30.86 66.94 02 2 00 35.89640 5 No Yes M 2 02Hi 9645.37 23 00 No W05 00 Yes 0.33804009 2018-07-31
1 62.38 49.12 02 3 01 41.93578 6 No No P 4 00No 13702.76 31 01 No 00 Yes 0.76475600 2017-12-31
1 54.36 41.22 00 1 00 44.23662 5 No No P 4 00No 18720.09 26 02 Yes W08 01 Yes 0.58563795 2018-02-28
1 68.78 50.80 00 0 00 43.59248 7 Yes Yes A 4 01Lo 10217.07 31 00 No W09 00 Yes 0.05756396 2018-03-31

【注】:這里之所以不適用鳶尾花數(shù)據(jù)集的原因在于,這個(gè)函數(shù)的使用條件較為苛刻。首先它不允許數(shù)據(jù)集的列名中含有 “.” ,比如 鳶尾花數(shù)據(jù)集中的“Sepal.Width”就不可以。

其次它要求用于學(xué)習(xí)的列必須是二分類,且數(shù)據(jù)類型必須是numeric,二分類的值也必須是(0, 1) 。也是因?yàn)檫@些原因,為了方便在這里使用包中自帶的數(shù)據(jù)集。

# 使用smbinning函數(shù)進(jìn)行分箱,df 為原始數(shù)據(jù),y表示目標(biāo)標(biāo)簽,x表示需要分箱的標(biāo)簽result <- smbinning(df = smbsimdf1,y = "fgood",x = "cbs1") 
# 查看分箱結(jié)果的分布情況,不良率和證據(jù)權(quán)重
par(mfrow=c(2,2))
boxplot(smbsimdf1$cbs1~smbsimdf1$fgood,horizontal=T, frame=F, col="lightgray",main="Distribution")
smbinning.plot(result,option="dist")
smbinning.plot(result,option="badrate")
smbinning.plot(result,option="WoE")

result$ivtable # 相關(guān)重要信息
result$ctree # 決策樹
result$cuts # 闕值
smbinning.sql(result) # 輸出相應(yīng)的sql語句

# 使用訓(xùn)練好的函數(shù)對(duì)數(shù)據(jù)進(jìn)行分箱(訓(xùn)練集和測(cè)試集都需要)
smbsimdf1 <- smbinning.gen(smbsimdf1, result, chrname = "gcbs1")
# 查看分箱情況
table(smbsimdf1$gcbs1)

【注】:除此之外也可以用smbinning.sql(result) 生成的sql語句,配合sqldf包進(jìn)行數(shù)據(jù)分箱操作。

六、 使用闕值對(duì)測(cè)試集進(jìn)行分箱操作 ​

上述方法中,除了最后一種方法,我們都沒有將訓(xùn)練好的函數(shù)用于測(cè)試集。但是在實(shí)際的分析,我們讓數(shù)據(jù)離散化最主要的目的更多的是為了降低機(jī)器學(xué)習(xí)的負(fù)擔(dān)。

因此我們除了需要對(duì)訓(xùn)練集進(jìn)行分箱操作之外,將同樣的分箱方法作用與測(cè)試集。那么下面我們就將使用之前得到的闕值,對(duì)測(cè)試集進(jìn)行分享操作。

### 對(duì)測(cè)試集進(jìn)行分箱操作
# 使用之前保存的闕值
# 這里之所以要前后加上Inf,是為了讓它的范圍能夠向正負(fù)無窮延伸
# (-Inf, a],[b, Inf)
break1<-c(-Inf,depreciation,Inf)
labels = c("差", "中", "良", "優(yōu)")
# 第一個(gè)值是數(shù)據(jù)
# 第一個(gè)值是分箱的區(qū)間
# 第三個(gè)值是替換成的數(shù)
# ordered_result表示被替換成的數(shù)是否有前后順序
iris_test$Sepal.Width <- cut(iris_test$Sepal.Width,break1,labels,ordered_result = T)
iris_test$Sepal.Width

七、 結(jié)語

本文更多的是從實(shí)際操作的角度進(jìn)行說明,之間涉及到的很多算法的原理沒有進(jìn)行過多的說明。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • R語言關(guān)于生存分析知識(shí)點(diǎn)總結(jié)

    R語言關(guān)于生存分析知識(shí)點(diǎn)總結(jié)

    在本篇文章里,小編給大家整理的是一篇關(guān)于R語言生存分析的相關(guān)知識(shí)點(diǎn)及實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下吧。
    2021-05-05
  • R語言中na.fail和na.omit的用法

    R語言中na.fail和na.omit的用法

    這篇文章主要介紹了R語言中na.fail和na.omit的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言histogram(直方圖)的具體使用

    R語言histogram(直方圖)的具體使用

    這篇文章主要介紹了R語言histogram(直方圖)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • R語言學(xué)習(xí)代碼格式一鍵美化

    R語言學(xué)習(xí)代碼格式一鍵美化

    這篇文章主要為大家講解介紹了R語言學(xué)習(xí)中代碼格式一鍵美化的實(shí)現(xiàn)過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • R語言繪制Bubble Matrix氣泡矩陣圖

    R語言繪制Bubble Matrix氣泡矩陣圖

    這篇文章主要為大家介紹了R語言繪制Bubble Matrix氣泡矩陣圖的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-02-02
  • R語言運(yùn)行環(huán)境安裝配置詳解

    R語言運(yùn)行環(huán)境安裝配置詳解

    這篇文章主要介紹了R語言運(yùn)行環(huán)境安裝配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • R語言矩陣知識(shí)點(diǎn)總結(jié)及實(shí)例分析

    R語言矩陣知識(shí)點(diǎn)總結(jié)及實(shí)例分析

    在本篇文章里小編給各位整理了一篇關(guān)于R語言矩陣知識(shí)點(diǎn)總結(jié)及實(shí)例分析,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • R語言讀取xls與xlsx格式文件過程

    R語言讀取xls與xlsx格式文件過程

    這篇文章主要為大家介紹了使用R語言讀取xls與xlsx格式文件的過程步驟,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2021-11-11
  • R語言-如何實(shí)現(xiàn)卡方檢驗(yàn)

    R語言-如何實(shí)現(xiàn)卡方檢驗(yàn)

    這篇文章主要介紹了R語言實(shí)現(xiàn)卡方檢驗(yàn)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • R語言Legend函數(shù)深入詳解

    R語言Legend函數(shù)深入詳解

    這篇文章主要介紹了R語言Legend函數(shù)深入詳解,圖文介紹的很詳細(xì),有感興趣的同學(xué)可以研究下
    2021-03-03

最新評(píng)論