[AIFFEL] 22.Jan.06 - Exploration, Iris classification

Deok Jong Moon·2022년 1월 6일
0
post-thumbnail

학습한 개념

  • dir() : 객체가 갖고 있는 att, method를 알려줌
  • Numpy array 자체로 pd.Series 같이 컬럼으로 붙여넣어도 됨
  • train_test_split(random_state=) random_state값이 없으면 뒷부분부터 차례대로 test 셋으로 만드나보다.(그러면 정렬된 label의 경우 거의 1개의 클래스만 갖게 돼서 안 좋음)
  • Decision Tree
    1) terminal node의 데이터 수를 다 합치면 root node의 데이터 수
    -> 교집합 없다는 뜻
    2) terminal node의 수 : 생긴 집합의 수
    3) 분류의 과정
    : 그 데이터가 속하는 특정 terminal node를 확인하고, 그 terminal node에서 가장 빈도수가 높은 값으로 분류함
    4) 회귀의 과정
    : 그 데이터가 속하는 특정 terminal node를 확인하고, 그 데이터들의 y값의 평균을 예측값으로 리턴함
    : 이러다 보니 terminal node의 수가 이 모델이 내놓을 수 있는 예측값의 총 개수(terminal node가 3개면 데이터가 1,000개여도 값이 딱 3종류 뿐임)
    5) 즉 분류 = 최빈값, 회귀 = 평균을 반환함
    6) 분류나무는 homogenity 증가, impurity 감소, uncertainty 감소의 방향으로 분류해감
    7) 불순도지표 !
    • 엔트로피(entropy)
      • the more certain or the more deterministic an event is, the less information it will contain. In a nutshell, the information is an increase in uncertainty or entropy
      • 특정 영역의 레코드가 다 똑같다면 엔트로피 0
      • 특정 영역의 레코드가 반반이라면 엔트로피 1
      • 수식으로 나타난 게 있는데, 그 수식을 해석하자면
        1) 결국 확률을 통해 0~1사이의 값을 나타내고 싶다.(이 값은 homogenity를 나타냄)
        2) 근데 확률이 0.5일 때 제일 모호하니 그 값이 1이어야 겠고,
        3) 확률이 1.0 혹은 0일 때 제일 모호하지 않으니 그 값이 0이 되게끔 해야겠는데
        4) 그것을 log 2base하니까 0.5일 때 1값 나오고 1이 때 0이 나오니 옳다구나
        5) 근데 어랏! 0.5 밑으로 가니까 log 2base 값이 무한으로 올라간다.
        6) 그래서 P(확률)을 다시 곱하자
        7) 근데 이게 음수가 되니까 (-)를 곲하자!
        ... 나름의 해석 및 정리
    • 지니계수(Gini index)도 있음

8) partitioning 방법
: 컬럼(특징)별로 모두 다 경우의 수로 엔트로피를 구하고 각 컬럼별 나누는 지점을 찾아간다.
9) 가지치기(pruning)
: full tree(순도 100%)가 되면 overfitting이 일어나기 쉬움
: 그래서 적절한 수준에서 node를 몇 개 묶어줌
: 이름은 pruning(잘라버림)이지만, 실제로는 merging 함

의사결정나무 관련 블로그(ratsgo)

  • Random Forest
    • 다른 features를 각각의 나무가 학습해서 결과를 내보인다.
    • 이것을 통계적으로 독립조건을 만들어주는 거란다.
    • Random Forest 만드는 과정

      1) 건강의 위험도를 예측하기 위해서는 많은 요소를 고려 성별, 키, 몸무게, 지역, 운동량, 흡연유무, 음주 여부, 혈당, 근육량, 기초 대사량 등 수많은 요소가 필요
      2) Feature가 30개라 했을 때 30개의 Feature를 기반으로 하나의 결정 트리를 만든다면 트리의 가지가 많아질 것이고, 이는 오버피팅의 결과를 야기
      3) 30개의 Feature 중 랜덤으로 5개의 Feature만 선택해서 하나의 결정 트리 생성
      4) 계속 반복하여 여러 개의 결정 트리 생성
      5) 여러 결정 트리들이 내린 예측 값들 중 가장 많이 나온 값을 최종 예측값으로 지정
      6) 이렇게 의견을 통합하거나 여러 가지 결과를 합치는 방식을 앙상블(Ensemble)이라고 함
      7) 하나의 거대한 (깊이가 깊은) 결정 트리를 만드는 것이 아니라 여러 개의 작은 결정 트리를 만드는 것
      8) 분류 : 여러 개의 작은 결정 트리가 예측한 값들 중 가장 많은 값, 회귀 : 평균

    • Random Forest의 핵심은 서로 독립적인 나무들의 학습 및 그것을 공평하게 voting해서 더 나은 방향으로 간다는 것이다.
    • 이렇게 했을 때 약한 트리 여러개가 강한 트리 1개 보다 더 낫다.
  • SVM(Support Vector Machine)
    • 2개의 클래스만 존재한다치면,
    • decision boundary가 있고
    • 거기에 제일 가까운 vector가 support vector
    • decision boundary와 support vectors의 거리가 margin
    • 이 margin이 극대화 되면 모델이 robust해져서 좋은 것
    • 이외에 더 있음..
  • Stochastic Gradient Descent Classifier(SGD Classifier)
    • 잘 모르겠다... 더 알아보자
  • Logistic Regression
    • 막판에 softmax 함수로 각각 클래스일 확률을 총합 1이 되게 변경 시킴
  • list comprehension 규칙...
    : [3 if i == 3 else 0 for i in digits_label] 맞음
    : [3 for i in digits_label if i == 3 else 0] 오류
  • confusion matrix
    : 데이터의 성질에 따라 평가 기준이 되는 지표가 달라질 수 있다!
    : 예) 암은 실수로 양성나도 되지만(FP), 실수로 음성나면 큰 일 남(FN 중요) -> Recall

미니프로젝트

  • 오늘은 Scikit-learn에 내장된 Classification 모델 5개를 통해 digits, wine, breast_cancer 데이터를 학습 & 예측 & 평가해봤다
  • 오늘은 특별하게 헤맨 부분은 없었다...!

더 공부할 것

  • 실제로 모델이 수학적으로 돌아가는 원리가 궁금하다...
  • autoML..?(pycaret)
  • Stochastic Gradient Descent 와 그냥 Gradient Descent는 뭐가 다를까?

질문

  • 그냥 뜬금 없는 질문인데, train_test_split(data=)에 label이 포함된 df를 넣으면 어떻게 될까... 정말 100% 정답이 나올까?
profile
'어떻게든 자야겠어'라는 저 아이를 닮고 싶습니다

0개의 댓글

관련 채용 정보