강의자료/머신러닝

[캐글(Kaggle) 따라하기]05-3. 데이터 전처리 실습하기

파아란 기쁨 2022. 12. 14. 10:07

이전시간(https://wondangcom.tistory.com/2357)에 최근접 이웃 알고리즘을 실습을 해 보았습니다.

그런데 다음의 데이터를 예측을 해 보면 어떤 결과를 나타낼까요?

길이 25, 무게 150 그램을 판단 해 보면 도미라고 나와야 할 것 같은데 빙어라고 나오는 것을 확인 할 수 있네요.

그래프를 그려 보면 다음의 위치에 있습니다.

왜 이런 결과가 생겼을까요?

이것은 단위가 틀린 것이 문제가 됩니다. 무게를 살펴 보면 도미의 가장 가벼운 무게는 242부터 시작하고 빙어의 무게는 19.9 까지의 무게 인것을 알 수 있습니다.

이때 무게의 거리로 다섯개를 찾아 보면 도미 한마리와 빙어 4마리가 선택 됩니다.

따라서 이러한 단위가 틀린 데이터를 같은 기준으로 맞추어야 합니다.

1. 기준을 맞춰라

산점도를 보는 기준을 길이를 1000 까지로 맞춰서 살펴 보면 산점도는 위와 같은 모양이 됩니다.

이렇게 두 특성의 값이 놓인 범위가 매우 다르기 때문에 생기는 문제인데 이러한 것을 두 특성의 스케일(scale)가 다르다고 합니다.

이러한 데이터의 특성값을 일정한 기준으로 맞추어 주어야 하는데 이런 작업을 데이터 전처리(data preprocessing) 이라고 합니다.

가장 널리 사용되는 전처리 방법 중 하나는 표준점수(standard score) 입니다.

표준점수로 계산하는 방법은 다음과 같습니다.

mean = np.mean(train_input,axis=0) #평균
std = np.std(train_input,axis=0) #표준편차
train_scaled = (train_input - mean)/std

각각의 입력데이터에서 평균을 뺀 값을 표준편차로 나누어 주면 됩니다.

여기서 axis=0 의 의미는 각각의 특성별로 계산을 한다는 의미입니다.

이렇게 전처리 한 데이터를 이용하여 모델을 훈련해 봅시다.

2. 전처리 데이터로 모델 훈련하기

앞에서 만든 train_scaled의 산점도를 그려 보면 다음과 같습니다.

new =([25,150]-mean)/std # 확인 하고 싶은 데이터도 표준 점수로 만들어 주어야 한다.
plt.scatter(train_scaled[:,0],train_scaled[:,1])
plt.scatter(new[0],new[1],marker='^')
plt.xlabel('length') #x축 라벨
plt.ylabel('weight') #y축 라벨
plt.show() # 산점도 확인

이 데이터로 다시 훈련을 해 봅니다.

from sklearn.neighbors import KNeighborsClassifier
kn = KNeighborsClassifier()
kn.fit(train_scaled,train_target) #fish_data 로 최근접 이웃 훈련

다시 수상한 도미를 훈련 모델에 넣어서 결과를 확인해 봅니다.

네~ 정상적으로 출력이 되는 것을 확인 할 수 있네요~

이 처럼 단위가 틀려지거나 할 때는 반드시 전처리 해서 일정한 기준으로 맞추어 주는 전처리 과정이 꼭 필요합니다.

 

참고]

혼자 공부하는 머신러닝

사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기