🚨 사용되는 데이터는 2차원 형태여야한다. 2차원 배열, DataFrame,...
- fit(): 어떻게 변환할 지 학습
- 2차원 배열을 받으면 0축을 기준으로 학습한다. (DataFrame으로는 컬럼기준)
- transform(): 변환
- 2차원 배열을 받으며 0축을 기준으로 변환한다. (DataFrame으로는 컬럼기준)
- fit_transform(): 학습과 변환을 한번에 처리
- inverse_transform(): 변환된 값을 원래값으로 복원
데이터셋의 모든 값을 0(Min value)과 1(Max value) 사이의 값으로 변환한다.
sklearn.preprocessing.MinMaxScaler 를 이용
Train, (Validation), Test set
으로 분리한 후 진행한다.Why❓ :
Validation 과 Test set 들은 앞으로 예측하게 될 새로운 데이터에 대해 어느정도의 성능인지를 파악하기 위한 평가를 하는 데이터셋들이다. 그러나 이들이 같은 scale을 가지는 지 보장할 수 없기 때문에
전체 데이터셋을 Scaling
하고 Train, Validation, Test set 으로 나누는 것은 모델의 성능 파악이 어렵다.
위스콘신 유방암 데이터셋
위스콘신 대학교에서 제공한 유방암 진단결과 데이터Feature: 종양 측정값들 모든 Feature들은 연속형(continous)이다. target: 악성, 양성 여부 scikit-learn에서 toy dataset으로 제공한다. load_breast_cancer() 함수 이용
# 필요 라이브러리 import
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
import numpy as np
import pandas as pd
# 데이터 로드
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X = data['data']
y = data['target']
# train validation test set 분리
X_tmp, X_test, y_tmp, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=0)
X_train, X_val, y_train, y_val = train_test_split(X_tmp, y_tmp,
test_size=0.2,
stratify=y_tmp, random_state=0)
# Standard Scaling
# 객체 생성
s_scaler = StandardScaler()
# 학습 및 변환
X_train_scaled1 = s_scaler.fit_transform(X_train)
X_val_scaled1 = s_scaler.transform(X_val)
X_test_scaled1 = s_scaler.transform(X_test)
# 각 feature 들의 mean 이 0에 가깝게, std 가 1에 가깝게 변환됨
# MinMax Scaling
# 객체 생성
mm_scaler = MinMaxScaler()
# 학습 및 변환
X_train_scaled2 = mm_scaler.fit_transform(X_train)
X_val_scaled2 = mm_scaler.transform(X_val)
X_test_scaled2 = mm_scaler.transform(X_test)
# X_train은 min(0) max(1) 값들로 변환되었고,
# val, test는 train의 min/max 기준으로 scaling이 진행되었기 때문에
# 초과되는 값은 1보다 크게, 미만인 값은 0보다 작게, 변환되었지만
# 그리 큰 차이를 보여주지 않아 해당 데이터셋은 MinMax Scaling으로도 모델링을 할만하다.
# SVC 모델링, accuracy 평가지표
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
# Standard Scaling을 한 데이터셋 모델링
svm = SVC(random_state=0, C=0.1, gamma=0.1)
# 학습
svm.fit(X_train_scaled1, y_train)
## 추론
pred_train1 = svm.predict(X_train_scaled1)
pred_val1 = svm.predict(X_val_scaled1)
## 평가 - 정확도
print("train", accuracy_score(y_train,pred_train1))
print("validation", accuracy_score(y_val, pred_val1))
# MinMax Scaling 데이터셋 모델링
# 모델 생성
svm = SVC(random_state=0, C=0.1, gamma=0.1)
# 학습
svm.fit(X_train_scaled2, y_train)
# 검증
## 추론
pred_train2 = svm.predict(X_train_scaled2)
pred_val2 = svm.predict(X_val_scaled2)
## 평가 - 정확도
print("train:", accuracy_score(y_train, pred_train2))
print("validation:", accuracy_score(y_val, pred_val2))
이와 같이 Feature Scaling
과정을 확인할 수 있었습니다.
데이터 학습-모델링 순서 :
- 필요 라이브러리
import
Data loading
- 결측치 처리 -
dropna()
활용input(X), output(y)
분리범주형 feature
전처리 :
- 🚨 이때, 범주형 feature 전처리한 데이터셋과 (아직 전처리를 진행하지 않은)연속형 데이터셋을 합쳐서 다음으로 넘어가야한다.
train (validation) test set
분리 :
- 위에서 합친 데이터셋으로 분리를 과정을 진행한다.
- 만약,
Cross Validation
방식으로 데이터를 분리하여 모델링을 한다면,Validation set
까지 나눠줄 필요는 없다.연속형 feature
전처리- 모델링
pickle
모듈 활용!pickle 모듈사용
- 객체 파일 입출력을 위한 파이썬 모듈
- open() 시 binary mode로 설정한다.
- 저장시 파일 확장자는 보통
pkl
이나pickle
로 한다.- ex)
fw = open("data.pkl", "wb") # 객체를 pickle에 저장하기 위한 output stream 생성 fr = open("data.pkl", "rb") # 파일에 저장된 객체를 읽어오기 위한 input stream 생성
- 메소드
- dump(저장할 객체, fw) : 출력
- load(fr): 입력 - 읽은 객체를 반환한다.
accuracy_score(정답, 모델예측값)
🚨
Accuracy
는 전체 데이터에 대한 것만을 평가하고, 계산하기 때문에 한class
에 대한 평가가 힘들다.
아래와 같은 문제점들이 있고, 한계가 있다.