본문 바로가기
Python/MachineLearning

Regression - Data Preprocessing (3) - StandardScaler(), MinMaxScaler(), train_test_split()

by 하니__ 2024. 4. 13.

 

4. 데이터 표준화 - 피쳐스케일링

 

 




앞의 데이터를 무시하고도



나이의 최소값~최대값은 아무리 좋게 봐줘도

0~150을 넘길수가 없는 반면





연봉의 최소값~최대값의 크기는

데이터의 수치로만해도 40k~90k 인데



값을 어느정도 표준화,정규화 시켜줄 필요가 있다

그래야 정확히 학습이 되기 때문





피쳐스케일링 할때에는 X용과 Y용으로 따로 따로 준비한다

하지만 이 경우에서의 Y는 0과 1이 전부이기때문에 따로 할 필요는 없다






 

 

4 - 1. 표준화

 

X_scaler = StandardScaler()
 
X_scaler.fit_transform(X)
array([[ 1.        , -0.57735027, -0.57735027,  0.69985807,  0.58989097],
       [-1.        , -0.57735027,  1.73205081, -1.51364653, -1.50749915],
       [-1.        ,  1.73205081, -0.57735027, -1.12302807, -0.98315162],
       [-1.        , -0.57735027,  1.73205081, -0.08137885, -0.37141284],
       [ 1.        , -0.57735027, -0.57735027, -0.47199731, -0.6335866 ],
       [ 1.        , -0.57735027, -0.57735027,  1.22068269,  1.20162976],
       [-1.        ,  1.73205081, -0.57735027,  1.48109499,  1.55119478],
       [ 1.        , -0.57735027, -0.57735027, -0.211585  ,  0.1529347 ]])

 

 

 

 

 

 

 

 

 

 

4 - 2. 정규화
X_scaler = MinMaxScaler()
 
X = X_scaler.fit_transform(X)
 
X
 
array([[1.        , 0.        , 0.        , 0.73913043, 0.68571429],
       [0.        , 0.        , 1.        , 0.        , 0.        ],
       [0.        , 1.        , 0.        , 0.13043478, 0.17142857],
       [0.        , 0.        , 1.        , 0.47826087, 0.37142857],
       [1.        , 0.        , 0.        , 0.34782609, 0.28571429],
       [1.        , 0.        , 0.        , 0.91304348, 0.88571429],
       [0.        , 1.        , 0.        , 1.        , 1.        ],
       [1.        , 0.        , 0.        , 0.43478261, 0.54285714]])

 

 

 

 

 

 

 

5. Dataset을 Training 용과 Test용으로 나눈다

 


이제 준비가 다 끝났다 하지만,



주어진 데이터 모두를 학습으로 시킨다면

예측을 실험해봤을때 예측값이 얼마나 정확한지 알 길이 없으므로

학습할 용도로 80%정도, 예측을 실험할 용도로 20%정도 나눠놓는것이 좋다






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=32 )





훈련용과 테스트용을 쪼개줄 모듈을 임포트 해준뒤



파라미터 안에

X, y 를 넣어주고

test_size=0.2 테스트용으로 남길것을 20%를 남기라고 입력한다

random_state=32 그리고 이것은 저번에 랜덤 시드와 같은 기능이다 같은 숫자를 입력하면 같은 랜덤값을 얻을수 있다



그렇게 쪼개지는것들을



순서대로

X_train, X_test, y_train, y_test 

에 저장한다












X_train
 
array([[1.        , 0.        , 0.        , 0.73913043, 0.68571429],
       [0.        , 1.        , 0.        , 0.13043478, 0.17142857],
       [1.        , 0.        , 0.        , 0.34782609, 0.28571429],
       [1.        , 0.        , 0.        , 0.91304348, 0.88571429],
       [0.        , 0.        , 1.        , 0.47826087, 0.37142857],
       [1.        , 0.        , 0.        , 0.43478261, 0.54285714]])
 
y_train
 
array([0, 0, 1, 1, 0, 1])






그렇게 훈련용의 데이터와



X_test
array([[0., 1., 0., 1., 1.],
       [0., 0., 1., 0., 0.]])
 
y_test
 
array([0, 1])







테스트용의 데이터를 얻게되었다


 

 

 

 

 

Regression - Data Preprocessing (1) - Nan처리, X와y의 데이터 분류

국적과 나이, 그 사람의 연봉, 그 사람의 구매여부 라는 데이터가 있을때 각각의 국적별, 나이별, 연봉별, 구매여부별로 나누어서 데이터를 학습시켜 다른 데이터들이 들어왔을때 그 사람이 구

hani08.tistory.com

 

 

Regression - Data Preprocessing (2) 문자열의 데이터처리( Label Encoding, One Hot Encoding)

3. 문자열을 데이터로 처리 위에서 봤듯이 국적과 구매여부의 문자열은 컴퓨터가 이해하기 어려워한다 그러니 컴퓨터가 이해하기 쉬운 숫자로 변환시켜줘야 한다 레이블 인코딩과 원 핫 인코딩

hani08.tistory.com