24.02.08 TIL

예진·2024년 2월 8일
0

TIL

목록 보기
35/68

심화 프로젝트 2일차.
어제 얼떨결에 받아버린 튜터링을 통해 EDA&전처리 시도.
아직 너무 지저분해서 연휴동안 정리할 예정..


의사결정나무(Decision Tree, DT)

  • 의사결정규칙을 나무 구조로 나타내어 전체 자료를 몇 개의 소집단으로 분류하거나 예측을 수행하는 분석 방법
  • 루트 노드(Root Node): 의사결정나무의 시작점. 최초의 분할조건
  • 리프 노드(Leaf Node): 루트 노드로부터 파생된 중간 혹은 최종 노드
  • 분류기준(criteria): sex는 여성인 경우 0, 남성인 경우 1로 인코딩. 여성인 경우 좌측 노드로, 남성인 경우 우측 노드로 분류
  • 불순도(impurity)
    • 지니 계수 : 0과 1사이 값으로 0이 완벽한 순도(모든 샘플이 하나의 클래스), 1은 완전한 불순도(노드의 샘플의 균등하게 분포) 됨을 나타냄
    • 리프 노드로 갈수록 불순도가 작아지는(한쪽으로 클래스가 분류가 잘되는)방향으로 나무가 자람
  • 샘플(samples): 해당 노드의 샘플 개수(891개의 관측치)
  • 값(value): Y변수에 대한 배열. 549명이 죽었고(Y = 0), 342명이 살았음(Y = 1)
  • 클래스(class)
    • 가장 많은 샘플을 차지하는 클래스를 표현
    • 위에서는 주황색(Y = 0 다수), 파란색(Y=1 다수)를 표현

의사결정나무 정리

  • 장점
    • 쉽고 해석하기 용이
    • 다중분류와 회귀에 모두 적용이 가능
    • 이상치에 견고하며 데이터 스케일링이 불필요(데이터의 상대적인 순서를 고려해서)
  • 단점
    • 나무가 성장을 너무 많이하면 과대 적합의 오류에 빠질 수 있다.
    • 훈련 데이터에 민감하게 반응하여 작은 변화가 노이즈에도 나무의 구조가 크게 달라짐(불안정성)

랜덤 포레스트 이론

랜덤 포레스트 : 의사결정 나무의 과적합과 불안정성을 해결하기 위해 나무를 여러개 만들어 숲을 만드는 것.

배깅(Bagging)의 원리

  • 언제나 머신러닝은 데이터의 부족이 문제
  • 이를 해결 하기 위한 Bootstrapping + Aggregating 방법론
    • Bootstrapping: 데이터를 복원 추출해서 유사하지만 다른 데이터 집단을 생성하는 것
    • Aggregating: 데이터의 예측,분류 결과를 합치는 것
    • Ensemble(앙상블): 여러 개의 모델을 만들어 결과를 합치는 것
    • 이로써 의사결정모델이 훈련 데이터에 민감한 점을 극복

랜덤 포레스트 정리

  • 장점
    • Bagging 과정을 통해 과적합을 피할 수 있다.
    • 이상치에 견고하며 데이터 스케일링이 불필요
    • 변수 중요도를 추출하여 모델 해석에 중요한 특징을 파악 할 수 있다.
  • 단점
    • 컴퓨터 리소스 비용이 크다.
    • 앙상블 적용으로 해석이 어렵다.
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.tree import DecisionTreeClassifier

titanic_df = pd.read_csv('/Users/yejin/Documents/GitHub/eden_jeong/train_titanic.csv')
titanic_df.info()

X_features = ['Pclass', 'Sex', 'Age']
#Pclass : LabelEndcoder
#Sex : Label Encoder
#Age : 결측치 - 평균으로 대치

le = LabelEncoder()
titanic_df['Sex'] = le.fit_transform(titanic_df['Sex'])

le2 = LabelEncoder()
titanic_df['Pclass'] = le2.fit_transform(titanic_df['Pclass'])

age_mean = titanic_df['Age'].mean()
titanic_df['Age'] = titanic_df['Age'].fillna(age_mean)

X = titanic_df[X_features]
y = titanic_df['Survived']

model_dt = DecisionTreeClassifier(max_depth = 1)
model_dt.fit(X,y)

plt.figure(figsize = (10,5))

plot_tree(model_dt, feature_names=X_features, class_names=['Not Survived', 'Survived'], filled = True)
plt.show()

국취제 초기 상담 끝냈다.
나랏돈 받는 것은 쉽지 않구나 ;o;
내일은 강의 끝내놓고 심화 1강 다시 들어봐야겠다.
전처리, 머신러닝 기초, 심화 다 들어도 막상 직접 하려면 모르겠다.
연휴가 어딨어,,, 안그만둘거면 해 그냥,,,

profile
Data Analysis / 맨 땅에 헤딩

0개의 댓글