Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 기술통계학
- 은준아 화이팅
- Pandas
- 자연어 처리
- 회귀분석
- 가설검정
- F분포
- Django
- 히스토그램
- word2vec
- 밑바닥부터 시작하는 딥러닝2
- 차원축소
- 최소자승법
- 텐서플로2와 머신러닝으로 시작하는 자연어처리
- 밑바닥부터 시작하는 딥러닝
- 코사인 유사도
- 오래간만에 글쓰네
- 결정계수
- rnn
- 구글 BERT의 정석
- 모두의 딥러닝
- 파이썬 pandas
- numpy
- 다층 퍼셉트론
- 텍스트 분류
- 군집화
- student t분포
- 감성분석
- 기초통계
- 머신러닝
Archives
- Today
- Total
데이터 한 그릇
머신러닝(7)_피처 스케일링 본문
StandardScaler
피처의 값들의 크기가 크면 머신러닝 성능에 안좋은 영향을 끼친다.
표준화를 시키는 작업.
가우시안 분포 즉, 정규분포를 만들어감
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.datasets import load_breast_cancer
import pandas as pd
data_cancer = load_breast_cancer()
사이킷런 데이터 로드하기
data_pd = pd.DataFrame(data = data_cancer.data, columns = data_cancer.feature_names)
data_pd['target'] = pd.DataFrame(data = data_cancer.target, columns = ['target'])
breast_cancer = data_pd.copy()
breast_cancer.head()
데이터 프레임 만들기
ss = StandardScaler()
StandardScaler 객체 생성
breast_cancer.describe().T['std'].nlargest()
표준편차 확인해보기
X = breast_cancer.iloc[:,:-1]
y = breast_cancer.target
X_train, X_test, y_train, y_test = train_test_split(X,y, stratify = breast_cancer.target)
데이터를 나눈다.
ss.fit(X_train[['worst area']])
ss.transform(X_train[['worst area']])
worst area 칼럼을 학습시키고 정규화 시키기
``fit_transform()` 을 사용하면 정규화 코드가 간편해질거 같다.
X_train['worst area'] = ss.transform(X_train[['worst area']])
plt.title('worst area')
X_train['worst area'].hist()
표준화된 칼럼의 분포를 그래프를 통해서 확인 가능하다.
그래프의 모양이 완전 바뀌지는 않는다. (그래서도 안된다.)
표준화를 하여 데이터 각각의 크기가 줄어들순 있어도 그래프 전체 shape 이 크게 달라지진 않는다.
#test 에다가도 똑같이 작업
X_test['worst area'] = ss.fit_transform(X_test[['worst area']])
**train 데이터에 스케일링을 적용했다면 test 데이터에도 스케일링을 적용해야 한다.**
MinMaxScaler
StandardScaler 와 로직은 비슷하다.
mm = MinMaxScaler()
# stratify는 데이터의 비율이 동일하게 나누는 옵션이다.
X_train, X_test, y_train, y_test = train_test_split(breast_cancer.iloc[:,:-1],
breast_cancer.target,
stratify=breast_cancer.target)
모델 객체를 생성하고, 데이터를 분리한다.
mm.fit(X_train[['worst area']])
X_train['worst area'] = mm.transform(X_train[['worst area']])
`worst area` 칼럼을 스케일링 해줬다.
lr = LogisticRegression(max_iter = 4000)
lr.fit(X_train, y_train)
lr.predict(X_test)
lr.score(X_test, y_test)
모델이 완벽한 성능을 보여주지 못하고 있다. 그 이유는 테스트 데이터에도 스케일링을 적용하지 않았기 때문이다.
X_test['worst area'] = mm.fit_transform(X_test[['worst area']])
lr.predict(X_test)
lr.score(X_test, y_test)
테스트 데이터에도 스케일링 해주니
모델이 완벽한 성능을 보여주고 있다.
그 이외에 Normalizer 이거나, RobustScaler 같은 경우도 로직은 똑같다.
하나씩 전부다 해보고 모델 성능이 제일 나은 스케일러를 사용하면 된다.
'머신러닝 > 머신러닝기초' 카테고리의 다른 글
머신러닝(6)_교차검증과 최적 파라미터 (0) | 2021.07.23 |
---|---|
머신러닝(5)_모델을 저장하고 불러오기 (0) | 2021.07.23 |
머신러닝(4)_교차검증 (0) | 2021.07.23 |
머신러닝(3)_전처리 (0) | 2021.07.23 |
머신러닝(2)_데이터분리 (0) | 2021.07.21 |
Comments