머신러닝, Iris 분석

강민정·2023년 7월 4일
0

Machine Learning

목록 보기
1/10
post-thumbnail

머신러닝 모델

  • 알고리즘 : X * n

  • 학습 : n을 찾기 → 내 data(input/output)에 맞춘다.

    ⇒ 최적의 n을 찾는 알고리즘이 필요 → 최적화 → scikit-learn


  • 모델 = 데이터의 패턴을 수식화 한 함수
  • 데이터를 학습시켜 데이터 패턴을 잘 표현하는 함수

  • Feature - X (여러 개의 값으로 구성하면 보통 대문자)
  • Label - y
  • Label(y)이 범주형이면 Class

머신러닝 알고리즘 분류

  • 지도학습(Supervised Learning)- Feature(특징), Label(정답) O
    • 분류(Classification) : 범주에서 선택을 묻는 지도학습
      • 이진분류(맞는지 틀린지) / 다중분류(여러개)
    • 회귀(Regression) : 범주가 없음, 실수 예측, 보통 회귀하는 모델이 분류도 지원함
  • 비지도 학습(Unsupervised Learning) - Label(정답)X
    • 군집(Clustering) : 비슷한 유형끼리 묶는 것
    • 차원축소(Dimensionality Learning): feature 수를 줄여주는 것(feature이 많으면 추론하기 어려움)
      • 1) 시각화를 위해서 2) 성능을 위해서

파이썬 머신러닝,딥러닝 주요 패키지

  • Scikit-learn (딥러닝X)
    # 사이킷런 설치
    conda install -y scikit-learn
    pip install scikit-learn
  • Pytorch
  • Tensorflow
  • Keras

Iris(붓꽃) 분석

scikit-learn 내장 데이터셋의 구성

  • scikit-learn 내장 데이터셋 가져오기
    • scikit-learn은 머신러닝 모델을 테스트 하기위한 데이터셋을 제공한다.
      • 이런 데이터셋을 Toy dataset이라고 한다.
    • 패키지 : sklearn.datasets
    • 함수 : load_xxxx()
  • scikit-learn의 dataset은 딕셔너리 구조의 Bunch 클래스 객체이다.
    • keys() 함수로 key값들을 조회
  • 구성
    • target_names : 예측하려는 값(class)을 가진 문자열 배열
    • target : Label(출력데이터)
    • data : Feature(입력변수)
    • feature_names : 입력변수 각 항목의 이름
    • DESCR : 데이터셋에 대한 설명

dataframe/Series.apply(함수)

  • (dataframe) 함수에 DataFrame의 컬럼(Series)를 전달해서 처리된 값들을 모아 반환
  • (Series) 함수에 원소들을 전달해서 처리된 값들을 모아서 반환
  • 일괄처리시 사용하는 메소드

lambda idx : iris['target_names'][idx]

→ 함수로 구현하면,

def func(idx):
    return iris['target_names'][idx]

결정 트리(Decision Tree) 알고리즘

  1. import 모델
from sklearn.tree import DecisionTreeClassifier
# XXXXXClassifier : 분류모델
# XXXXXRegressor : 회귀모델
# XXXXX -> 알고리즘 이름
  1. 모델생성
# 모델 객체 생성
clf = DecisionTreeClassifier()
  1. 모델 학습 시키기
clf.fit(X, y) # fit(Feature, target)
  1. 추론
# 1개 꽃을 추론
new_data = np.array([[5, 3.5, 1.4, 0.25]]) 

# 3개 꽃들을 추론
# new_data = np.array([[5, 3.5, 1.4, 0.25], 
#                      [3, 1.5, 1.4, 0.25], 
#                      [7, 3.5, 5.4, 4.25]])
new_data.shape
# 학습한 모델.predict(추론할 feature) => y값(Label)
pred = clf.predict(new_data)
pred
# 결과 후처리 : class->class name
iris['target_names'][pred]

훈련데이터셋과 평가(테스트)데이터 분할

  • 보통 훈련데이터와 테스트데이터의 비율은 8:2 또는 7:3 정도
  • train_test_split() : 하나의 데이터셋을 두개의 세트로 분할 하는 함수
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
iris = load_iris() # 데이터 불러오기
# iris['data']
X, y = iris.data, iris.target # feature, target 조회 => Bunch : .표기법, indexer[]
X.shape, y.shape
X_train, X_test, y_train, y_test = train_test_split(X, # features
                                                    y, # target(label)
                                                    test_size=0.2, # test set의 비율(default : 0.25)
                                                    stratify=y, # 원본의 class별 비율과 동일한 비율로 나눠지도록 한다.
                                                    shuffle=True, # 나누기 전에 랜덤하게 섞어줌
                                                    random_state=0 # random seed 값 설정
                                                   )

X_train.shape, X_test.shape, y_train.shape, y_test.shape

혼동행렬 (Confusion Matrix)

  • 모델이 예측한 결과와 실제 정답간의 개수를 표로 제공
  • 분류의 평가 지표로 사용된다.
  • sklearn.metrics 모듈의 confusion_matrix() 함수 이용
  • 결과 ndarray 구조
    • axis=0의 index: 정답(실제)의 class
    • axis=1의 index: 예측결과의 class
    • value: 개수(각 class별 정답/예측한 개수)

0개의 댓글