본문 바로가기
부트캠프(LIKELION AIS7)/수업

[AI스쿨 7기, 6주차] Decision Tree(의사결정나무), 랜덤포레스트, Regression(회귀), 이력서

by aimaimee 2023. 4. 21.

멋쟁이 사자처럼 AI스쿨 7기, 박조은 강사님 강의

221026

0402 실습파일

1. Decision Tree

  • Q. 피처엔지니어링 전에 스코어를 올리기 위해 실습했던 것? 하이퍼 파라미터 조절
  • feature_names.remove("Insulin_nan") 할 때, Outcome이랑 한꺼번에 뺄 수는 없다. 하나씩 제거
  • 공식문서 : https://scikit-learn.org/stable/modules/tree.html
  • .remove() : A. 함수 중에는 원본 데이터를 변경하는 함수가 있고, 데이터를 복사한 이후에 동작한 후 해당 복사본을 반환하는 경우가 있습니다. remove는 원본 데이터에서 매개변수로 들어온 값과 똑같은 값을 찾아서 삭제해 주는 함수입니다.
  • Q. model.score()의 값과 accuracy_score() 값의 결과는 같이 나오는데 y_predict를 따로 만드는 이유가 궁금합니다
  • model.score 는 미리 스코어를 확인해보기 위한 용도, 현실세계에서 미래를 예측할 때 y_test가 없다면 사용할 수 없는 기능
  • 중요도 시각화 그래프가 다 다른 이유는, 하이퍼 파라미터 조건이 다르거나, feature가 다를 수도 있다.
  • 이상치
    • IQR = desc["75%"] - desc["25%"]
    • max_out = desc["75%"] + (IQR * 1.5)
    • df=df[df["Insulin_fill"]<max_out]
  • 변수명이 보기 힘들 때 사용할 수 있는 방법
    • from sklearn.tree import export_text
  • 섀넌 엔트로피 (로그 배우고 다시 배울것) : decision tree에서 사용하는 엔트로피

2. 랜덤 포레스트

2.1 배깅 알고리즘

  • bootstrap aggregating의 약자
  • 부트스트랩으로 다른 훈련 데이터에 대해 훈련된 base learner를 결합시키는 방법
  • Q. bootstrap 어디서 들어봤을까? n_boot
  • sns.barplot할 때
  • Q. 현실세계의 선거에 비유한다면? 출구조사!
  • Q. Aggregating? 집계
  • Q. bootstrap + aggregating : 표본 추출 집계
  • Q. decision tree의 단점 : 랜덤성에 따라 매우 다르다. 그래서 일반화하여 사용하기 어렵다.
  • Q. decision tree의 단점에도 불구하고 사용하는 이유? 빠르고 직관적, 쓰기가 쉽다.
  • 랜덤 포레스트 장점 : 성능이 좋다, 높은 정확성, 변수소거 없이 수천개의 입력 변수를 다루는 것이 가능, 간편하고 빠른 학습, 다중 클래스 알고리즘 특성
    • Q. 임의화를 통한 좋은 일반화 성능에서 임의화란? 랜덤
  • 가장 큰 특징 : 랜덤성에 의해 트리들이 조금씩 다른 특징을 가진다.
  • 여러 개의 트리가 그려지기 때문에 오버피팅이 되는 단점이 보완된다.
  • T : 트리의 갯수
  • D : 최대 허용 깊이
  • Q. 랜덤 샘플링을 할 때, 중복을 허용할까, 하지 않을까? 같은 샘플이 다른 트리에도 포함될 수 있다.
  • 부트스트랩 : 훈련 데이터에서 중복을 허용하여 원 데이터셋과 같은 크기의 데이터셋을 만드는 과정
  • 랜덤 포레스트의 가장 중요한 파라미터 : 트리의 갯수
  • 한개의 결정 트리에 경우 노이즈에 대해 민감하다. : 오버피팅 될 수 있다.
  • 비상관화 되어 있다면 노이즈에 강하다.
  • 저성능 분류기 : 기초 분류기(base learner)
  • model = RandomForestClassifier(n_estimators = 100, max_depth = 5, random_state=42)
    • 가장 중요한 하이퍼 파라미터 : n_estimators : 기본값 100
    • Q. n_estimators 값을 늘리면 늘릴 수록 왜 학습시간이 오래 걸릴까? 생성할 tree의 갯수가 많아서
    • Q. n_jobs는 어떤 역할? 사용할 CPU의 코어 수
    • Q. -1은 무슨 의미? 모든 코어 사용
    • Q. 왜 -1을 사용할까? 사용 중인 코어를 모를 경우 대비하기 위해
  • Q. 랜덤 포레스트는 왜 plot_tree를 그릴 수 없을까? 다수의 트리를 생성해서
  • ML Tools에서 잠깐 소개했던 것 : treeinterpreter를 사용해봐도 좋다. https://github.com/andosa/treeinterpreter
    • aggregating 한 값으로 그려서 트리는 하나만 그려지게 된다.
    • Q. 보스턴 집값 데이터셋이 사이킷런에서 제외. 왜 그랬을까? racial self_segregation 가정 등이 racism이슈로 이 데이터셋을 윤리적으로 문제가 있는 데이터셋이 되었다.
    • B라는 피처가 제거되었다. 이웃 인종이 집값에 영향을 준다 등의 해석
  • copy warning : train = df[:split_count].copy() / test = df[split_count:].copy()

