머신러닝 : 인공지능 분야의 범주
이미지 : 숫자의 배열 -> 숫자를 병렬처리함
분류 : label이 있는 데이터의 범주를 나눔
회귀 : 숫자의 많고 적음을 예측
추천 알고리즘 -> 비지도 학습에 가까움
머신러닝 파이프라인
데이터 전처리 방법(data preprocessing)
train dataset으로 model fit(학습) -> test dataset으로 예측 -> metric(평가 기준)에 따라 evaluate(평가)
scikit-learn에서 X가 대문자이고 y가 소문자인 이유?
수치 자료와 범주 자료 모두에 적용할 수 있음. 다른 기법들은 일반적으로 오직 한 종류의 변수를 갖는 데이터 셋을 분석하는 것에 특화되어 있음. (일례로 신경망 학습은 숫자로 표현된 변수만을 다룰 수 있는 것에 반해 관계식(relation rules)은 오직 명목 변수만을 다룰 수 있음.
classification tree는 예측된 결과로 입력 데이터가 분류되는 클래스를 출력함
regression tree는 예측된 결과로 특정 의미를 지니는 실수 값을 출력함 (e.g. 주택의 가격, 환자의 입원 기간)
결과를 해석하고 이해하기 쉬움. 간략한 설명만으로 결정 트리를 이해하는 것이 가능
자료를 가공할 필요가 거의 없음.다른 기법들의 경우 자료를 정규화하거나 임의의 변수를 생성하거나 값이 없는 변수를 제거해야 하는 경우가 있음
화이트박스 모델을 사용함. 모델에서 주어진 상황이 관측 가능하다면 불 논리를 이용하여 조건에 대해 쉽게 설명할 수 있음.
안정적임. 해당 모델 추리의 기반이 되는 명제가 다소 손상되었더라도 잘 동작함.
대규모의 데이터 셋에서도 잘 동작함. 방대한 분량의 데이터를 일반적인 컴퓨터 환경에서 합리적인 시간 안에 분석할 수 있음.
label : outcome
정해진건 없지만 통상적으로 train : test = 8 : 2로 보통 나눔(train은 test보다 항상 더 많아야 함)
DecisionTreeClassifier()
: decision tree 분류기 생성
plot_tree()
: decision tree 시각화
ipython 코드블럭에서 중간 코드 출력하기
print
로 출력하면 제대로 출력되지 않음display(X_train.head())
분지 속성 선정 기준
피처의 중요도 측정 및 시각화
model.feature_importances_
sns.barplot(x=model.feature_importances_, y=model.feature_names_in_)
정확도 측정
직접 구하기
(y_test == y_predict).mean()
함수로 구하기
from sklearn.metrics import accuracy_score
accuracy_score(y_test, y_predict)
혹은
model.score(X_test, y_test)
과소적합 : 모델 학습이 너무 안됨
과적합 : 학습 데이터를 너무 많이 학습해 학습 데이터에는 성능이 좋지만 실제 데이터에 대한 예측 성능은 떨어지고 일반화하기 어려움
최적화 : train과 test에서 모두 좋은 성능이 나오는 지점을 찾음
수치형 변수를 그대로 안 쓰고 범주형 변수로 바꿔 쓰는 이유?
머신러닝 알고리즘에 힌트를 주거나(이렇게 범주를 나누면 label이 조금 더 명확하게 나타난다) 조건을 덜 나눠 오버피팅 방지 가능
이 방법으로 꼭 성능이 개선되는 것은 아님. 이런 기법을 사용해볼 수도 있다~
수치형 변수를 범주형으로 인코딩하는 것
Job Description
8퍼센트 : P2P 금융
회사와의 fit
엔트리 -> 주니어 -> 시니어