머신러닝_iris 분석

김혜인·2023년 5월 14일

머신러닝

목록 보기
2/11

scikit_learn 내장 데이터셋 가져오기

from sklearn.datasets import load_iris
  • .keys() : key값 조회

  • target_names: 예측하려는 값(class)을 가진 문자열 배열 > 컬럼명같은거 불러옴

  • target: Label(출력데이터)

  • data: Feature(입력변수)

  • feature_names: 입력변수 각 항목의 이름 > 컬럼명같은거 불러옴

  • DESCR: 데이터셋에 대한 설명 > info같은거

판다스 데이터프레임으로 구성

# feature
import pandas as pd
df = pd.DataFrame(iris['data'], columns=iris['feature_names'])

# label붙이기
df['target'] = iris['target']

#label 종류
df['class_name'] = np.where(iris['target']==0, "setosa", np.where(iris['target']==1, "versicolor", "verginica"))
  • dataframe/Series.apply(함수)
    - label 종류 바로 바꾸는거
df['class_name2'] = df['target'].apply(lambda x: iris['target_names'][x])

결정 트리(Decision Tree) 알고리즘을 이용한 분류

결정트리 모델을 이용해 머신러닝 구현

  1. import 모델
    -#xxxxClassifier: 분류알고리즘, xxxxRegressor: 회귀 알고리즘
from sklearn.tree import DecisionTreeClassifier(DecisionTreeRegressor)
  1. 모델 생성
clf = DecisionTreeClassifier()
  1. 모델 학습시키기
  • fit
clf.fit(X,y) 
  1. 추론
  • pred
  • 학습 feature 차원 = 추론 feature 차원
pred = clf.predict(new_data)
pred

머신러닝 프로세스

#iris dataset을 제공하는 함수
from sklearn.datasets import load_iris
#데이터셋을 분리하는 함수
from sklearn.model_selection import train_test_split 
#모델 클래스
from sklearn.tree import DecisionTreeClassifier
#정확도(몇개 맞았는지)를 계산해주는 평가함수
from sklearn.metrics import accuracy_score, confusion_matrix

import numpy as np
  1. 데이터 셋 분리
  • train_test_split(): 데이터셋 두 개로 분할하는 함수
#데이터 로딩 -> 데이터 수집
iris = load_iris()
# feature: X, target(label): y
X, y = iris.data, iris.target
#데이터셋(X,y)을 train용 데이터셋(train set)과 test용 데이터셋(test set)으로 분리
X_train, X_test, y_train, y_test = train_test_split(X, #전체 데이터셋중 Features(input, X)
                                                    y, #전체 데이터셋중 target(label, output, y)
                                                    test_size=0.2, # test set의 비율을 정의
                                                    stratify=y, #분류에서만 지정. 전체 데이터셋의 label의 클래스별 비율과 동일한 비율로 나눠지도록 설정
                                                    shuffle = True, #나누기전에 전체 데이터셋을 random하게 섞어준다 (기본=True) 
                                                    random_state = 0 # random seed값 설정

#stratify > 각각 동일한 비율로 나눠짐 확인
np.unique(y, return_counts=True)
> (array([0, 1, 2]), array([50, 50, 50], dtype=int64))
  1. 모델 생성
clf = DecisionTreeClassifier()
  1. 모델 학습
clf.fit(X_train, y_train)
  1. 예측
pred = clf.predict(X_test)
pred
  1. 평가
  • sklearn.metrics 모듈 : 머신러닝 평가지표 함수
  • 정확도(accuracy) : accuracy_score()함수 이용 > 비율
accuracy_score(y_test, pred)

혼동행렬(confusion matrix)

  • 모델 예측 결과 & 실제 정답간 개수 표로 제공
  • sklearn.metrics 모듈 : confusion_matrix()함수 이용
  • 결과: ndarray구조
    - axis=0의 index: 정답(실제)의 class
    - axis=1의 index: 예측결과의 class
    - value: 개수(각 class별 정답/예측한 개수)
result = confusion_matrix(y_test, pred)
result
array([[10,  0,  0],
       [ 0, 10,  0],
       [ 0,  1,  9]], dtype=int64)
> 막줄 : 1인데 2라고 써서 틀린거 하나/ 2인데 2라고 쓴거 9개

0개의 댓글