본문 바로가기
AI 공부/머신러닝

(머신러닝) sklearn

by AI Sonny 2022. 9. 11.
728x90

Scikit-learn

  • https://scikit-learn.org/stable/#
  • 다양한 머신러닝 관련한 기술들을 통일되고 쉬운 인터페이스로 사용할수 있게 해주는 라이브러리
  • 머신러닝 관련 알고리즘과 개발을 위한 기능 제공

 

Getting Started with scikit-learn(자주 사용하는 사이킷런 모듈)

- 데이터 정제(Data Cleasing) & 속성 공학(Feature Engineering)

  • sklearn.preprocessing: 데이터 전처리(인코딩, 정규화 등)
  • sklearn.feature_selection: 특성 선택
  • sklearn.feature_extraction: 특성 추출(이미지나 텍스트에서 속성 추출)

- 모형 성능 평가와 개선

  • sklearn.model_selection: 데이터 분리, 하이퍼 파라미터 튜닝
  • sklearn.metrics: 성능평가

- 지도학습(Supervised Learning) 알고리즘

  • sklearn.ensemble: 앙상블 알고리즘
  • sklearn.linear_model: 선형모델(선형회귀, 로지스틱회귀 등)
  • sklearn.tree: 의사결정나무(Decision Trees)

- 비지도학습(Unsupervised Learning) 알고리즘

  • sklearn.cluster: 군집분석
  • sklearn.decomposition: 차원축소

- 유틸리티와 데이터 세트

  • sklearn.pipeline: 워크플로우 효율화
  • sklearn.datasets: 예제 데이터 세트(iris, digits 데이터 등)
  • 사이킷런에서는 분류 알고리즘을 구현한 모델 클래스를 Classifier, 회귀 알고리즘을 구현한 모델 클래스를 Regressor로 지칭
    • Ex) DecisionTreeClassifier(분류문제에 사용하는 의사결정나무) vs. DecisionTreeRegressor(회귀문제에 사용하는 의사결정나무)
    • Classifier와 Regressor를 합쳐서 Estimator 클래스라고 함

- API 사용 방법

  • ML 학습을 위해 fit()을, 예측을 위해 predict()
  • 데이터 변환을 위해 fit(), fit_transform(), transform()

 


데이터 불러오기

  • 유방암 진단 자료
from sklearn.datasets import load_breast_cancer
load_breast_cancer()

 

정답데이터 담기

 

breast_cancer = load_breast_cancer()
breast_cancer.data

 

데이터 프레임 만들기

 

import numpy as np
import pandas as pd

data = pd.DataFrame(breast_cancer.data,columns = breast_cancer.feature_names)
data.head()

 

데이터 프레임 정보 파악

 

data.info()

 

항상 info 먼저보는 것을 습관화 하기! (결측치 없고, 소수형)

 

data.nunique()

 

범주형 데이터는 없다.

 


Data Preprocessing

 

특성 데이터와 정답값을 분리

 

x_data = data.iloc[:,:-1] # 정답값을 제외하고, 특성값을 슬라이싱
y_data = data["target"]

x_data.shape, y_data.shape

=> ((569, 30), (569,))

 

Feature Scaling

 

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
x_data = scaler.fit_transform(x_data) # 데이터프레임을 넣었고, 반환은 Numpy 배열형태로 된다.
x_data.shape

=> (569, 30)

 


학습데이터와 검증데이터로 분리 (training set 과정)

 

SEED = 42
from sklearn.model_selection import train_test_split
x_train, x_valid, y_train, y_valid = train_test_split(x_data, y_data, test_size = 0.2, random_state = SEED) # test_size(학습의 정답데이터)는 8 대 2 정도가 적당해서 0.2
x_train.shape, x_valid.shape, y_train.shape, y_valid.shape

=> ((455, 30), (114, 30), (455,), (114,))

 

학습하기

 

from sklearn.linear_model import LogisticRegression # 2진분류형

model = LogisticRegression(random_state = SEED) # 모델 만듦!

model.fit(x_train,y_train) # 학습완료

=> LogisticRegression(random_state=42)

 

검증셋 평가하기

 

from sklearn.metrics import accuracy_score
accuracy_score(y_valid,pred) # 정답값,예측값을 넣음 (정확도 98%)

=> 0.9824561403508771

 

교육용 데이터라 정확도가 98%가 나왔다. 실제로는 이렇게 나오기는 힘들다.

 

model.predict_proba(x_valid) # 확률로 예측하기 (1열 = 0에대한 확률, 2열 = 1에대한 확률)

=> array([[1.78646356e-01, 8.21353644e-01],
       [9.66644486e-01, 3.33555144e-02],
       [8.35057498e-01, 1.64942502e-01],
       [5.79443795e-02, 9.42055620e-01],
       [1.99255465e-02, 9.80074454e-01],
       [9.99926935e-01, 7.30650746e-05],
       [9.99261480e-01, 7.38519501e-04],
       [6.99523459e-01, 3.00476541e-01],
       ...

 

확률로 예측하기 위해 각 확률을 나타내었다.

 

model.predict_proba(x_valid)[:,1] # 1열만 가져옴

=> array([8.21353644e-01, 3.33555144e-02, 1.64942502e-01, 9.42055620e-01,
       9.80074454e-01, 7.30650746e-05, 7.38519501e-04, 3.00476541e-01,
       5.19142532e-01, 9.59712728e-01, 8.69697520e-01, 2.60924370e-01,
       9.15857301e-01, 3.25523786e-01, 9.57945209e-01, 2.05214941e-02,
       9.46035832e-01, 9.92777990e-01, 9.98503696e-01, 5.62404030e-03,
       7.31213493e-01, 9.22194686e-01, 4.98680766e-04, 9.91305522e-01,
       9.61955460e-01, 9.45637188e-01, 9.48872392e-01, 9.25067314e-01,
       9.35715694e-01, 9.52336883e-03, 9.60092176e-01, 9.83121554e-01,
       9.77650827e-01, 9.32277379e-01, 9.83802666e-01, 9.65319016e-01,
       ...

 

우리는 1에 대한 확률만 필요하기 때문에 슬라이싱을 하여 가져온다.

 


머신러닝 모델링 과정

데이터 전처리 -> 데이터 셋 분리 -> 모델생성 및 학습 -> 예측 수행 -> 평가

 

위 과정을 통해 우리가 유방암 데이터를 활용하여 머신러닝의 정확도를 알아보고, 평가까지 해보았다.

 

실제로는 결측치라든지 원핫인코딩까지 해야됐는데 교육용 데이터라 범주형 데이터도 없고,

 

결측치도 없어서 할 필요가 없었다.

728x90

'AI 공부 > 머신러닝' 카테고리의 다른 글

(머신러닝) 앙상블  (0) 2022.09.13
(머신러닝) 머신러닝 모델  (2) 2022.09.13
(머신러닝) 교차검증과 과적합  (0) 2022.09.07
(머신러닝) 결측치 및 스케일링  (0) 2022.09.07
(머신러닝) 성능측정  (0) 2022.09.06

댓글