반응형
전체 데이터 = Training data + Test data
- Training data → Build the model
- Test data → Test the model(예상값과 실제값 비교)
상항에 따라 다르지만 일반적인 데이터 split 비율은 8:2 이다.
What is Feature Scaling
- 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작
- 한 열에 대해서만 적용 가능
- 정규화(Normalization)
- (열 내 모든 값 - 열의 최소값)/(열의 최대값 - 열의 최소값)
- 모든 결과는 0과 1 사이
- 모든 열 간 단위와 의미가 다르고, 무엇보다 값들의 편차의 단위가 서로 달라 열 간 중요도를 착각하기 쉬울 수 있어 정규화를 진행
- 표준화(Standardization)
- (열 내 모든 값 - 열의 평균값)/(열의 표준편차)
- 모든 결과는 -3과 +3 사이
클래스 : 빌드할 대상의 모델 or 청사진 → 집을 짓는 방법을 취합한 주택 건축 계획
객체 : 클래스의 인스턴스 → 주택 건축 계획에 따라 건축된 주택
메서드 : 특정 작업을 수행하기 위해 객체에 사용하는 도구 → 주택의 현관 열기
Data Preprocessing with Python
1. Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
- matplotlib 라이브러리의 pyplot 모듈 import
- numpy 배열처리, matplotlib 표, pandas 데이터 불러오기
2. Importing the dataset
dataset = pd.read_csv('Data.csv')
X = dataset.iloc[:, :-1].values //모든 행, but 마지막 열 제외
y = dataset.iloc[:, -1].values //모든 행, but 마지막 열만
print(X)
print(y)
- read_csv로 csv 파일을 데이터 프레임으로 변환
- Feature Matrix(= Independent variable Matrix) : 결과를 결정 짓는 모든 요소
- Dependent variable Matrix : 예측하고자 하는 결과
- iloc로 인덱스를 이용해 원하는 값 반환
- 이때 values를 붙이면 ndarray, 안 붙이면 dataframe이나 series
3. Taking care of missing data
//sklearn 라이브러리, impute 모듈, SimpleImputer 클래스
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='mean')
imputer.fit(X[:, 1:3]) //문자열 제외, 숫자만
X[:, 1:3] = imputer.transform(X[:, 1:3]) //결측값 변환 후 재저장
print(X)
- 결측값은 해당 row를 삭제하거나 다른 값으로 대체 → 여기서는 열의 평균값으로 대체
- nan = Not a Number → float 타입
- 평균값, 중간값 등 여러 값으로 대체 가능
- SimpleImputer 클래스의 fit 메서드 : 지정한 dataset에서 결측값을 찾아줌
- SimpleImputer 클래스의 transform 메서드 : 결측값을 대체값으로 변환
4. Encoding categorical data
1) Encoding the Independent 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))
print(X)
- 일반적으로 범주형 변수와 종속 변수 간 상관관계를 추출하기 어려움
- 따라서 범주형 변수 → 숫자로 변환
- 정수형으로 변환할 경우 값들의 순서가 중요하다고 머신러닝이 판단할 수 있음
- 따라서 범주가 3개이면 3비트, 5개이면 5비트로 표현하는 원핫 인코딩 방식을 이용 → 100(독일), 010(프랑스), 001(미국)
- ColomnTransformer는 여러 transformer을 column에 더 쉽게 적용하도록 한 클래스
- ColumnTransformers 클래스는 fit과 tansform 과정을 한번에 처리하는 fit_transform 메서드가 존재
- 이후 머신러닝 처리를 위해 ndarray로 변환
2) Encoding the Dependent Variable
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
y = le.fit_transform(y)
print(y)
- y는 종속변수이기 때문에 ndarray로 변환할 필요 X
5. 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)
- training과 test dataset은 서로 전혀 연관이 없는 데이터야 함
- feature scaling을 먼저 할 경우 전체 dataset의 평균과 표준편차에 영향을 받기 때문에 무조건 데이터 분리 먼저 진행
- train_test_split은 특징 벡터와 종속 변수 벡터 각각을 train과 test 로 분리하기 때문에 총 4개 값이 반환
- random_state : 데이터 분할시 셔플이 이루어지는데 이를 위한 seed 값
6. Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandScaler()
X_train[:, 3:] = sc.fit_transform(X_train[:, 3:])
X_test[:, 3:] = sc.transform(X_test[:, 3:])
print(X_train)
print(X_test)
- 표준화 VS 정규화 : 일반적인 경우 표준화, 데이터가 정규분포를 따를 경우 정규화
- 원핫 인코딩한 범주형 변수는 Feature Scaling 적용 X → 이미 범위화가 되어있음
- 숫자형 변수에만 Feature Scaling 적용
- fit은 특성의 평균과 표준편차, transform은 실제 적용하는 것
- 이때 test dataset에도 training dataest에 사용한 것과 동일한 scaler를 사용해야 함 → fit_transform을 실행할 경우 scaler를 재생성하기 때문
반응형
'STUDY > Machine Learning' 카테고리의 다른 글
Ch03. 다중 선형 회귀(Multiple Linear Regression) (0) | 2025.02.07 |
---|---|
Ch02. 단순 선형 회귀(Simple Linear Regression) (0) | 2025.02.06 |