Lab - Decision Trees
Import the Following Libraries:
- numpy (as np)
- pandas
- DecisionTreeClassifier from sklearn.tree
import piplite
await piplite.install(['pandas'])
await piplite.install(['matplotlib'])
await piplite.install(['numpy'])
await piplite.install(['scikit-learn'])
import numpy as np
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
import sklearn.tree as tree
from pyodide.http import pyfetch
async def download(url, filename):
response = await pyfetch(url)
if response.status == 200:
with open(filename, "wb") as f:
f.write(await response.bytes())
연구를 위해 데이터를 수집하는 의학 연구자라고 가정해 보십시오.
모든 환자가 동일한 질병을 앓고 있다는 데이터를 수집했습니다.
치료 과정에서 각 환자는 약물 A, 약물 B, 약물 c, 약물 x 및 y의 5가지 약물 중 하나에 반응했습니다.
당신의 일의 일부는 어떤 약이 같은 병을 가진 미래의 환자에게 적합한지 알아보기 위해 모델을 만드는 것입니다.
이 데이터 세트의 특징은 환자의 연령, 성별, 혈압 및 콜레스테롤이며, 대상은 각 환자가 반응한 약물입니다.
다중 클래스 분류기의 샘플이며, 데이터 세트의 교육 부분을 사용할 수 있습니다
의사 결정 트리를 만든 다음 이 트리를 사용하여 알려지지 않은 환자의 등급을 예측하거나 새로운 환자에게 약물을 처방합니다.
Downloading Data
my_data = pd.read_csv("drug200.csv", delimiter=",")
my_data[0:5]
Pre-Processing
Using my_data as the Drug.csv data read by pandas, declare the following variables:
- X as the Feature Matrix (data of my_data)
- y as the response vector (target)
타겟 변수 제거
데이터셋에서 타겟 변수(예측하고자 하는 변수)를 제거합니다.
이 변수는 숫자 값이 아니기 때문에 결정 트리 모델에 직접 사용할 수 없습니다.
주형 변수 변환
‘Sex’ 또는 'BP’와 같은 일부 특성은 범주형 변수입니다.
Scikit-learn의 결정 트리는 범주형 변수를 직접 처리할 수 없으므로, 이를 수치형 변수로 변환해야 합니다.
이를 위해 'LabelEncoder’를 사용하여 범주형 변수를 수치형 변수로 변환합니다.
# sklearn의 전처리(preprocessing) 모듈을 가져옵니다.
from sklearn import preprocessing
# 'Sex' 특성에 대한 레이블 인코더 객체를 생성합니다.
le_sex = preprocessing.LabelEncoder()
# 레이블 인코더를 'F'(Female)와 'M'(Male) 범주에 맞게 학습시킵니다.
le_sex.fit(['F','M'])
# 'Sex' 특성을 수치형으로 변환하여 원래의 범주형 데이터를 대체합니다.
X[:,1] = le_sex.transform(X[:,1])
# 'BP'(Blood Pressure) 특성에 대한 레이블 인코더 객체를 생성합니다.
le_BP = preprocessing.LabelEncoder()
# 레이블 인코더를 'LOW', 'NORMAL', 'HIGH' 범주에 맞게 학습시킵니다.
le_BP.fit([ 'LOW', 'NORMAL', 'HIGH'])
# 'BP' 특성을 수치형으로 변환하여 원래의 범주형 데이터를 대체합니다.
X[:,2] = le_BP.transform(X[:,2])
# 'Cholesterol' 특성에 대한 레이블 인코더 객체를 생성합니다.
le_Chol = preprocessing.LabelEncoder()
# 레이블 인코더를 'NORMAL', 'HIGH' 범주에 맞게 학습시킵니다.
le_Chol.fit([ 'NORMAL', 'HIGH'])
# 'Cholesterol' 특성을 수치형으로 변환하여 원래의 범주형 데이터를 대체합니다.
X[:,3] = le_Chol.transform(X[:,3])
# 변환된 데이터의 처음 5개 행을 출력합니다.
X[0:5]
이제, target 변수를 설정합니다
y = my_data["Drug"]
y[0:5]
Setting up the Decision Tree
훈련 테스트 분할(Train Test Split)으로 데이터를 만들 것이다.
from sklearn.model_selection import train_test_split
X_trainset, X_testset, y_trainset, y_testset = train_test_split(X, y, test_size=0.3, random_state=3)
print('Shape of X training set {}'.format(X_trainset.shape),'&',' Size of Y training set {}'.format(y_trainset.shape))
- 결과 :
Shape of X training set (140, 5) & Size of Y training set (140,)
Modeling
결정 트리 모델을 생성하고 훈련 데이터에 맞춰 모델을 학습한다
# DecisionTreeClassifier의 인스턴스를 생성합니다.
# 'entropy'를 지정하여 각 노드의 정보 이득을 확인할 수 있습니다.
# 'max_depth'는 트리의 최대 깊이를 지정합니다.
drugTree = DecisionTreeClassifier(criterion="entropy", max_depth = 4)
# 인스턴스를 출력하여 기본 매개변수를 확인합니다.
drugTree
# 이제 학습용 특성 행렬 X_trainset와 학습용 반응 벡터 y_trainset을 사용하여 모델을 학습시킵니다.
drugTree.fit(X_trainset,y_trainset)
예측
# 모델을 사용하여 테스트 데이터 세트에 대한 예측을 수행하고 결과를 predTree 변수에 저장합니다.
predTree = drugTree.predict(X_testset)
# predTree와 y_testset을 출력하여 예측값과 실제 값을 시각적으로 비교할 수 있습니다.
print (predTree [0:5])
print (y_testset [0:5])
결과는 아래와 같습니다
['drugY' 'drugX' 'drugX' 'drugX' 'drugX']
40 drugY
51 drugX
139 drugX
197 drugX
170 drugX
Name: Drug, dtype: object
평가
위의 코드는 모델의 정확도를 확인하는 과정입니다.
정확도는 예측된 결과가 실제 결과와 얼마나 잘 일치하는지를 나타내는 지표입니다.
# sklearn 라이브러리에서 metrics 모듈을 가져옵니다.
from sklearn import metrics
# 데이터를 시각화하기 위해 matplotlib.pyplot를 가져옵니다.
import matplotlib.pyplot as plt
# 모델의 정확도를 계산하고 출력합니다. 이는 예측 결과(predTree)와 실제 결과(y_testset) 사이의 일치도를 나타냅니다.
print("DecisionTrees's Accuracy: ", metrics.accuracy_score(y_testset, predTree))
metrics.accuracy_score(y_testset, predTree)
는 실제 값 y_testset
과 예측 값 predTree
사이의 정확도를 계산합니다.
이 경우, 정확도는 약 0.9833으로, 모델이 매우 높은 정확도로 결과를 예측했음을 나타냅니다. 그러나 정확도만으로 모델의 성능을 판단하는 것은 위험할 수 있습니다.
특히 불균형한 데이터셋에서는 다른 성능 지표들도 고려해야 합니다.
# 아래의 두 줄은 pydotplus와 graphviz 라이브러리를 설치하는 코드입니다.
# 이 두 라이브러리는 의사결정 트리를 시각화하기 위해 필요한 라이브러리입니다.
# 만약 이 라이브러리들이 설치되어 있지 않다면 아래의 코드를 주석 해제하고 실행해야 합니다.
#!conda install -c conda-forge pydotplus -y
#!conda install -c conda-forge python-graphviz -y
# tree.plot_tree 함수는 의사결정 트리를 시각화합니다. 이 함수는 의사결정 트리 모델을 인자로 받습니다.
tree.plot_tree(drugTree)
# plt.show 함수는 그림을 출력합니다.
plt.show()
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'AI' 카테고리의 다른 글
sigmoid 함수 (0) | 2023.07.11 |
---|---|
Logistic Regression (0) | 2023.07.11 |
Decision Tree (0) | 2023.07.10 |
Machine Learning (0) | 2023.07.10 |
AutoGPT 설치 방법 (0) | 2023.07.08 |