由于取值范围大的变量会在测算距离时被赋予较大的权重,降低取值范围小的数据对结果的影响,所以要对原始变量进行规范化处理。
读取数据: 或者将Excel文件保存为csv(逗号分隔)型文件,然后用read函数读取: 但这种方法可能造成数据缺失或错误
统一期望和方差 (1)caret包中:preProcess(x, …) (2)R内置scale()函数 例:
x = ( x − min x ) ( max x − min x ) {\rm{x}} = \frac{{(x - {{\min }_x})}}{{({{\max }_x} - {{\min }_x})}} x=(maxx−minx)(x−minx) (1) (2)
x i j = 2 x i j − min ( x k j ) max ( x i j ) − min ( x i j ) − 1 {{\rm{x}}_{ij}} = 2\frac{{{x_{ij}} - \min ({x_{kj}})}}{{\max ({x_{ij}}) - \min ({x_{ij}})}} - 1 xij=2max(xij)−min(xij)xij−min(xkj)−1
样本如果是近似对称,偏度大致为0,右偏数据偏度为正,左偏的偏度为负。
样本偏度: s k e w n e s s = E [ x − μ δ ] 3 skewness = E{[\frac{{x - \mu }}{\delta }]^3} skewness=E[δx−μ]3 或者利用e1071包中skewness函数: library(e1071) apply(Loan,2,skewness,na,rm=T)
存在明显的右偏分布特征,使用box-cox变换: x ~ = log x , λ = 0 \tilde x = \log x,\lambda = 0 x~=logx,λ=0 x ~ = x λ − 1 λ , λ ≠ 0 \tilde x = \frac{{{x^\lambda } - 1}}{\lambda },\lambda \ne 0 x~=λxλ−1,λ̸=0
对annual这一列数据规范化,观察直方图,变换后的更对称:
或者用e1071包中的BoxCoxTrans()函数估计λ: (有缺失值的话加上na.rm=T)
对Loan中每一列数据做box-cox变换: 或者
