본문 바로가기

머신러닝/혼자 공부하는 머신러닝

5강 정교한 결과 도출을 위한 데이터 전처리 알아보기

https://www.youtube.com/watch?v=kaCJ-knm8KU&list=PLJN246lAkhQjoU0C4v8FgtbjOIXxSs_4Q&index=5

보고 공부한 글입니다.

 

지난 시간에 배운 것들이다.

찾고자 하는대상 -> 양성 클래스 (1)

찾고자 하는 대상이 아닌것 -> 음성 클래스 (0)

 

으로 타겟 데이터를 만든다.

 

 

 

나는 누구인가? 

데이터 상으로는 빙어이다.

 

 

 

넘파이로 데이터 준비

 

numpy의 column_stack을 사용한다. 

 

fish_length를 1열에, fish_weight를 2열에 넣어서 2차원 배열을 만든다.

 

low_stack도 있는데 열방향으로 쌓아준다.

 

numpy의 함수 ones(갯수), zeros(갯수)로 만들 수 있다.

 

그것들을 concatenate()로 배열을 만든다.

 

full( (2,3) ,9 ) 이면 9 9 9

                        9 9 9  가 나온다.

 

 

사이킷런으로 데이터 나누기 

사이킷런에 많은 도구가 있다.

 

model_selection 모듈 밑에 train_test_split 함수를 제공한다.

 

data와 target을 한꺼번에 전달해서 훈련 세트테스트 세트로 나눠준다.

 

stratify 매개변수는 분류할 경우 샘플링 편향이 생기지 않도록 골고루 훈련 세트와 테스트 세트를 랜덤으로 나눠준다.

 

target 배열을 주었으니

target 배열을 보고 target을 골고루 섞이게 한다.

 

2개의 배열을 입력하면 4개의 결과배열이 나온다.

3개의 배열을 입력하면 6개의 결과배열이 나온다.

 

 

수상한 도미 

 

25,150 을 predict 메소드에 넣어서 확인한다.

 

그래프에서는 도미와 가까워서 도미같은데 빙어라고 나온다.

 

kneighbor메서드로 바라보는 이웃의 인덱스를 뽑을 수 있다.

 

indexes에 이웃인 인덱스가 있을 것이다.

 

train_input의 행에 indexes 배열을 넣고 길이, 무게 특성을 뽑을 수 있다.

 

 

기준을 맞춰라 

x좌표를 1000배를 해서 y축과 맞춰준다.

 

 

k-최근접은 주변 이웃을 바라본다.

 

 

 

 

 

표준 점수로 바꾸기 

위 공식으로 표준점수를 많이 구한다.

 

z점수라고도 한다.

 

사이킷런에는 표준점수로 변환하는 도구가 존재한다.

 

 

길이, 무게 특성을 따로따로 구해보자.

 

numpy의 mean함수가 평균을 구해준다.

 

numpy의 std함수가 표준편자를 구해준다.

 

axis를 0으로 설정한게 x축을 쭉 내려간다.

그리고 2개의 결과가 나온다. (1,2) 행렬의 데이터가 나올 것이다.

 

만약 axis 1로 설정한다면 각 행을 따로따로 구할 것이다. (36,1)의 결과행렬이 나올 것이다.

 

 

train_input을 (36,2)의 행렬이고, mean은 (1,2) 행렬인데 어떻게 계산해주는가?

 

(1,2)를 numpy가 하나하나 행을 다 계산해준다.

 

또 std로 나누는데 하나하나 행을 다 계산해준다.

 

결과도 (36,2) 배열이 될 것이다.

 

 

이것을 numpy의 브로드 캐스팅이라고 한다.

 

 

수상한 도미 다시 표시하기

표준점수로 훈련데이터는 바꿨는데 도미도 표시데이터로 바꿔줘야 한다.

 

 

수상한 도미도 훈련 데이터의 평균, 표준편차로 변환을 해줘야 한다.

 

테스트세트로 마찬가지 이다.

 

테스트 세트를 훈련 세트의 평균, 표준편차로 변환 해야한다.

 

기준은 '훈련 세트'

 

 

new를 다시 그리면 x축과 y의 스케일만 바뀐거지 똑같다.

 

다시 k-최근접 이웃을 훈련시켜보자.

 

 

전처리 데이터에서 모델 훈련

먼저 훈련 세트로 모델을 학습시킨다.

 

그리고 테스트 세트도 훈련 세트의 평균, 표준편차를 사용해서 scale을 맞춰준다.

 

여기서 입력 데이터만 스케일을 바꾸지 타겟(정답)은 바꾸지 않는다.

 

그냥 타겟은 정답이다.

 

이번에는 제대로 도미라고 나온다.

 

주변에 어떤것을 이웃으로 지정 했는지 알아보자.

 

kneighbors()메서드로 이웃 indexes를 뽑아온다.

 

plt.scatter(train_scaled[indexes,0], train_scaled[indexes,1])로 train_scaled(훈련 세트) 의 1열, 2열을 가지고 와서 그래프에 그린다. 

이 때 행은 주변에 이웃하는 indexes로 체운다.

 

 

 

입력 데이터를 머신러닝 모델이 사용할 수 있도록 데이터를 적절히 수정하는 것을 전처리라고 한다.

 

728x90