Python

파이썬 sklearn의 preprocessing 과 model_selection

쿠와와 2020. 11. 18. 14:26

먼저 preprocessing 안에 있는 함수 몇가지를 알아보자

 

먼저 간단하게 정확도를 올리기 위한 방법 2가지 방법을 소개하겠다

규모가 너무 뒤죽박죽이면 나중에 인공지능을 이용한 확률계산에서 값이 안좋게 나올 수 있다. 그렇기 때문에 사용하는 몇가지 방법을 소개한다.

 

1. preprocessing.MinMaxScaler() # 각 컬럼()별로 작동 가장 큰 데이터 1, 가장 작은 거 0

즉 [-2, 1, 5, 6] 을 넣어준다면 에러가 발생할 것이다. 왜? 열로 계산을 해주니깐

 

2차원 데이터를 넣어주어야 작동을 한다는 것이다. 

[[-1],

 [-4],

 [4]] 

이렇게 있다면 결과는

[[0.25],

 [    0],

 [    1]] 

이렇게 출력해 줄 것이다.

 

사용 예제 코드이다.

s1 = preprocessing.MinMaxScaler()
s1.fit(a) # 학습하는 함수
b = s1.transform(a) # 결과를 보여주는 함수 (변환) 학습한 결과를 넣어줘야함

 

다른 방법으로는 

print(preprocessing.MinMaxScaler().fit_transform(a))

이런 식으로 변수를 만들지 않고 바로 출력해주는 방법이 있다.

print(preprocessing.minmax_scale(a)) 

위의 코드를 더 간단하게 제공해주는 함수이다. 

 

2. zero sum, std 1.0 표준편차를 이용한 Scaler
s2 = preprocessing.StandardScaler()
s2.fit(a)
c = s2.transform(a)
print(c)

 

말그래도 주어진 데이터의 표준편차를 이용해 규모를 나타내주는 함수이다. 

대부분 이것을 사용하고 표준이기 때문에 

print(preprocessing.scale(a))

이런식으로 사용할 수도 있다. 

 

다음에는 자연어처리를 할때 주로 사용하는 것인데 

데이터를 숫자로 바꿔줘야지 인공지능에서 숫자를 받아 학습할 수 있기 떄문에 변환해 주는 작업이 필요하다.

 

그래서 사용 해주는 것이 processing 에서 Label 변환이다.

e1 = preprocessing.LabelEncoder() # 그냥 단순 인코딩 해줌

e2 = preprocessing.LabelBinarizer() # 두가지라는 뜻 0,1 벡터로 나눠줌

항목이 세가기 있다고 가정하면

e1의 출력 값은 

각각의 항목의 값이 

[[0], [1], [2]] 이런식으로 저장이 되어 출력된다

 

e2의 출력값은 

각각의 항목의 값이

[[ 1, 0, 0 ],

[ 1, 0, 0 ],

[ 1, 0, 0 ]] 이런식으로 저장이 되어 출력할 것이다

두가지의 차의 점을 알겠는가?

 

인공지능에서 feature의 값은 벡터 값을 많이 사용하기 때문에 Binarizer를 많이 사용한다. 알아두자 

 

model_selection은 데이터를 나뉠 때 자주 사용하는 것인데

인공지능의 학습할 때 나중에 테스트할 test data와 학습할 train data로 나뉘기 때문에 

자주 사용하는 함수이다. 함수의 return값은 4개 이며 아래의 코드처럼 사용된다.

 

x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y, train_size=0.7)

 

이 함수의 인자값에 shuffle을 넣을 수 있는데 

기본적으로는 데이터를 섞에서 출력한다.

하지만 시계열 데이터같은 일정한 흐름이 있는 데이터는 shuffle=False로 넣어줘야 제대로 학습한다. 

'Python' 카테고리의 다른 글

파이썬 기본 정리  (0) 2020.11.17