머신러닝의 모든 것 - 1주차
Data Preprocessing
- 머신러닝 스택에 관련된 강의에서 데이터 전처리를 왜 배워야 할까요?
- 데이터 처리는 데이터 사이언티스트의 영역이 아닌걸까요?
머신러닝 엔지니어에게 혹은 리서처에게 ‘Data Preprocessing’이 왜 중요할까요?
크게 3가지 정도로 이유를 찾을 수 있는데요
- 해당 데이터의 신뢰성
- 정규화, 표준화의 필요성
- GIGO의 원리
아무리 유능한 데이터 사이언티스트 혹은 빅데이터 전문가가 데이터를 배포할 때도 해당되는 데이터를 개발자들이 시각화 자료로 쓸지, 혹은 모델을 빌드할지 알 수 없습니다.
그러니 해당하는 데이터는 raw하게 구성되는 것이 다양한 분야와 목적을 갖고 사용되기 편하겠죠!
식재료로 예를 들자면, 축산업자(데이터 제작자)는 사람들이 해당 육류(data)를 어떤 방식(용도)으로 조리(전처리)해서 먹을지(사용) 모르기에 raw한 육류를(data) 공급하는 것입니다.
좋은 쉐프(머신러닝 엔지니어)가 되는 것이 저희의 목표가 되겠네요! 😆
모두 복습도 꾸준히 하며 같이 성장하는 머든것이 됩시다! 💪
Data preprocessing-Python
dataset load하기🦐
Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Importing the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, -1].values
csv파일 읽어올 때 pd.read_csv을 사용함.
독립변수(X)는 예측하고 싶은 것을 예측할 수 있게하는 정보를 가진 변수
종속변수(y)는 그 예측
iloc[row,column] iloc = locate indexes
범주형 데이터 인코딩🍥
Encoding the Independenr variable
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer(transformers=[('encoder', OneHotEncoder(), [0])], remainder='passthrough')
X = np.array(ct.fit_transform(X))
One-Hot Encoding: 단어 집합의 크기를 벡터의 차원으로 하고, 표현하고 싶은 단어의 인덱스에 1의 값을 부여하고, 다른 인덱스에는 0을 부여하는 단어의 벡터 표현 방식
Encoding the Dependent Variable
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)
LabelEncoder: 원핫인코딩과 달리 문자를 숫자로 변환하여 하나의 열로 나타냄.
데이터 분할🍸
Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 1)
// random_state = 1 -> 랜덤 seed 값을 정해줌. 예제와 같은 값을 가지기 위해서
피처 스케일링🍪
Feature Scaling
feature scaling: 모든 변수나 특징을 스케일링하는 도구인데 모든 값이 같은 단위가 되게끔 하고 특징은 머신러닝 모델에 의해 다른 특징을 무시하는 일을 막기 위한 것이다.
데이터셋을 훈련셋과 테스트셋을 분할한 후에 적용함. (테스트셋의 정보유출을 막기 위해)
feature scaling
- Standardisation: (x-평균)/표준편차 를 이용해 표준화시킴 -3~+3 (항상 쓸 수 있음)
- Normalisation: (x-최솟값)/(최댓값-최솟값) 을 이용해 정규화시킴 0~1 (대부분의 특성이 정규분포를 따르는 특정 상황에 권장되는 기법)
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train[:, 3:] = sc.fit_transform(X_train[:, 3:]) //fit: 각 특성의 평균과 표준편차를 구하는것
// transform: 위의 공식을 적용해 모든 값이 같은
// 크기를 가지도록 하는 것
X_test[:, 3:] = sc.transform(X_test[:, 3:]) // not fit, only transform!
train set의 평균, 표준편차를 test set에 적용함
dummy값 가변수에는 적용하지 않는다!!
Data Preprocessing-R
dataset load하기🌠
dataset을 로드하는건 너무나도 간단하였다.
files -> 본인이실행할 dataset을 작업디렉토리로 설정

