반응형
Decision Tree (결정트리 혹은 판단트리)
- 의사 결정 규칙과 결과들을 트리 구조로 도식화 한 것
- 의사 결정 분석에서 목표에 가장 가까운 결과를 낼 수 있는 전략을 찾기 위해 사용
Decision Tree 라이브러리 호출
import matplotlib.pyplot as plt
# 표 작성을 위한 라이브러리
import pandas
# 데이터프레임 사용을 위한 라이브러리
from sklearn.preprocessing import StandardScaler
# 피처 스케일링 표준화 사용을 위한 라이브러리
from sklearn.model_selection import train_test_split
# 인공지능 학습을 위한 라이브러리
from sklearn.tree import DecisionTreeClassifier
# Decision Tree 인공지능 모델링을 위한 라이브러리
from sklearn.metrics import confusion_matrix, accuracy_score
# 인공지능 성능을 확인하기 위한 라이브러리
Decision Tree 의사 결정 분석 모델로 인공지능 학습하기
예시 데이터
- 나이와 연봉을 분석해서 물건 구매 여부를 예측
- 예시에 쓰일 데이터프레임
피처 스케일링
- 우선 NaN값이 존재하는지 확인, 존재하면 NaN처리
- 독립 변수와 종속 변수 지정, 데이터(X, y) 분리
- 독립 변수(X) : 나이(Age) / 연봉(EstimatedSalary)
- 종속 변수(y) : 구매횟수(Purchased)
- 데이터 표준화 (정규화 해도 됨)
- from sklearn.preprocessing import StandardScaler 호출
데이터(학습용/테스트용) 분리
- from sklearn.model_selection import train_test_split 호출
인공지능 Decision Tree 모델링
- from sklearn.tree import DecisionTreeClassifier 호출
인공지능 성능 테스트
인공지능 성능 확인
- from sklearn.metrics import confusion_matrix, accuracy_score 호출
- 정확도 확인 81%
인공지능 학습 결과 시각화
- 테스트 데이터로 예측한 결과 값 그래프화
from matplotlib.colors import ListedColormap
X_set, y_set = X_test, y_test
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.figure(figsize=[10,7])
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Classifier (Test set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
- 학습에 사용된 데이터를 그래프화
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.figure(figsize=[10,7])
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Logistic Regression (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()
반응형