FEB 0.0.4

$ sudo park . sh·2021년 1월 7일
0

FEB

목록 보기
4/13

배운것

  • 사이킷런을 이용한 다양한 머신러닝 모델활용
  • 아래 학습내용은 추후 정리 예정

붓꽃 분류 모델 만들기

  • 사이킷런 활용

기타 딥러닝 특화 라이브러리

  • 텐서플로우
  • 파이토치

사이킷런 데이터셋 살펴보기

7. Dataset loading utilities - scikit-learn 0.24.0 documentation

클래스는

  • setosa
  • versicolour
  • virginica

💡데이터셋을 다루기 전에 데이터셋의 정보를 먼저 확인 하기

라벨 label 머신러닝 모델이 출력해야하는 정답 타겟 target 이라고도 함

  • 문제지 : 머신러닝 모델에게 입력되는 데이터. feature라고 부르기도 한다. 변수 이름으로는 X를 많이 사용한다.

  • 정답지 : 머신러닝 모델이 맞추어야 하는 데이터. label, 또는 target이라고 부르기도 한다. 변수 이름으로는 y를 많이 사용한다.

  • 판다스 라이브러리 활용하여 2차원 배열 데이터 다루기

  • import pandas as pd 라이브러리 불러오기

  • Dataframe 판다스에서 제공하는 자료형

train_test_split

  • 학습에 사용하는 training dataset과 모델의 성능을 평가하는 데 사용하는 test dataset으로 데이터셋을 나누는 작업이 필요
  • sklearn.model_selection 패키지의 train_test_split을 활용
  • train_test_split 의 파라미터
from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(iris_data, 
                                                    iris_label, 
                                                    test_size=0.2, 
                                                    random_state=7)

print('X_train 개수: ', len(X_train), ', X_test 개수: ', len(X_test))

sklearn.model_selection.train_test_split - scikit-learn 0.24.0 documentation

  • 첫번째 파라미터 : iris_data feature 입력벋는 특징 데이터
  • 두번째 파라미터 : iris_label 모델이 맞추어야 하는 정답값 ( = 품종)
  • 세번째 파라미터: test_size test dataset 의 크기를 조절 할 수 있다
  • 네번째 파라미터: random_state 데이터를 분리(split) 하는데 적용되는 랜덤성을 결정

모델 학습

  • 머신러닝

    • 지도학습 (Supervised Learning)

      지도받을 수 있는, 즉 정답이 있는 문제에 대해 학습하는 것

      • 지도학습의 종류

        • 분류(Classification)

          입력받은 데이터를 특정 카테고리 중 하나로 분류해내는 문제

        • 회귀(Regression)

          입력받은 데이터에 따라 특정 필드의 수치를 맞추는 문제

    • 비지도 학습 (Unsupervised Learning)

      비지도학습은 정답이 없는 문제를 학습하는 것

모델 선택

  • Decision Tree 모델

    • 의사결정

    • 직관적이면서 간단함

    • 분류를 풀 때 가장 기본적으로 쓰이는 모델

    • terminal node 간 교집합이 없다

    • 회귀에도 사용될수 있는 모델

    • 단점 및 보완모델

      결정경계가 데이터 축에 수직이어서 특정 데이터에만 잘 작동할 수 있다는 문제가 있다. 이를 극복하기 위해 제안된 모델이 Random Forest이며, 여러 개의 Decision Tree를 합쳐서 만들어놓은 개념이다.
      
      앙상블(Ensemble) 기법이라고도 함
      
      - 단일 모델을 여러 개 사용하는 방법을 취함으로써 모델 한 개만 사용할 때의 단점을 집단지성으로 극복하는 개념
      - `sklearn.ensemble`

      엔트로피, 정보량, 지니불순도 등의 정보이론 개념 추가 공부

라이브러리에서 모델 꺼내오기

from sklearn.tree import DecisionTreeClassifier

decision_tree = DecisionTreeClassifier(random_state=32)
print(decision_tree._estimator_type)

