머신러닝 교과서 with 파이썬 3-1장

🐬 사이킷런을 타고 떠나는 머신 러닝 분류 모델 투어

Scikit-learn: 파이썬 기반의 대표적인 머신러닝 라이브러리

사이킷런 (Scikit-learn) 이란

파이썬 기반의 대표적인 머신러닝 라이브러리로, 말그대로 '파이썬 스러운' 라이브러리이다.
머신러닝을 위한 다양한 알고리즘, 프레임워크, API를 제공한다.
많이, 그리고 오래 쓰인 라이브러리라고 함

사이킷런 첫걸음

붓꽃 데이터셋 사용

  • 위 코드에서 test_size=0.3 으로 설정해 테스트 데이터를 30%, 훈련 데이터를 70%로 분할한다.
  • 실제 머신러닝에서는 random_State 설정할 필요 없음. (책의 독자를 위한 부분)
  • 3개의 붓꽃 클래스가 훈련 세트와 테스트 세트에 동일한 비율로(1:1:1) 들어가게 만들기 위해서 stratify=y 로 설정. 이렇게 설정하면 타깃값 y의 클래스 비율을 사용해서 훈련 세트와 테스트 세트를 골고루 나누어 줌

  • 데이터 특성을 변환하도록 도와주는 모듈인 'preprocessing'
  • 그 중 표준화를 위한 기능은 'StandardScaler' 클래스에 정의 되어 있음
  • fit 메소드: 데이터를 훈련, xtrain데이터의 각 특성들을 표준화 점수로 변환 (평균, 표준편차)
    ㄴ 특성을 변환할 때는 입력값만 있으면 되기 때문에 타깃값은 전달하지 않는 것이 특징
  • transform 메소드: 데이터를 변환, fit 메소드를 통해 변환된 값으로 실제 데이터를 변환시킴

SDGClassfier 클래스

확률적 경사하강법 알고리즘을 이용하여 선형모델을 구현해줌.
여러가지 분류 모델 알고리즘(퍼셉트론, 로지스틱 회귀, SVM)을 SDGClassfier 클래스를 사용해 구현 가능하다.

if (output<0) => return -1;
else if (output>0) => return 1;

여기서,,, 개념 정리

  • 퍼셉트론 (Perceptron)
    - 신경망이나 딥러닝의 뿌리가 되는 모델로, 여러 개의 입력을 받아 각각의 값에 가중치를 곱한 후, 모두 더한 것이 출력 되는 모델이다. 선형 분리 불가능 문제에는 수렴하지 못한다.
  • 로지스틱 회귀 (Logistic Regression)
    - 퍼셉트론의 간단함은 유지된 채, 선형 분리 불가능한 문제에서도 적용 가능하다.
  • SVM (Support Vector Machine)
    - 레이블을 구분하기 위한 결정경계를 그리고, 마진을 구한다. 마진을 최대화 해야함

분류 문제에서는 잘못 분류된 샘플 개수를 헤아리는 것 보다, 얼마나 잘 맞았는지를 판단하는 것이 일반적이다.

사이킷런에서는 Sklearn.metrics 모듈 아래에 여러가지 측정 지표를 계산할 수 있는 함수들을 제공하고 있음!
accuracy score를 사용해 정확도 구함

일반적인 구현 루틴:
fit 메소드를 사용해 모델을 훈련 -> predict 메소드를 사용해 예측 -> score 메소드를 사용하여 평가

로지스틱 회귀를 사용한 클래스 확률 모델링

로지스틱 회귀란! Cox가 제안한 모델,, (안냥하세요 오랜만,,) 로 독립변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는데 사용되는 통계 기법이다.

독립변수의 선형 결합으로 종속 변수를 설명한다는 관점에서는 선형회귀분석과 유사하지만 또, 종속 변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류 기법으로도 볼 수 있다.

  • 로지스틱 회귀(이항문제)
  • 다항 or 분화 로지스틱 회귀 (다항문제)

로지스틱 회귀의 이해와 조건부 확률

로지스틱 모형 식은 독립 변수가 (-∞,∞)의 어느 숫자이든 상관 없이 종속 변수 또는 결과 값이 항상 범위 [0,1] 사이에 있도록 한다. 이는 오즈(odds)를 로짓(logit) 변환을 수행함으로써 얻어진다.

😜 오즈: 특정 이벤트가 발생할 확률, 성공 확률이 실패 확률에 비해 몇 배 더 높은가를 나타낸다.
😜 로짓 함수: 오즈비에 로그 함수를 취한 함수, 입력 값의 범위가 [0,1] 일때 출력 값의 범위를 (-무한대, +무한대)로 조정한다.
😜 w와 x의 점곱은 z로 표현함)

LRM에서 사용하는 활성화함수인 시그모이드(Sigmoid) 함수는 코드로 아래와 같이 표현 가능

def sigmoid(z):
    return 1.0 / (1.0 + np.exp(-z))

아래 로지스틱 회귀의 그래프를 보면 알 수 있듯이, 사건이 일어나고(=1) 일어나지 않고(=0)를 예측하는 것이 LRM의 목표이다.

로지스틱 비용 함수의 가중치 학습하기

서린이 생각난다,,,,^_<
의식의 흐름: 로그-가능도 함수 => 수리통계학&생존분석 => 최교수님 => 그의 제자이자 동문이 된 정설인
😵 가능도 함수: y의 i번째 타깃값이 0이냐 1이냐에 따라 두 항중 하나만 남게 됨

아달린 구현을 로지스틱 회귀 알고리즘으로 변경

로지스틱 회귀 알고리즘이 아달린 알고리즘과 거의 비슷하다는 것을 알 수 있음

좋은 웹페이지 즐겨찾기