여기 environment에 내가 사용할 dataset을 지정해 주기만 하면 가능했다.
dataset = read.csv('Data.csv')이렇게 작성후 코드를 실행하는 방법이 조금 특이했다고 느겼는데 커맨드 후 alt+enter를 누르면 해당 커맨드라인의 코드가 실행되는 식이다.
누락된 데이터 채워주기🌌
R언어에서의 index는 1부터 시작한다는 점은 python이 0부터 시작하는 것과 달라 흥미롭게 다가왔다.

if else 함수에는 세게의 피라미터가 필요한데 그 순서는
- if조건문
- if조건문이 참일때 실행할 값
- if조건문이 거짓일때 실행할 값
이렇게 3가지의 파라미터가 필요하다.
달러사인($) 을 이용하여 해당하는 csv파일의 colum에 접근한뒤 is.na 함수가 누락된값을 찾아낸다면, ave라는 함수로 해당하는 colum의 평균값을 구한뒤 na.rm = TRUE라는 구문으로 해당한값(누락된 데이터를 제외한 평균값)으로 채워주게 된다.
그리고 3번째 조건인 거짓일때는 즉 '해당하는 값이 누락되지 않은 열에대한 실행부'는 dataset$Age 즉 그대로 유지하도록 해주면 된다.

datasetAge를 datasetSalary로 바꿔주면 똑같이 Salary의 누락된 값도 처리할 수 있다.

(누락된값이 평균값으로 채워진 dataset)
범주형 데이터 인코딩☃

다시 데이터셋을 살펴보면 Country Colum과 Purchased Colum은 text로 되어있기에 인코딩이 필요하단걸 알 수 있다.
우리는 'factors'함수로 범주형 변수를 숫자로 바꿔줄 것인데 R언어를 배워본 사람들이라면 절대모를수 없을만큼 실용적인 함수이다.
우선Country colum부터 인코딩을 시잘하려면 해당 열을 가져와야한다.

이렇게 입력후 f1을 누르면 Factors에대한 설명이 나오는데

세가지 argument가 필요하다 그 세가지의 순서는 다음과 같다.
- 바꾸고 싶은데이터
- levels
- labels
위를 기반으로 코드를 작성해보면.

이와같이 작성할 수 있고 이코드를 실행시켜보면

이와같이 Country Colum이 인코딩 된것을 확인할 수 있다.
똑같이 Purchase colum에도 코드를 적용하면

이렇게 작성후 코드를실행하면

이와같이 purchase도 인코딩 된것을 확인할 수 있다.
데이터 분할🎃

데이터셋 분할과정에서 caTools라는 패키지가 필요한데 위와같이 다운로드후 활성화를 진행하면 바로 사용할 수 있다.

이렇게 set.seed라는 함수로 seed를 설정하고 위와같은 syntax로 훈련에쓸 데이터셋의 비율을 작성해주면(파이썬에서는 테스트에 사용할 데이터비율을 작성해야하는 차이점이 있다.)
콘솔창에서 split을 입력시 10개의 출력값이 나오게 된다.

TRUE는 관측값이 훈련세트에 간다는 것을 뜻하고, FALSE는 관측값이 테스트 세트로 간다는 것을 뜻하게 된다.

이렇게 두줄만 작성하고나서 실행을시키고 나면

이처럼 학습용데이터와 검증용 데이터로 분할된 것을 확인할 수 있다.
피처 스케일링🎾
피쳐스케일링이 가장 간단하게 느껴졌었다.

이렇게 age와 salary를 정규화할 것이기 때문에 각각의 데이터셋에 [,2:3]라는 범위를 추가해주고 (R은 index가 1부터 시작하기때문에) 실행을 하고나면

이처럼 정규화가 된것을 확인할 수 있다.
본 스터디는 Udemy의 <【한글자막】 머신러닝의 모든 것 with Python, R> 강의를 활용해 진행됐습니다. 강의에 대한 자세한 정보는 아래에서 확인하실 수 있습니다.
프밍 스터디는 Udemy Korea와 함께 합니다.