0403 실습파일

Regression

  • Q. 회귀로 예측해볼 수 있는 피처는 무엇일까? 혈압, 인슐린
  • sns.barplot(data=df, x="Outcome", y="Insulin", ci=None)
  • train세트, test세트
  • Q. 왜 RandomForestRegressor를 사용해야 할까? 예측할 변수가 수치형 데이터여서
  • Q. 학습과 예측을 해도 채점을 할 수 없다. 정답이 없기 때문에. 그럼 어떻게 하면 좋을까?
  • 모의고사용 문제를 따로 모아둔다.
  • Q. 모의고사를 한 번만 봤을 때 문제점? 신뢰도에 문제, 수능을 잘 보기 어렵다.
  • Q. 어떻게 하면 모의고사를 여러 번 볼까? 수치만 조금씩 바꾸고 문제 순서를 바꿔본다.
  • 11번 슬라이드(56쪽) - Cross Validation 공부를 안한게 test에 나올 수 있다.
    • Q. Hold-out Validation의 장점? (데이터셋을 나눌때 하나만 나누는 것) : 빠르게 결과를 볼 수 있다.
    • 교차검증(cross validation) : 우리는 Training data를 Fold로 쪼개고 사이킷런에 맡길 것.
    • 5회짜리 모의고사 문제집(1회는 빼고 2~5로 풀고, 마지막에 1회로 시험 / 2회는 빼고 1,3,4,5풀고 2회는 최종)
    • 학습이 누적되지는 않다. 병렬적으로 공부를 시킨다.
    • 각각의 결과를 합쳐서 평균을 내서 사용한다.
    • Fold == 모의고사, 파란색 == 최종모의고사, 연두색 == 공부용 모의고사
    • 조각의 수 == fit(학습) 수 : 5번 학습을 함
    • 만약 랜덤포레스트로 학습하면 트리의 수*폴드의 수만큼 오래 걸린다.
    • 오래걸리지만 신뢰도를 높이기 위해서 쪼개준다.
    • Q. 어떨 때 높은 신뢰도가 필요할까? 의료용 데이터 예측, 자율주행 소프트웨어
  • cross_val_predict
    • cv 조각을 나누는 수 : 디폴트 값은 5개
    • n_jobs : CPU 코어의 수, -1은 모든 프로세서를 사용
    • verbose : 디폴트 0 , 로그를 출력할건지 말건지, 딥러닝에서도 사용할 것
    • cross_val_score : 알아서 점수를 계산해준다.
    • Q. accuracy가 0이면 어떻게 하면 좋을까? 차이를 보면 된다.
    • Q. 어떻게 차이를 구할 수 있을까?
  • reg, joint, resid plot으로 오차 시각화
  • r2_score : 회귀선이 1에 가까울수록 정확하게 측정했다. 예측값==실제값 -> 1
    • Q. 네거티브 값이 뭘까? 마이너스(음수)가 나올 수 있다.
  • 오차
    • 오차 구하기 : y_train - y_predict
    • abs(절대값)을 씌워줌 : absolute
    • sns.displot(error, aspect=5) : 왼쪽에 값이 몰려 있어야 오차가 적은 데이터가 많다.
    • error.describe() : 오차가 65이다.(mean)

