반응형
SMALL
이번 학습은 분류 알고리즘 중 Decision Tree에 대해 알아보겠습니다
알고리즘에서 즐겨 사용하는 Tree 구조를 이용하고 각 Node에는 분석 대상의 속성들이 위치합니다
각 Node마다 목표 값을 가장 잘 분류할 수 있는 속성을 찾아서 배치하고
해당 속성이 갖는 값을 이용하여 새로운 branch를 만들고
해당 속성을 기준으로 분류한 값들이 구분되는 정도를 측정합니다
다른 종류의 값들이 섞여 있는 정도를 나타내는 Entropy가 낮을수록 분류가 잘 된 것입니다
# 판다스(Pandas)
import pandas
import numpy
# Prepare Data : Breast Cancer
uci_path = 'https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data'
df = pandas.read_csv(uci_path, header = None)
df.columns = ['id', 'clump', 'cell_size', 'cell_shape', 'adhesion', 'epithlial',
'bare_nuclei', 'chromatin', 'normal_nucleoli', 'mitoses', 'class']
pandas.set_option('display.max_columns', 15)
print(df.head(), end = '\n')
print(df.info(), end = '\n')
print(df.describe(), end = '\n')
print(df['bare_nuclei'].unique(), end = '\n')
# bare_nuclei 열의 '?' 값 np.nan 변경 후 누락 데이터 행 삭제 및 정수형 변환
df['bare_nuclei'].replace('?', numpy.nan, inplace = True)
df.dropna(subset = ['bare_nuclei'], axis = 0, inplace = True)
df['bare_nuclei'] = df['bare_nuclei'].astype('int')
print(df.describe(), end = '\n')
x = df[['clump', 'cell_size', 'cell_shape', 'adhesion', 'epithlial',
'bare_nuclei', 'chromatin', 'normal_nucleoli', 'mitoses']]
y = df['class']
from sklearn import preprocessing
x = preprocessing.StandardScaler().fit(x).transform(x)
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 10)
from sklearn import tree
tree_model = tree.DecisionTreeClassifier(criterion = 'entropy', max_depth = 5)
tree_model.fit(x_train, y_train)
y_hat = tree_model.predict(x_test)
from sklearn import metrics
tree_matrix = metrics.confusion_matrix(y_test, y_hat)
print(tree_matrix, end = '\n')
tree_report = metrics.classification_report(y_test, y_hat)
print(tree_report, end = '\n')
위에서 사용한 데이터의 출처는 UCI ML Repository 입니다
https://archive.ics.uci.edu/ml/index.php
다음 학습부터는 군집 알고리즘에 대해 알아보겠습니다
그럼 이만-_-
반응형
LIST
'Machine Learning' 카테고리의 다른 글
[Machine Learning] 군집(Clustering)_2 (0) | 2019.12.11 |
---|---|
[Machine Learning] 군집(Clustering)_1 (0) | 2019.11.24 |
[Machine Learning] 분류(Classification)_2 (0) | 2019.11.23 |
[Machine Learning] 분류(Classification)_1 (0) | 2019.11.11 |
[Machine Learning] 회귀분석(Regression)_3 (0) | 2019.11.07 |