[솔트룩스] 새싹 인공지능 응용 SW 개발자 양성과정 | 24일차 | 5. 머신러닝 (2)

 2022.01.17 | 24일차 | 5. 머신러닝 (2)

    - 권혜윤 강사님 ( yujinkwon@nate.com )

    - Decision Tree 수업 내용 코드 (코랩)

    - Random Forest 수업 내용 코드 (코랩)

    


Decision Tree 분리 기준 (Split Criterion) 
  • 부모 마디로부터 자식 마디들이 형성될 때, 생성된 자식 노드에 속하는 자료의 순수도가 가장 크게 증가하도록 트리를 형성하며 진행
  • 입력 변수를 이용해 목표 변수의 분포를 얼마나 잘 구별하는 정도를 파악해 자식 마디가 형성되는데, 목표 변수의 구별 정도를 불순도에 의해 측정


지니 지수 (Gini Index) : 데이터 집합의 불순도를 측정
  • 0~1 사이의 값
  • 어떤 데이터 집합에 속한 개체들이 같은 범주로 구성되어 있으면 지니 지수는 최솟값이 0을 갖고, 해당 데이터 집합은 순수하다고 볼 수 있음.
  • 즉, 지니 지수가 작을수록 잘 분류된 것.


Tree 만든 데이터는 정확도가 100% 
  • 데이터 보고 Gini 계산해서 Tree를 만들었기 때문
  • 모든 데이터로 Tree를 만들어서 만든 Tree가 정확한 Tree인지 알 수 없음
  • 해결방안
    • 전체 75% 로 Tree를 만들고 (Train Set), 일부 25% 는 보관 (Test Set), 나중에 Test set 데이터로 Tree가 얼마나 정확한지 측정


강의자료 실습
  • Decision Tree [실습교재코드]
  • 패키지 설명
    •  Scikit-learn (sklearn)
      • Python 프로그래밍 언어용 기계학습(Machine Learning) 관련 라이브러리 (Library)
    • sklearn.metrics
      • scikit-learn 패키지 중 모형평가에 사용되는 서브 패키지 classification_report: 주요 분류 측정 항목을 보여주는 보고서 모듈 confusion_matrix: 분류의 정확성을 평가하기 위한 오차행렬 계산 모듈
    •  sklearn.model_selection
      • scikit-learn 패키지 중 클래스를 나눌 때, 함수를 통해 train/test를 나눌 때, 모델 검증에 사용되는 서브 패키지
    • train_test_split
      • 배열 또는 행렬을 임의의 훈련(train) 및 테스트(test) 하위 집합으로 분할하는 모듈
    • sklearn.tree
      • scikit-learn 패키지 중 분류 및 회귀를 위한 의사결정 트리 기반 모델이 있는 서브 패키지
    • DecisionTreeClassifier
      • 의사결정 트리 분류 모듈




Random Forest
  • Random Forest ?
  • 서로 다른 Decision Tree 많이 만들고 싶을때.
  • Tree가 많아서 Forest (숲) 임.
  • 2001년에 Leo Breiman에 의해 처음으로 소개 
  • Decision Tree의 단점을 개선하기 위한 알고리즘 중 하나
  • Decision Tree의 확장
  • Random Forest는 훌륭한 데이터 분석 알고리즘 중 하나
    • 데이터 분류 (Classification)
      • 종속 변수 있음
      • 지도 학습
      • 예측 분류하고 싶은 칸 있음
    • 데이터 군집 (Clustering)
      • 종속 변수 없음 (어떻게 분류될지 모름, 컴퓨터가 알아서 분류)
      • 비지도 학습
      • 그룹을 만듬
      • 잠재적 디리클레 할당 (LDA: Latent Dirichlet Allocation)
    • Feature의 중요성 확인
    • 데이터 예측


Random Forest 특징
  • 여러 개의 Decision Tree를 결합함으로 단일 Decision Tree의 결점을 극복 
  • Over-fitting 문제가 적음 
    • 트리 만든 데이터의 정확도는 높은데, 안 만든 데이터는 정확도가 낮음
    • Random Forest 트리를 기본 100개 만들기 때문에 문제 적음
    • 트리 안만든 데이터의 정확도도 높음
  • 구현이 간단함 
  • 병렬 계산이 간편함 (Multi Thread: 동시 실행)


Random Forest 에서의 2가지 Random
  • Dataset 에서 샘플 데이터를 random으로 선택 
    • 샘플 데이터 선택
      • Random으로 n개의 데이터 선택 
      • 선택한 n개의 데이터는 중복이 가능 
      • 선택한 t개의 샘플 데이터 사이 데이터 중복 가능
      • 선택한 샘플 데이터로 Decision Tree 생성 
 
    • 샘플 데이터에서 freature을 random으로 선택해 decision tree를 생성 
      • 선택한 샘플 데이터에서 random으로 f개 feature를 선택
      • 선택하는 feature의 개수는 기본으로 Sqrt(전체 feature 수, 선택으로 Log2(전체 feature 수) 등 방법으로 계산


Random Forest 알고리즘


Random Forest IRIS 데이터 분류


    • 필요한 패키지 및 라이브러리 로드
      • from sklearn.datasets import load_iris 
        from sklearn.metrics import accuracy_score
        import numpy as np 
        import pandas as pd
        
      • numpy
        • 파이썬 언어를 위한 행렬, 벡터 등의 수학 계산을 위한 자료구조와 계산 함수를 제공하는 패키지
      • pandas
        • 데이터 분석, 가공, 처리 등을 쉽게 하기 위한 자료구조와 처리 함수들을 제공하는 패키지
      • sklearn.metrics
        • scikit-learn 패키지 중 모듈 성능 평가 방법 모듈
      • sklearn.datasets
        • scikit-learn 패키지 중 일반적인 참조 데이터 셋을 로드(load)하는 모듈
      • load_iris
        • iris data 로드 함수
      • acccuracy_score
        • 분석 결과의 accuracy를 측정하는 함수
    • Training data 와 Test data 설정
      • load_iris() : iris data를 호출
      • iris.data : iris data에서 feature 데이터를 호출 
      • iris.target: iris data에서 target 데이터를 호출
    • Random Forest 분류기 생성 
      • Random Forest 분류기 생성을 위해 RandomForestClassifier 클래스를 import
      • Sklearn.ensemble 모듈은 분류, 회귀 및 이상 탐지를 위한 ensemble-based 방법을 포함
      • 10개의 tree를 가진 random forest 생성
      • dt_graph.write_pdf("그래프(이미지)를 pdf로 저장하는 코드.pdf")
        

 


    • Random Forest 분류기 성능 평가 (2)
  • Random Forest 성능 제고 방법
    • Training, Test 데이터 재 생성
    • Random Forest 분류기 성능 평가
    • Random Forest 분류기 성능 높이는 방법
      • Tree의 개수(n_estimators)를 변경
      • max_features의 값을 변경
    • 각 feature의 중요도 확인
      • 컬럼 중요도 (Information Gain 계산)







댓글

이 블로그의 인기 게시물

[혼자 공부하는 머신러닝 + 딥러닝] 17강_인공 신경망: 간단한 인공 신경망 모델 만들기

[혼자 공부하는 머신러닝 + 딥러닝] 10강_확률적 경사 하강법 알아보기