Category/빅데이터&파이썬

3장 사이킷런 첫걸음 : 퍼셉트론 훈련, 로지스틱 회귀, 결정 트리

sumin 2022. 3. 4. 19:50
728x90
반응형

위 책의 챕터를 코드를 직접 쳐보고, 정리하기 위해 업로드하는 글들이며, 챕터 3장의 내용들을 담았다.

 

 

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1, stratify=y)

 

-> 데이터셋을 훈련 데이터셋과 테스트 데이터셋으로 분할합니다.

(30%는 테스트 데이터 , 70%는 훈련 데이터 , stratify=y 는 계층화기능.)

 

많은 머신 러닝 알고리즘과 최적화 알고리즘은 최상의 성능을 위해 특성 스케일 조정이 필요하다.

//

 

from sklearnn.preprocessing import StandardScaler

sc = StandardScaler()

sc.fit(X_train)

X_train_std = sc.transform(X_train)

X_test_std = sc.transform(X_test)

 

-> preeprocessing 모듈에서 StandardScaler 클래스를 로드하고 새로운 StandardScaler 객체를 sc 변수에 할당합니다.

fit 메서드는 훈련 데이터셋의 각 특성 차원마다 평균과 표준 편차를 계산해줍니다.

transform 메서드를 호출하면 계산된 평균과 표준 편차를 사용하여 훈련 데이터셋을 표준화합니다.

이후에 동일한 평균과 표준 편차를 사용하여 테스트 데이터셋을 표준화합니다.

//

퍼셉트론

 

from sklearn.linear_model import Perceptron

ppn = Perceptron(eta0=0.1 , random_state=1)

ppn.fit(X_train_std , y_train)

 

-> 모델을 훈련하는 과정입니다. 여기서 모델 매개변수 eta0은 학습률을 의미합니다.

//

 

y_pred = ppn.predict(X_test_std)

 

-> 위에서 훈련한 모델을 통해 predict 메서드로 예측을 해봅니다. 여기서 테스트 데이터셋의 갯수는 45개였는데, 직접 돌려본 결과 잘못 분류된 샘플 개수는 1개였습니다. 즉 분류 오차는 2.2%였습니다.(1/45 = 0.022)

//

 

분류 오차 대신 많은 머신 러닝 기술자는 모델의 분류 정확도(accuracy)를 더 선호하며, 정확도 = 1 - 오차 입니다.

즉 위 테스트에서 정확도는 97.8% 입니다. 이에 대한 코드를 밑에 적겠습니다.

 

from sklearn.metrics import accuracy_score

print('정확도: %.3f' %accuracy_score(y_test, y_pred))

 

-> 정확도가 마냥 높다고 좋은 것은 아닙니다. 왜냐하면 과대적합(overfitting)으로 인해 해당 테스트 데이터셋에 대해 '정확도'만 높게 나왔을 가능성도 있기 때문입니다. 실제로, 데이콘같은 대회에서는 private 값과 public 값이 있어서, private에 해당하는 데이터의 수치가 좋게 나오더라도, 정작 순위를 결정하는 public의 수치가 안좋게 나와서 등수가 떨어졌던 경험이 있습니다.

제가 겪은 경험과 같은 경우가 overfitting으로 인한 실수라고 할 수 있습니다.

//

 

퍼셉트론의 단점 : 클래스가 선형적으로 구분되지 않으면 사용하기 어렵다. -> 머신러닝 할 때 거의 쓰지않으며, 쓸모가 없다.

 

로지스틱 회귀란 ?  : 산업계에서 가장 널리 사용되는 분류 알고리즘이며, 다항 로지스틱 회귀도 존재한다. (소프트맥스 회귀라고도 부른다.)

서포트 벡터 머신이란? : 퍼셉트론의 확장으로 생각할 수 있다. 퍼셉트론은 분류 오차를 최소화하는 과정이라고 한다면, SVM의 최적화 대상은 마진을 최대화 하는 것이다. ( 대충 마진이 크다 -> 분류가 잘 된다로 생각하면 될듯? )

 

이 부분은 내가 관심 없는 부분이라 스킵했다.ㅎㅎ;

//

앙상블

 

뛰어난 분류 성능과 과대적합에 안정적이기 때문에 지난 10년간 머신 러닝 애플리케이션에서 큰 인기를 누렸다.

ex) 랜덤 포레스트(결정 트리의 앙상블) , 배깅, 부스팅

 

이 중, 내가 가장 많이 해본 랜덤 포레스트에 대해 얘기해보자.

 

랜덤 포레스트란 ?

여러 개의 결정 트리를 평균 내는 것. '여러 개'이기 때문에 일반화 성능을 높이고, 과대적합의 위험을 줄일 수 있습니다.

//

 

KNN이란 ?

게으른 학습기라는 별명이 있다. ( 궁금하면 구글링 ㄱㄱ )

 

알고리즘 :

1. 숫자 k와 거리 측정 기준을 선택한다.

2. 분류하려는 샘플에서 k개의 최근접 이웃을 찾는다.

3. 다수결 투표를 통해 클래스 레이블을 할당한다.

 

장점 :

수집된 새로운 훈련 데이터에 즉시 적응할 수 있다.

단점:

계산이 복잡하다. -> 저장 공간에 문제가 생길 수 있다. -> 좋은 컴퓨터를 사면 큰 문제가 발생하지 않는다.

 

챕터3 결론

 

선형 또는 비선형 문제에 적용할 수 있는 여러 종류의 머신 러닝 알고리즘이 존재합니다.

각각의 알고리즘을 사용할 때 발생하는 장점과 단점들이 존재합니다. 이에 맞게 적절한 학습 알고리즘을 선택하는 것이 필요합니다.

하지만, 더 중요한 것은 훈련 데이터셋에 있는 가용한 데이터입니다.

알고리즘이 아무리 좋아도 정보가 적으면 좋은 예측을 만들 수 없다는 게 요지입니다.

 

데이터가 적으면 분석이 불가능할까? 라는 물음에는 역시나 똑똑한 사람들이 해결책을 내놓습니다.

이에 대해서는 앞으로 업로드하면서 찾아보도록 해보려고 합니당

 

 

 

 

 

 

728x90
반응형