이 영역을 누르면 첫 페이지로 이동
컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

페이지 맨 위로 올라가기

컴퓨터와 수학, 몽상 조금

컴퓨터공학, 딥러닝, 수학 등을 다룹니다.

3. 데이터 변환, 정제, 통합, 균형 (Data Transformation, Cleaning, Integration and Balancing)

  • 2020.09.13 17:58
  • 학부 수업/머신러닝
반응형
이 글의 실습 코드는 제 깃허브에서 보실 수 있습니다.

데이터 변환Data Transformation

머신러닝에서는 데이터가 가진 특성들의 상관관계를 찾아내는데, 이때 특성 간의 스케일 차이가 심하면 스케일이 큰 특성에 집중하는 문제가 발생한다.

이러한 문제를 해결하기 위해 데이터 표준화나 정규화 기법을 사용한다.

데이터 표준화Data Standardization

$$ x_{standard} = \frac{x-\text{mean}(x)}{\text{std}(x)}$$

데이터 정규화Data Normalization

$$ x_{normal} = \frac{x-\text{min}(x)}{\text{max}(x)-\text{min}(x)}$$

일반적으로 정규화가 표준화보다 유용하나, 데이터가 bell-shape 이거나, 이상치가 있는 데이터일 경우 표준화가 유용하다.

사이킷런을 이용하여 표준화와 정규화를 수행할 수 있다.

from sklearn.preprocessing import StandardScaler, MinMaxScaler
stdScale = StandardScaler() # 표준화
normScale = MinMaxScaler() # 정규화
std = stdScale.fit_transform(x)
norm = normScale.fit_transform(x)

데이터 정제Data Cleaning

np.nan, np.NaN, None 등의 결측치를 해결하는 것이다.
주로 평균(mean), 중위값(median value), 최빈값(most frequent value)로 빈 값을 채우거나, 빈 값이 포함된 행을 삭제한다.

사이킷런을 이용하여 결측치를 처리할 수 있다.

from sklearn.impute import SimpleImputer
im = SimpleImputer(strategy='mean') # strategy로 mean, median, most_frequent를 설정
x = im.fit_transform(x)

데이터 통합Data Integration

데이터 여러 개를 하나로 합치는 작업.

판다스를 이용하여 수행할 수 있다.

import pandas as pd
df1 = pd.read_csv('고객_정보.csv')
df2 = pd.read_csv('고객_매출.csv')
pd.merge(df1, df2, on='id') # on 열을 기준으로 데이터 병합

데이터 균형Data Balancing

분류를 목적으로 하는 데이터에서, 특정 클래스의 데이터가 타 클래스에 비해 적거나 많은 경우를 데이터 불균형Data Imbalance이라 한다. 의사결정트리와 앙상블 모델은 상대적으로 이런 불균형에 강건한 특징이 있다.

이를 해결하기 위한 방법으로 과소포집과 과대포집이 있는데, 일반적으로 과대포집이 유용하다.

과소포집Undersampling

많은 데이터를 가진 클래스의 데이터를 임의로 제거하여 다른 클래스와 비율을 맞춰주는 방법이다.

과대포집Oversampling

소수 데이터를 가진 클래스의 데이터를 복제하여 비율을 맞춰주는 방법이다. 대표적인 방법론은 아래와 같다.

  • SMOTE: Synthetic Minority Oversampling Technique)
  • ADASYN: Adaptive Synthetic Sampling Method)

과대포집 실습 코드

실험을 위해 가짜 데이터를 만들어보자.

# 더미 불균형 데이터 생성
from collections import Counter
from sklearn.datasets import make_classification
X, y = make_classification(n_classes=3, weights=[0.03, 0.07,0.9],n_features=2, n_informative=2, n_redundant=0,
                           n_clusters_per_class=1, n_samples=200, random_state=154)
print('Original dataset shape %s' % Counter(y)) 

가짜 불균형 데이터의 분포를 출력해보자.

import matplotlib.pyplot as plt
plt.scatter(X[:, 0], X[:, 1], marker='o', c=y,
            s=100, edgecolor="k", linewidth=1)

plt.xlabel("$X_1$")
plt.ylabel("$X_2$")
plt.show()

가짜 불균형 데이터 분포

노란색으로 표시된 클래스에 비해, 다른 클래스는 적은 것을 알 수 있다. 이제 과대포집을 수행해보자.

