머신러닝

머신러닝(13) Decision Tree로 데이터를 예측해보자

개발연습자1 2022. 12. 5. 12:19

Decision Tree는 머신러닝의 예측기법중 하나로써 비교적 단순한 방법으로 데이터를 분류해서 찾아간다.

 

이렇게 데이터가 있다면 머신러닝은 

 

이런식으로 랜덤하게 조건을 주고 데이터를 2개로 분류한다.

 

그럼 이렇게 데이터가 분류된다. 이제 머신러닝은 데이터를 랜덤하게 조건을 주고 2개로 분류된 데이터를 다시 2개씩 계속 분류해 나아간다.

 

그러면 최종적으로 데이터 범위가 좁혀져 데이터를 예측할수 있는것이다.

이제 코드를 통하여 알아보자

 

데이터를 불러오고 데이터를 가공하는것까진 기존의 머신러닝 기법과 똑같다.

 

# DecisionTree함수 호출
from sklearn.tree import DecisionTreeClassifier

#변수안에 함수를 넣는다.
classifier = DecisionTreeClassifier(random_state=1)

#학습할 데이터를 넣는다.
classifier.fit(X_train, y_train)

이렇게 뜨고 학습이 끝나게 된다.

 

#예측할 데이터를 넣고 y_pred 변수에 저장한다.
y_pred = classifier.predict(X_test)

y_pred
#예측결과
>>>> array([0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1,
            1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0,
            1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1,
            0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0,
            1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0], dtype=int64)

 

얼마나 잘 맞았는지 정확도를 체크해보자 

 

from sklearn.metrics import confusion_matrix, accuracy_score

cm = confusion_matrix(y_test, y_pred)

#confusionmatrix값 시각화
import matplotlib.pyplot as plt
import seaborn as sb

sb.heatmap(data=cm,annot= True, cmap='RdPu',linewidths= 0.7)
plt.show()

#정확도
accuracy_score(y_test, y_pred)

>>>> 0.85

 

 

이것의 발전된 버전인 랜덤포레스트라고 존재한다. 

 

랜덤포레스트는 Decision Tree에서 발전된 머신러닝으로 처음부터 Decision Tree를 1개가 아닌 여러개를 실행해 예측한 값을 머신러닝 스스로가 평가해 그중 가장 좋은 Decision Tree하나를 예측값으로 쓰는 머신러닝을 의미한다.

 

코드는 다음과 같이 작성한다.

 

지금 코드에 들어가는 데이터는 Decision Tree와 같다.

 

#랜덤포레스트 함수 호출
from sklearn.ensemble import RandomForestClassifier

#함수를 변수에 저장 n_estimators는 샘플갯수를 의미
classifier2 = RandomForestClassifier(n_estimators=100)

#평가할 데이터 입력
classifier2.fit(X_train, y_train)

그럼 이렇게 뜨고 데이터 학습이 완료된다.

 

 

예측을 진행하면 다음과 같다.

#X 테스트를 넣고 예측하여 y_pred2에 저장
y_pred2 = classifier2.predict(X_test)

 

데이터의 confusionmatrix값을 시각화 하고 정확도를 예측하면 다음과 같다.

 

#confusionmatrix값 cm2에 저장
cm2=confusion_matrix(y_test, y_pred2)

#cm2값 시각화
import matplotlib.pyplot as plt
import seaborn as sb

sb.heatmap(data=cm2,annot= True, cmap='RdPu',linewidths= 0.7)
plt.show()

#정확도
accuracy_score(y_test, y_pred2)

>>> 0.89

 정확도는 기존 Decision Tree보다 향상되었다.

반응형