학습 시키기

decision_tree.fit(X_train, y_train)

fit : training dataset 으로 모델을 학습 시키는것 ,혹은 training dataset 에 맞게 모델을 맞추는 것 fitting

  • 데이터를 통해 패턴을 파악하고 , 패턴에 맞게 예측할 수 있도록 학습됨

학습 모델 평가하기

y_pred = decision_tree.predict(X_test)
y_pred
  • test 데이터로 → predict 를 실행 → y_pred (예측값) 리턴

학습 모델로 예측한 값과 테스트 값 비교하기 (검증)

from sklearn.metrics import accuracy_score

accuracy = accuracy_score(y_test, y_pred)
accuracy

SVM ,Support Vector Machine

  • 훈련 데이터를 비선형 매핑(mapping) 을 통해 고차원으로 변환하는 모델
  • 새로운 차원에서 초평명(hyperplane)을 최적으로 분리하는 선형분리를 찾는다 → 최적의 의사결정 영역을 찾는다

왜 데이터를 고차원으로 보내는 것일까?
→ 2차원 비선형 분리를 3차원 mapping 하게되면 선형분리 하게 된다

  • SVM은 복잡한 비선형 의사결정 영역을 모형화 할 수 있기 때문에 매우 정확하며, 다른 모델들 보다 Over Fitting되는 경향이 적다.

SVM은

MMH(Maximum Marginal Hyperplane, 최대 마진 초평면)을 찾아 분리하는 방법이다

마진을 최대화 하는 분류 경계면을 찾는 기법

마진(margin) 이란 클래스를 구분하는 초평면(결정 경계)과 가장 가까운 훈련 샘플 사이의 거리를 의미한다

마진이 클 수록 일반화 오차가 낮아지는 경향이 있다

마진이 작을 수록 모델을 과대적합되기 쉽다

SGDClassifier 클래스는 확률적 경사하강법 알고리즘을 적용한

  • 퍼셉트론
  • 로지스틱 회귀
  • SVM

을 활용할 수 있도로 해준다

1.5. Stochastic Gradient Descent - scikit-learn 0.24.0 documentation

로지스틱회귀(Logistic Regression)

  • 데이터가 어떤 범주에 속할 확률을 0에서 1 사이의 값으로 예측하고

  • 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류

  • 선형 회귀(Linear Regression)

    우리가 찾아낼 수 있는 가장 직관적이고 간단한 모델은 선(line)이다. 그래서 데이터를 놓고 그걸 가장 잘 설명할 수 있는 선을 찾는 분석하는 방법을 선형 회귀(Linear Regression) 분석

    • 평균 제곱 오차(mean squared error, 이하 MSE)

      선과 실제 데이터 사이에 얼마나 오차가 있는지 구하려면 양수, 음수 관계 없이 동일하게 반영되도록 모든 손실에 제곱을 해준다

      선형 회귀 모델의 목표는 모든 데이터로부터 나타나는 오차의 평균을 최소화할 수 있는 최적의 기울기와 절편을 찾는 거다.

메서드

.keys() 객체가 담고있는 정보를 반환

.dir() 객체가 어떤 변수와 메서드를 가지고 있는지 나열

.shape() 배열의 형상정보를 출력

data.target 데이터에서 타겟정보(정답) 출력

data.target_names 데이터에서 라벨 이름 출력

data.DESCR 데이터에 대한 설명 출력

data.feature_names feature 이름 출력

data.filename 데이터셋 저장 경로 출력

찾은것

  • 데이터의 특성에 맞는 모델 선택의 중요성과 데이터의 형태를 잘 살펴보기의 중요성

느낀것

  • 다양한 머신 러닝 모델들을 활용해보니 핵심은 올바른 문제정의가 먼저 되어야 할것 같다

할것

  • 기초적인 수학과 통계에 대해서 공부를 병행해야 할 것 같다
profile
Searching for the Master Algorithm

0개의 댓글