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 |
댓글