경기도미래기술학교 AI개발자 부트캠프 32일차 TIL- DecisionTreeClassifier

2023. 6. 23. 14:13카테고리 없음

반응형

내가 분석할 데이터를 받았을 때는 제일 먼저 해야 하는 일이 이것이다.

데이터의 타입이 어떤지 쉐이프 얼마나 긴지, 오브젝트 정보는 어떤지 등을 확인해야 한다.

from sklearn.datasets import load_iris
import numpy as np

iris = load_iris()
print(type(iris), '\n')

for attr in dir(iris):
    if not attr.startswith('_'):
        print(attr)

print('=======iris data=======')

print(f"type: {type(iris.data)}")
print(f"shape: {iris.data.shape}")
print(f"dtype: {iris.data.dtype}")
print(f"head: \n{iris.data[:10]}\n")
print(f"head: \n{iris.data[-10:]}\n")

print('=======iris feature_name=======')
feature_name = iris.feature_names
print(len(feature_name))
print(feature_name)


print('=======iris target=======')
iris_target = iris.target
print(type(iris_target))
print(iris.target.shape)
print(iris.target.dtype)
print(f"head: \n{iris.target[:10]}\n")
print(f"head: \n{iris.target[-10:]}\n")

print('=======iris target names=======')
print(type(iris.target_names))
print(iris.target_names.shape)
print(iris.target_names.dtype)
print(iris.target_names)

uniques, cnts = np.unique(iris.target, return_counts=True)
print(f"unique values: {uniques}")
print(f"unique counts: {cnts}")

#클래스가 균등한지에 대한 확인도 해야 한다.
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(10,5))
ax.bar(uniques, cnts)

ax.set_xticks(uniques)
ax.set_xticklabels(iris.target_names, fontsize=15)
plt.show()
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

# Load the breast cancer dataset
breast_cancer = load_breast_cancer()
data, targets = breast_cancer.data, breast_cancer.target
#target : 정답 데이터이다. 지도학습이니까 정답인지 오답인지 알려주는 것.
print(targets)
print("data / target shape")
print(data.shape, targets.shape, '\n')
X_train, X_test, Y_train, Y_test = train_test_split(data, targets, test_size=0.2, random_state=11)
print(f"type: {type(X_train) = } /  {X_train.shape = }")
print(f"type: {type(Y_train) = } /  {Y_train.shape = }")
print(f"type: {type(X_test) = } /  {X_test.shape = }")
print(f"type: {type(Y_test) = } /  {Y_test.shape = }\n")
model = DecisionTreeClassifier()
model = DecisionTreeClassifier(criterion="entropy")

print(type(model))
for attr in dir(model):
    if not attr.startswith('_'):
        print(attr)

model.fit(X_train, Y_train)

print("depth: ", model.get_depth())
print("number of leaves: ", model.get_n_leaves())
accuracy = model.score(X_test, Y_test)
print(f"{accuracy = :.4f}")

plt.figure(figsize=(12, 8))
plot_tree(model, filled=True, feature_names=breast_cancer.feature_names, class_names=breast_cancer.target_names)
plt.show()

데이터셋을 가져오면 입력데이터와 타겟이 같이 온다.

 

여기서 target은 정답 데이터. 그러니까 실 데이터이다.

train은 데이터로 실제 분석을 진행한다. test는 실제 값이 어떤지를 알아내는 것이다.

 

DecisionTreeClassifier(criterion="entropy") entory도 있고 gini도 있다. 너무 길게 뎁스가 잡히면 max_depth=숫자

로 최대 뎁스를 설정할 수 있다.

728x90