- 값을 입력하면 정해진 규칙에 따라 계산한 예측값 출력, 다른 점은 컴퓨터가 패턴을 찾아 스스로 규칙 정한다.
예측변수 (predictor variable)
: 예측하는 데 활용하는 변수 또는 모델에 입력하는 값.타겟변수 (target variable)
: 예측하고자 하는 변수 또는 모델이 출력하는 값
- 순서대로 주어진 질문에 y/n로 답하면 마지막에 결론 얻음.
원리
- 타겟 변수를 가장 잘 분리하는 예측 변수 선택
- 첫번째 질문의 잡변에 따라 데이터를 두 노드로 분할.
- 각 노드에서 타겟 변수를 가장 잘 분리하는 예측 변수 선택.
- 노드가 완벽하겍 분리될 때까지 반복.
특징
- 노드마다 분활 횟수가 다르다
: 모두 같은 회수로 질문X, 앞의 질문에 어떻게 답변했는지에 따라 서로 다른 횟수로 질문하게 된다.- 노드마다 선택되는 예측 변수가 다르다.
- 어떤 예측 변수는 모델에서 탈락한다.
- 데이터 전처리
# 타겟 변수 전처리 df['income'] = np.where(df['income'] == '>50K', 'high','low') df['income'].value_counts(normalize=True) # low 0.760718 high 0.239282 Name: income, dtype: float64 #불필요한 변수 제거 df = df.drop(columns = 'fnlwgt') # 문자 타입 변수를 숫자 타입으로 바꾸기 #모든 문자 타입 변수를 원핫 인코딩 target = df['income'] df=df.drop(columns='income') df=pd.get_dummies(df) df['income'] =target
- 데이터 분할하기
- 모든 데이터를 사용하면 성능 평가 점수 신뢰할 수 없다.
- Cross Validation_교차검증 : 신뢰할 수 있는 성능평가점수 얻는 방법
Training set, Test set 로 데이터 분할.
scikit-learn 사용from sklearn.model_selection import train_test_split df_train,df_test =train_test_split(df, test_size = 0.3, stratify = df['income'], random_state=1234)
- test_size : 테스트 세트의 비율.
- stratify : 범주별 비율을 통일할 변수. 타겟 변수를 입력하면 트레이닝,테스트 세트에 범주별 비율 비슷하게 맞춰준다.
그러지 않으면 데이터 세트마다 달라지므로 평가 결과 신뢰X.- random_state : 난수 초깃값. 난수 고정하면 코드 반복 실행 시 같은 데이터 추출.
- 모델 만들기
from sklearn import tree clf= tree.DecisionTreeClassifier(random_state = 1234, #난수고정 max_depth = 3) # 트리 깊이 train_x = df_train.drop(columns = 'income') # 예측변수 추출 train_y = df_train['income'] # 타겟 변수 추출 model = clf.fit(X=train_x, y=train_y)