R中,數據標准化方法


標准化方法(Normalization Method)
數據的標准化是將數據按比例縮放,使之落入一個小的特定區間。由於指標體系的各個指標度量單位是不同的,為了能夠將指標參與評價計算,需要對指標進行規范化處理,通過函數變換將其數值映射到某個數值區間。一般常用的有以下幾種方法。
(1) 最小-最大規范化對原始數據進行線性變換。假定MaxA與MinA分別表示屬性A的最大與最小值。最小最大規范化通過計算將屬性A的值映射到區間[a, b]上的v。一般來說,將最小-最大規范化在用於信用指標數據上,常用的有以下兩種函數形式:
變換到[0,1],

 

變換到[-1,1],

(2) z-score規范化也稱零-均值規范化。變換范圍有正有負。

(3) 十進制規范化。十進制規范化變換后使最大值的絕對值小於1。

(4)Box-Cox變換。線性回歸時,當殘差項不滿足正態分布或等方差假定時,可對被解釋變量做Box-Cox變換。

(5)對數函數轉換,表達式如下:
y=log10(x)
說明:以10為底的對數函數轉換。
(6)反余切函數轉換,表達式如下:
y=atan(x)*2/PI

## 數據變換:對數據進行規范化
# (1)最大值-最小值規范化
install.packages("caret")
library(caret)
# 將Loan數據中的loan_amnt轉化到[0,1]
help(preProcess)
#先指定處理方法
trans = preProcess(select(Loan, loan_amnt), method = c("range"))
trans
#然后使用predict函數完成處理
transformed = predict(trans, select(Loan,loan_amnt))
head(transformed)
range(transformed)

# (2)標准化(x-mean(x))/var(x)
trans = preProcess(select(Loan, loan_amnt), method = c("center","scale"))
trans
transformed = predict(trans, select(Loan,loan_amnt))
head(transformed)
mean(transformed[[1]]);var(transformed[[1]])
# (3)十進制正規化
max(abs(loan$loan_amnt))
# (4)Box-Cox變換
install.packages("e1071")
library(e1071)
#計算偏度,發現是右偏
skewness(Loan$annual_inc,na.rm = T)
#選擇Loan數據集中的數值型變量
Loan.num = select(Loan, loan_amnt,funded_amnt,funded_amnt_inv,installment,annual_inc,dti,total_pymnt)
# 對每列數值型變量都計算其偏度系數
apply(Loan.num,2,skewness,na.rm = T)
# 為了直方圖顯示效果,剔除年收入超過40萬美元的客戶
Loan.anin = Loan$annual_inc[-which(Loan$annual_inc>400000)]
library(caret)
# 使用樣本數據估計λ,估計值為-0.1,但修正后的λ估計值為0
BoxCoxTrans(Loan$annual_inc,na.rm = T)
par(mfrow=c(1,2))
hist(Loan.anin,xlab="natural units of annual_inc", main="Histogram: Original Data")
# 估計的λ為0,使用log變換
hist(log(Loan$annual_inc),
xlab = "log units of annual_inc",
main = "Histogram: after log transformation"
)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM