59doit
[ R ] 변수제거 본문
반응형
주성분 분석
0에 가까운 분산을 가지는 변수 제거
분산이 0에 가까운 변수는 제거해도 큰 영향이 없음.
nearZeroVar()함수
- 'saveMetrics=FALSE'속성: 예측변수의 컬럼위치에 해당하는 정수 벡터
- 'saveMetrics=TRUE'속성: 컬럼을 가지는 데이터프레임
- freqRatio: 가장 큰 공통값 대비 두번째 큰 공통값의 빈도의 비율
- percentUnique: 데이터 전체로 부터 고유 데이터의 비율
- zeroVar: 예측변수가 오직 한개의 특이값을 갖는지 여부에 대한 논리 벡터
- nzv: 예측변수가 0에 가까운 분산예측 변수인지 여부에 대한 논리 벡터
ex)
#1 패키지 설치 및 iris 데이터 불러오기
install.packages("caret") library(caret) install.packages("mlbench") library(mlbench) nearZeroVar(iris, saveMetrics=TRUE) # freqRatio percentUnique zeroVar nzv # Sepal.Length 1.111111 23.33333 FALSE FALSE # Sepal.Width 1.857143 15.33333 FALSE FALSE # Petal.Length 1.000000 28.66667 FALSE FALSE # Petal.Width 2.230769 14.66667 FALSE FALSE # Species 1.000000 2.00000 FALSE FALSE # iris 데이터 data(Soybean) head(Soybean) |
- nearZeroVar 함수사용
- 'saveMetrics=TRUE'속성: 컬럼을 가지는 데이터프레임
- iris 0에 가까운 데이터 없음
#2 library(mlbench) 에 존재하는 Soybean 데이터 불러오기
data(Soybean) head(Soybean) nearZeroVar(Soybean, saveMetrics=TRUE) # freqRatio percentUnique zeroVar nzv # Class 1.010989 2.7818448 FALSE FALSE # date 1.137405 1.0248902 FALSE FALSE # plant.stand 1.208191 0.2928258 FALSE FALSE # precip 4.098214 0.4392387 FALSE FALSE # temp 1.879397 0.4392387 FALSE FALSE # hail 3.425197 0.2928258 FALSE FALSE # crop.hist 1.004587 0.5856515 FALSE FALSE # area.dam 1.213904 0.5856515 FALSE FALSE # sever 1.651282 0.4392387 FALSE FALSE # seed.tmt 1.373874 0.4392387 FALSE FALSE # germ 1.103627 0.4392387 FALSE FALSE # plant.growth 1.951327 0.2928258 FALSE FALSE # leaves 7.870130 0.2928258 FALSE FALSE # leaf.halo 1.547511 0.4392387 FALSE FALSE # leaf.marg 1.615385 0.4392387 FALSE FALSE # leaf.size 1.479638 0.4392387 FALSE FALSE # leaf.shread 5.072917 0.2928258 FALSE FALSE # leaf.malf 12.311111 0.2928258 FALSE FALSE # leaf.mild 26.750000 0.4392387 FALSE TRUE # stem 1.253378 0.2928258 FALSE FALSE # lodging 12.380952 0.2928258 FALSE FALSE # stem.cankers 1.984293 0.5856515 FALSE FALSE # canker.lesion 1.807910 0.5856515 FALSE FALSE # fruiting.bodies 4.548077 0.2928258 FALSE FALSE # ext.decay 3.681481 0.4392387 FALSE FALSE # mycelium 106.500000 0.2928258 FALSE TRUE # int.discolor 13.204545 0.4392387 FALSE FALSE # sclerotia 31.250000 0.2928258 FALSE TRUE # fruit.pods 3.130769 0.5856515 FALSE FALSE # fruit.spots 3.450000 0.5856515 FALSE FALSE # seed 4.139130 0.2928258 FALSE FALSE # mold.growth 7.820896 0.2928258 FALSE FALSE # seed.discolor 8.015625 0.2928258 FALSE FALSE # seed.size 9.016949 0.2928258 FALSE FALSE # shriveling 14.184211 0.2928258 FALSE FALSE # roots 6.406977 0.4392387 FALSE FALSE |
- nearZeroVar 함수사용
- 'saveMetrics=TRUE'속성: 컬럼을 가지는 데이터프레임
- nzv = 'TRUE' 인 leaf.mild, mycelium, sclerotia 변수를 제거 해도 큰 영향이 없으므로 leaf.mild, mycelium, sclerotia 변수를 제거 한다.
상관관계가 높은 변수 제거
상관관계가 높은 컬럼을 제외
findCorrelation()함수
ex)
#1 패키지 설치 및 Vehicle 데이터 불러오기
library(caret) library(mlbench) data(Vehicle) head(Vehicle) # Comp Circ D.Circ Rad.Ra Pr.Axis.Ra Max.L.Ra Scat.Ra Elong Pr.Axis.Rect Max.L.Rect Sc.Var.Maxis # 1 95 48 83 178 72 10 162 42 20 159 176 # 2 91 41 84 141 57 9 149 45 19 143 170 # 3 104 50 106 209 66 10 207 32 23 158 223 # 4 93 41 82 159 63 9 144 46 19 143 160 # 5 85 44 70 205 103 52 149 45 19 144 241 # 6 107 57 106 172 50 6 255 26 28 169 280 # Sc.Var.maxis Ra.Gyr Skew.Maxis Skew.maxis Kurt.maxis Kurt.Maxis Holl.Ra Class # 1 379 184 70 6 16 187 197 van # 2 330 158 72 9 14 189 199 van # 3 635 220 73 14 9 188 196 saab # 4 309 127 63 6 10 199 207 van # 5 325 188 127 9 11 180 183 bus # 6 957 264 85 5 9 181 183 bus |
#2 상관관계 높은 열 선정
findCorrelation(cor(subset(Vehicle, select=-c(Class)))) # [1] 3 8 11 7 9 2 |
- select=-c(Class) : head(Vehicle) 보면 class 변수에만 문자형으로 되어있어서 상관관계 확인하는것과 관련없으므로 빼고 실행하기위함
- findCorrelation 함수사용 하여 상관관계 높은 열을 추출한다.
#3 상관관계가 높은 열끼리 상관관계 확인
cor(subset(Vehicle, select=-c(Class))) [c(3,8,11,7,9,2), c(3,8,11,7,9,2)] # D.Circ Elong Sc.Var.Maxis Scat.Ra Pr.Axis.Rect Circ # D.Circ 1.0000000 -0.9123072 0.8644323 0.9072801 0.8953261 0.7984920 # Elong -0.9123072 1.0000000 -0.9383919 -0.9733853 -0.9505124 -0.8287548 # Sc.Var.Maxis 0.8644323 -0.9383919 1.0000000 0.9518621 0.9382664 0.8084963 # Scat.Ra 0.9072801 -0.9733853 0.9518621 1.0000000 0.9920883 0.8603671 # Pr.Axis.Rect 0.8953261 -0.9505124 0.9382664 0.9920883 1.0000000 0.8579253 # Circ 0.7984920 -0.8287548 0.8084963 0.8603671 0.8579253 1.0000000 |
- #2에서의 결과바탕으로 높은 열끼리 상관관계를 확인한다
#4 상관관계 높은 열 제거
Cor_Vehicle <- Vehicle[,-c(2,3,7,8,11)] findCorrelation(cor(subset(Cor_Vehicle, select=-c(Class)))) # [1] 5 |
#5 최종 결과 보기
head(Cor_Vehicle) # Comp Rad.Ra Pr.Axis.Ra Max.L.Ra Pr.Axis.Rect # 1 95 178 72 10 20 # 2 91 141 57 9 19 # 3 104 209 66 10 23 # 4 93 159 63 9 19 # 5 85 205 103 52 19 # 6 107 172 50 6 28 # Max.L.Rect Sc.Var.maxis Ra.Gyr Skew.Maxis Skew.maxis # 1 159 379 184 70 6 # 2 143 330 158 72 9 # 3 158 635 220 73 14 # 4 143 309 127 63 6 # 5 144 325 188 127 9 # 6 169 957 264 85 5 # Kurt.maxis Kurt.Maxis Holl.Ra Class # 1 16 187 197 van # 2 14 189 199 van # 3 9 188 196 saab # 4 10 199 207 van # 5 11 180 183 bus # 6 9 181 183 bus |
카이 제곱 검정을 통한 중요 변수 선발
*** install.packages("FSelector") 오류해결
install.packages("c:\\rJava_1.0-4.tar.gz",repos=NULL,type="source")
설치 후 관리자권한으로 R studio 다시 실행
ex)
#1 패키지 설치 및 Vehicle 데이터 불러오기
install.packages("FSelector") install.packages("c:\\rJava_1.0-4.tar.gz",repos=NULL,type="source") library(FSelector) library(mlbench) data(Vehicle) |
#2 카이 제곱 검정으로 변수들의 중요성 평가
cs <- chi.squared(Class ~., data=Vehicle) |
#3 변수 중에서 중요한 5개 선별
cutoff.k(cs,5) # [1] "Sc.Var.maxis" "Scat.Ra" "Elong" "Pr.Axis.Rect" "Sc.Var.Maxis" |
반응형
'통계기반 데이터분석' 카테고리의 다른 글
[ R ] 군집분석 #1 (0) | 2022.12.03 |
---|---|
[ R ] 오분류표 (1) | 2022.12.03 |
[ R ] 다차원척도법 (0) | 2022.12.02 |
[ R ] 베이지안 (1) | 2022.12.02 |
[ R ] install.packages 오류 (0) | 2022.12.02 |