📌이력서

  • 모든 경력과 경험은 최신순
  • PDF 파일
  • 회사에서 요청하지 않는 이상 압축은 No
  • 필수 -> 본인 프로필, 소개(강점), 기술 스택, 오픈소스-프로젝트-경력 / 선택 -> 교육-발표-집필, 기타 등등
  • 기술 스택에서 한 줄로 파이썬, matplotlib 이렇게 간단하게 쓰는 사람들이 있다.
  • 파이썬으로 뭘 해봤고, 판다스로 뭘 해봤고, seaborn으로 여기까지 할 수 있다.
  • 그 기술로 할 줄 아는 것들, 회사에서 어떻게 사용할 것인지를 한 줄씩
  • 자기소개 : 어떤 경험을 해왔는지, 어떤 생각을 갖고 있는지, 평소 어떤 노력을 하는지
  • 최대한 숫자로 표현 : 대용량/대규모 -> 구체적 숫자
  • 혼자서 연습 중 X
  • 비팩토리 노정석 대표님 : https://www.youtube.com/watch?v=dHG0-SIL5Bc 인터뷰

📌예습 추천


퀴즈

6/12문제
틀린 문제

  • 1번 문제 : 회귀에 대한 설명으로 바르지 않은 것 : 데이터를 가장 잘 설명할 수 있는 선을 찾고 그 직선을 바탕으로 예측하는 것, 투약 시간에 따른 회복률 예측에 사용, 기업 실적 정보를 위한 주가 예측에 사용, 날씨와 계절에 따른 특정 약품의 처방 수 예측에 사용
    ㄴ 여러 부동산 관련 정보를 통해 주택의 유형을 예측하는데 사용 : 이건 범주형 데이터니까 분류에 더 적합
  • 3번 문제 : Feature에 대한 설명으로 올바르지 않은 것은?
    • 일반적으로 Table 상에 Data를 표현할 때, Column을 의미한다.
    • 머신러닝에서 데이터의 특징을 나타내는 변수
    • 종속변수, input 변수 등과 동일의미로 사용된다.
    • 하나의 data instance(실제 데이터)는 feature vector로 표현한다.
      feature은 특징, 특성이라고도 한다. label이 종속변수
  • 6번 문제 : 오차의 절대값의 합을 구하는 평가 지표를 나타내는 것
    Mean Absolute Error(MAE) / R2 squared 아님
    -> 오늘 으쌰 복습 시간에 다뤘으니 복습해서 새 글에 정리하기
  • 7번 문제 : 머신러닝 모델 전체 과정에서 학습 또는 훈련, 예측에 사용할 변수의 명칭을 뭐라고 하는지 : feature_names / label_name 아님
  • 10번 문제 : 랜덤포레스트에서 영향을 미치는 매개변수 중 하나의 트리에서 루트 노드부터 종단 노드까지 최대 몇 개의 노드를 거칠 것인지 결정하는 것 : max_depthn_estimators는 랜덤 포레스트 안의 결정 트리 갯수. 클수록 좋다. 100이 기본값. 하지만 그만큼 메모리와 훈련 시간 증가
  • 12번 문제 : 고정된 train set와 test set이 아닌 여러 번의 valid set으로 나누어 검증을 하는 이유?
    고정된 train set와 test set으로 평가와 모델 튜닝을 하다보면 과적합되어 다른 모델에 일반화하기 어렵기 때문
    -> 과소적합이 아님!!!!

맞았는데 모르는 것

  • 2번 문제 : 블랙박스, 화이트박스 개념 다시 알아보기결정 트리는 직관적이고 결정 방식을 이해하기 쉬운데, 이런 모델을 화이트 박스 모델이라고 한다. https://analysis-flood.tistory.com/100
    블랙박스 모델은 소프트웨어의 내부 구조나 작동 원리는 모르는 상태에서 소프트웨어의 동작을 검사한다. 랜덤포레스트나 신경망이 해당된다.

해결 과제

평가 지표 다른 팀원 파트 복습하기(6번퀴즈)
7번 퀴즈 다시 공부
8번 배깅 으쌰 복습에 올라온거 공부하기


TIL

사실(Fact) : 의사결정나무, 랜덤포레스트, 회귀, validation, 시각화
느낌(Feeling)

  • 파이썬에서 다져온 코드들이 섞여 나오면서 내 기반이 부실했구나를 많이 느꼈다. 아직도 시각화 그래프 그리라고 하면 헤매는...
  • 퀴즈 풀다보니 분류, 회귀가 구분이 어렵다.

교훈(Finding) : 다음 수업 전까지 예습 해보자!

댓글