亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在R語言中實現數據預處理操作

發布時間:2021-03-11 16:16:59 來源:億速云 閱讀:534 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在R語言中實現數據預處理操作,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

一、項目環境

開發工具:RStudio

R:3.5.2

相關包:infotheo,discretization,smbinning,dplyr,sqldf

二、導入數據

# 這里我們使用的是鳶尾花數據集(iris)
data(iris)
head(iris)

Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
15.13.51.40.2setosa
24.93.01.40.2setosa
34.73.21.30.2setosa
44.63.11.50.2setosa
55.03.61.40.2setosa
65.43.91.70.4setosa

相關數據解釋:

Sepal.Length:萼片長度

Sepal.Width:萼片寬度

Petal.Length:花瓣長度

Petal.Width:花瓣寬度

Species:鳶尾花品種

三、 數據劃分

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

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

四、 無監督分箱

常見的幾種無監督分箱方法

等寬分箱法

等頻分箱法

kmeans分箱法

1、 分箱前準備法

# 導入無監督分箱包——infotheo
library(infotheo)
# 分成幾個區域
nbins <- 3

2、 等寬分箱法

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

怎么在R語言中實現數據預處理操作

怎么在R語言中實現數據預處理操作

3、 等頻分箱

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

怎么在R語言中實現數據預處理操作

怎么在R語言中實現數據預處理操作

4、kmeans分箱法

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

怎么在R語言中實現數據預處理操作

五、 有監督分箱

discretization提供了幾個主要的離散化的工具函數:

chiM,ChiM算法進行離散化

chi2, Chi2算法進行離散化

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

modChi2,改進的Chi2方法離散數值屬性

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

extendChi2,擴展Chi2算法離散數值屬性

smbinning提供的工具函數:

smbinning ,基于構造條件推斷樹ctree的監督式分箱

1、chiM算法進行離散化

### 有監督的數據離散化
library(discretization)# 有監督分箱
# 使用ChiMerge算法基于卡方檢驗進行自下而上的合并
chi1 <- chiM(iris_train, alpha = 0.05) # alpha 為顯著性指標
apply(chi1$Disc.data,2,table)
# 保存闕值
depreciation <- chi1$cutp[[2]]
## 其他有監督分享算法
# 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)     # 使用熵準則將最小描述長度作為停止規則來離散化
# d1 <- disc.Topdown(iris,method=1) # 該功能實現了三種自上而下的離散化算法(CAIM,CACC,Ameva)

怎么在R語言中實現數據預處理操作

2、基于構造條件推斷樹ctree的監督式分箱

# 分箱前數據準備
library(smbinning) 
# 查看測試用例
head(smbsimdf1)
fgoodcbs1cbs2cbinqcblinecbtermcblineutcbtobcbdpdcbnewpmttobdpddepdcodhomeincddonlinerndperiod
160.11NA0220047.513615NoNoM200No10481.402001NoW0600Yes0.466410292018-03-31
145.6266.720220252.362224NoNoA102Hi10182.431701NoW1000Yes0.919802862018-05-31
130.8666.940220035.896405NoYesM202Hi9645.372300NoW0500Yes0.338040092018-07-31
162.3849.120230141.935786NoNoP400No13702.763101No
00Yes0.764756002017-12-31
154.3641.220010044.236625NoNoP400No18720.092602YesW0801Yes0.585637952018-02-28
168.7850.800000043.592487YesYesA401Lo10217.073100NoW0900Yes0.057563962018-03-31

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

其次它要求用于學習的列必須是二分類,且數據類型必須是numeric,二分類的值也必須是(0, 1) 。也是因為這些原因,為了方便在這里使用包中自帶的數據集。

# 使用smbinning函數進行分箱,df 為原始數據,y表示目標標簽,x表示需要分箱的標簽result <- smbinning(df = smbsimdf1,y = "fgood",x = "cbs1") 
# 查看分箱結果的分布情況,不良率和證據權重
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")

怎么在R語言中實現數據預處理操作

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

怎么在R語言中實現數據預處理操作

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

怎么在R語言中實現數據預處理操作

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

六、 使用闕值對測試集進行分箱操作

上述方法中,除了最后一種方法,我們都沒有將訓練好的函數用于測試集。但是在實際的分析,我們讓數據離散化最主要的目的更多的是為了降低機器學習的負擔。

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

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

怎么在R語言中實現數據預處理操作

以上就是怎么在R語言中實現數據預處理操作,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尼玛县| 长春市| 惠水县| 芒康县| 二连浩特市| 宜川县| 三原县| 达孜县| 叙永县| 郸城县| 青州市| 开化县| 松原市| 天全县| 阿拉善左旗| 延边| 广丰县| 嘉义市| 田林县| 南溪县| 临清市| 白河县| 大庆市| 晋宁县| 青海省| 玉田县| 长宁区| 政和县| 洛隆县| 九寨沟县| 探索| 邵阳县| 湛江市| 金溪县| 通州市| 阳原县| 娄底市| 辽宁省| 云南省| 吉林市| 邵东县|