[패스트캠퍼스 수강 후기] R 인강 100% 환급 챌린지 37차 미션

2020. 9. 15. 06:23카테고리 없음

[패스트캠퍼스 수강 후기] R 인강 100% 환급 챌린지 37차 미션

 

패스트캠퍼스의 강의 중, 프로젝트와 함께 배우는 R 데이터 분석 올인원 패키지 Online를 수강하고 있습니다.

https://bit.ly/2DKMGNx 

내용을 복습도 할 겸, 미션에도 참가할 겸, 블로그에 매일 매일 정리해 보게 되었습니다.

 

오늘은 37회차 미션!

Part 2) [R로 하는 데이터 분석] 데이터 분석 기본기 익히기

  1. 20. Ch 05. Decision Tree와 Random Forest_01_Decision Tree와 Random Forest의 개념 이해 - 2

  2. 21. Ch 05. Decision Tree와 Random Forest_02_R code로 구현하는 Decision Tree와 Random Forest

 

  1. 20. Ch 05. Decision Tree와 Random Forest_01_Decision Tree와 Random Forest의 개념 이해 - 2

    1. 앞 장의 tree 평가 방법은 아주 단순화된 임의의 방법

      1. 실제로 그렇게 하진 않음

        1. 실제로는 노드별 무질서 측정 후 퀄리티 테스트

      2. 무질서(disorder) 측정 공식

        1. 엔트로피

          1. D는 disorder

          2. P: 양성(yes) 데이터 개수

          3. N: 음성(no) 데이터 개수

          4. T: 노드 내 전체 데이터 개수

        2. 양성 비율이 유용

          1. 양성 비율 vs. 무질서

            1. 양성비율 = 1/2 = 음성비율 이면

              1. D(set) = 1 이 됨

                1. 반반 섞여 있는 게 제일 무질서하다!

                2. 양성 비율이 더 많으면

                  1. 양성이 더 많이 존재하므로 덜 무질서

            2. 양성비율이 2/3이면 D(set) = 0.9

              1. 양성비율이 0이나 1에 가까워질수록 무질서율이 낮아짐

      3. 테스트 퀄리티 (작을 수록 좋음) 

        1. 전체 노드에 대한 무질서를 모두 더함..

          1. 각 노드의 무질서값과 해당 노드의 비율을 곱

            1. D(set) x 해당 노드 데이터 개수 / 전체 노드 개수

              1. 만일 8개짜리 데이터 중 한쪽 노드 개수가 5라면 5/8을 곱

  1. 앞서 구했던 트리에 대해 무질서값을 구해보자.

        1. 날씨 테스트

            1. 맑음은 T/P = 1/2 -> D(set) = 1

              1. 흐림과 비는 D(set) = 0

          1. 이제 전체 쿼리티 테스트

            1. 전체 공식에 대입하면

                1. 맑음은 4개 (전체 8개), 흐림은 3개, 비는 1개

          2. 최종적으로 계산하면 0.5가 나옴

        2. 각 테스트에 대해 계산 (낮을 수록 좋은 것)

            1. 역시나 날씨 테스트가 제일 좋아요!

    1. 피쳐가 연속형일 때는?

      1. 기온 vs. 배드민턴?

        1. 연속형일 때는 수직선 상의 데이터로 판단하고, 각 점이 테스트 후보

          1. 각 값을 기준으로 좌우로 자른다고 생각

    1. 타겟이 연속형일 때는?

      1. 바람 vs. 배드민턴 상금

          1. 피처별로 분기한 후에, 각 노드값의 평균을 계산하여, 새로운 데이터의 예측값으로 활용

        1. 아래와 같이 그려볼 수 있음

  1. 의사결정나무의 단점

    1. 오버피팅이 발생하기 쉬움

      1. 일반화하기 어려움

    2. 그래서 의사결정나무를 사용하면, 학습 데이터에는 잘 맞는데,  예측값은 잘 안맞을 때가 많음

  2. decision tree의 단점을 보완하기 위해 나온 것이 random forest

    1. 이름에서 나무 -> 숲으로 나온 것처럼

      1. N개의 tree를 사용함

 

  • Random Forest

 

  1. 개념

    1. N개의 랜덤 데이터 샘플 선택 (중복 선택 가능)

    2. d개의 피처 선택 (중복 불가능)

    3. Decision Tree 학습

    4. 각 Decision Tree 결과의 투표를 통해 클래스 할당

  2. N개의 랜덤 데이터 샘플 선택

      1. 이 작업을 배깅(bagging)이라고 부름

        1. bootstrap aggregating의 약자

      2. 어차피 전체 세트를 사용할 것이므로, 일부 중복이 있어서, 그 집합의 특성은 다른 집합과 다르기에 '중복 허용'하는 것

  3. d개의 피쳐 선택 (중복 불가능)

      1. 여러 피쳐 중, d개를 선택 (이건 피쳐로 사용할 것을 고르는 것이므로 직관적으로 봐도 중복 불가)

  4. 각 방법을 이용하면 여러개의 decision tree가 나올 것

  5. 각 트리의 결과의 투표를 이용

    1. 여러 개의 트리를 만들었으므로, 예측을 할 때, 이 여러개의 트리에 값을 대입해서 네/아니오를 각각 판별한 후, 이에 대한 투표결과를 통해 최종 결정

  1. 21. Ch 05. Decision Tree와 Random Forest_02_R code로 구현하는 Decision Tree와 Random Forest

    1. Decision Tree

      1. 패키지 설치

      2. 기본 트리 생성

        1. tree()라는 함수면 충분

          1. plot()만 호출하면 트리 모양만 생성됨

          2. text()를 호출해야 텍스트가 같이 적힘

      3. cross-validation

        1. FUN이라는 함수를 통해 가지치기 함수 선택

          1. prune.missclass -> 오분류 기준

          2. plot()을 하면 우측 하단과 같이 4일 때 misclass가 최소.

            1. 즉 가지치기 레벨이 4란 의미

      4. 가지치기

        1. cross-validation 결과를 통해 가지치기가 이루어짐

          1. prune.misclass

            1. 전단계의 기본 트리를 사용

            2. cross validation을 통해 나온 크기 4가 나옴. 

            1. pretty = 0은 분할 피처 이름을 바꾸지 않는다는 의미

          2.  

      5. 예측

        1. 기본 트리가 아닌 가지치기를 한 트리를 이용

        2.  

    2. 이제 random forest 사용법

      1. 기본적인 방법은 동일

      2. 아래 내용만 다르다고 보면 됨

        1. caret 패키지를 사용

        2. method는 "rf" (randomForest라는 패키지를 사용)

      3.  

 

Decision Tree와 Random Forest

Random Forest는 처음 배웠는데, 이게 훨씬 효과적인 듯.

나중에 나오겠지만 정확도가 월등함