import matplotlib.pyplot as plt
from imblearn.over_sampling import SMOTE, ADASYN
sm = SMOTE(random_state=777)
X_res, y_res = sm.fit_resample(X, y)
plt.scatter(X_res[:, 0], X_res[:, 1], marker='o', c=y_res,
            s=100, edgecolor="k", linewidth=1)
plt.xlabel("$X_1$")
plt.ylabel("$X_2$")
plt.show()

SMOTE 과대포집 수행 결과

import matplotlib.pyplot as plt
ada=ADASYN(random_state=777)
X_syn,y_syn=ada.fit_resample(X,y)
plt.scatter(X_syn[:, 0], X_syn[:, 1], marker='o', c=y_syn,
            s=100, edgecolor="k", linewidth=1)
plt.xlabel("$X_1$")
plt.ylabel("$X_2$")
plt.show()

ADASYN 과대포집 수행 결과

과소포집 실습코드

from imblearn.under_sampling import NearMiss
# define the undersampling method
undersample = NearMiss(version=3, n_neighbors_ver3=3)
# transform the dataset
X_Under, y_Under = undersample.fit_resample(X, y)
import matplotlib.pyplot as plt
plt.scatter(X_Under[:, 0], X_Under[:, 1], marker='o', c=y_Under,
            s=100, edgecolor="k", linewidth=1)
plt.xlabel("$X_1$")
plt.ylabel("$X_2$")
plt.show()

반응형

'학부 수업 > 머신러닝' 카테고리의 다른 글

5. 선형 회귀 (Linear Regression)  (0) 2020.10.21
4.5. 머신러닝의 정확도, 정밀도, 재현율 (Accuracy, Precision, Recall)  (0) 2020.09.23
4. K-최근접 이웃 알고리즘 (K-Nearest Neighbor)  (0) 2020.09.23
2. 데이터 실수화 (Data Vectorization)  (0) 2020.09.11
1. 데이터 전처리 (Data Pre-Processing)  (0) 2020.09.11

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 4.5. 머신러닝의 정확도, 정밀도, 재현율 (Accuracy, Precision, Recall)

    4.5. 머신러닝의 정확도, 정밀도, 재현율 (Accuracy, Precision, Recall)

    2020.09.23
  • 4. K-최근접 이웃 알고리즘 (K-Nearest Neighbor)

    4. K-최근접 이웃 알고리즘 (K-Nearest Neighbor)

    2020.09.23
  • 2. 데이터 실수화 (Data Vectorization)

    2. 데이터 실수화 (Data Vectorization)

    2020.09.11
  • 1. 데이터 전처리 (Data Pre-Processing)

    1. 데이터 전처리 (Data Pre-Processing)

    2020.09.11
다른 글 더 둘러보기

정보

컴퓨터와 수학, 몽상 조금 블로그의 첫 페이지로 이동

컴퓨터와 수학, 몽상 조금

  • 컴퓨터와 수학, 몽상 조금의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (276)
    • Tech Trend (3)
    • Deep Learning (77)
      • 공부 노트 (21)
      • 논문 리뷰 (44)
      • 논문 스키밍 (1)
      • 영상처리 (11)
    • Engineering (3)
      • Tips (2)
      • Experiences (1)
    • Blog (42)
      • 회고 & 계획 (16)
      • 내 이야기 (8)
      • 리뷰 (3)
      • 군대에 간 공돌이 (9)
      • ML엔지니어 취업 도전기 (1)
      • 여행 (4)
    • 학부 수업 (141)
      • 머신러닝 (16)
      • C프로그래밍 (8)
      • 자료구조 (11)
      • 알고리즘 (17)
      • 디지털시스템 (25)
      • 컴퓨터구조 (11)
      • 확률과 통계 (21)
      • 선형대수학 (14)
      • 이산수학 (18)
      • 데이터시각화 (0)
    • 강의 (9)
      • 딥러닝 기초 (7)
      • Python (2)

공지사항

인기 글

정보

백지오의 컴퓨터와 수학, 몽상 조금

컴퓨터와 수학, 몽상 조금

백지오

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
반응형

나의 외부 링크

  • profile
  • github
  • linkedin

방문자

  • 전체 방문자
  • 오늘
  • 어제
Powered by Tistory / Kakao. © 백지오. Designed by Fraccino.

티스토리툴바