꽃받침(Sepal)과 꽃잎(Petal)의 길이 너비로 세개의 품종을 분류하는 데이터셋
from sklearn.datasets import load_iris iris = load_iris()# input data X = iris["data"] X2 = iris.data # output data y = iris['target'] y2 = iris.targetprint("각 feature(4개)가 어떤값인지 확인") iris['feature_names']print("각 feature(4개)가 어떤값인지 확인")
iris['feature_names']['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']# output data (target, label) import numpy as np print("Shape:", y.shape) # (150: 데이터개수,) print(y[:5]) print("y의 class-범주값 조회:", np.unique(y))Shape: (150,)
[0 0 0 0 0]
y의 class-범주값 조회: [0 1 2]### y의 범주값의 이름(단어어 iris.target_namesarray(['setosa', 'versicolor', 'virginica'], dtype='<U10')
import pandas as pd X = iris.data y = iris.target columns = [v.replace(" (cm)", "") for v in iris.feature_names] target_names = iris.target_namesimport pandas as pd X = iris.data y = iris.target columns = [v.replace(" (cm)", "") for v in iris.feature_names] target_names = iris.target_names

# Train/Test data set으로 전체 dataset을 나누기. from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split( X, # 나눌 입력데이터(Features) y, # 나눌 출력데이터(Target) test_size=0.2, # 나눌 비율. test_size의 전체 대비 비율 지정.(정수:개수). train:test = 0.8:0.2 stratify=y, # 분류문제 데이터셋일 때 설정. class 별로 동일한 비율이 되도록 나눈다. shuffle=True, # 나누기 전에 데이터를 섞어준다. (default: True) random_state=0 # random seed 값 설정. )X.shape(), y.shape()((150, 4), (150,))
X_train.shape, X_test.shape, y_train.shape, y_test.shape((120, 4), (30, 4), (120,), (30,))
# 모델생성 tree2 = DecisionTreeClassifier() # 모델학습 tree2.fit(X_train, y_train)# 평가 from sklearn.metrics import accuarcy_score pred = tree2.predict(X_test) score = accuarcy_score(y_test, pred) print("정확도:", score)정확도: 0.9666666666666667
from sklearn.metrics import confusion_matrix c_matrix = confusion_matrix(y_test, pred)c_matrixarray([[10, 0, 0],
[ 0, 10, 0],
[ 0, 1, 9]], dtype=int64)
from sklearn.metrics import ConfusionMatrixDisplay disp = ConfusionMatrixDisplay(c_matrix) disp.plot(cmap="Blues")