📁 ETC/혼공머신

REVIEW) 데이터 전처리_표준점수

Lento_ 2024. 3. 18. 16:07

 

 

🟣 넘파이 'column_stack()' 함수

✔︎ column_stack() : 전달받은 리스트를 일렬로 세운 다음 차례대로 나란히 연결한다.

 

✔︎ 연결할 리스트는 파이썬 튜플로 전달한다.

 

🟣 튜플(tuple)

✔︎ 리스트와 비슷하다. --> 리스트처럼 원소에 순서가 있다.

✔︎  한 번 만들어진 튜플은 수정할 수 없다.

✔︎ 튜플을 사용하면 함수로 전달한 값이 바뀌지 않기에 매개변수 값으로 많이 사용한다.

✔︎ 넘파이 배열의 크기는 파이썬의 튜플로 표현한다.

✔︎ 튜플의 원소가 하나면 원소 뒤에 콤마를 추가한다.

 

🟣 넘파이 'np.ones()' , 'np.zeros()'

✔︎ 각각 원하는 개수의 1과 0을 채운 배열을 만든다.

 

🟣 넘파이 'np.concatenate()'

✔︎ 배열들을 하나로 합치다.(연결하다.)

✔︎ numpy.ndarray를 자유롭게 합칠 수 있다.

 

🟣 사이킷런으로 훈련 세트와 테스트 세트 나누기 - 'train_test_split()'함수

✔︎ train_test_split() : 전달되는 리스트나 배열을 비율에 맞게 훈련 세트와 테스트 세트로 나눈다.

✔︎ train_test_split() 함수는 기본적으로 25%를 테스트 세트로 떼어낸다.

✔︎ 입력 데이터 = train_input, test_input

✔︎ 타깃 데이터 = train_target, test_target

✔︎ 랜덤 시드 = 42

 

✔︎ 훈련 데이터, 테스트 데이터 = 36, 13

✔︎ 입력 데이터 =  2개의 열이 있는 2차원 배열

✔︎ 타깃 데이터 = 1차원 배열

 

🟣 train_test_split() 메소드의 'stratify'파라미터

✔︎ 분류 문제를 다룰 때 매우 중요하게 활용되는 파라미터 값

✔︎ stratify 값으로는 target 값을 지정한다.

✔︎ stratify값을 target 값으로 지정해주면 target의 class 비율을 유지 한 채로 데이터셋을 split 하게 된다.

✔︎ 만약 이 옵션을 지정해주지 않고 classification 문제를 다룬다면, 성능의 차이가 많이 날 수 있다.

✔︎ 원래 데이터 비율 = 2.5 : 1  /  테스트 세트의 비율 = 3.3: 1

✔︎ 샘플이 골고루 섞이지 않음. -->  샘플링 편향이 나타남.

✔︎ stratify을 이용하여 클래스 비율에 맞게 데이터를 나눈다. --> stratify 파라미터 이용

 

 

🟣 테스트 데이터로 모델 평가하기 

✔︎ (상황)

세모 마크의 데이터의 예측값은 1이었다. 하지만 결과는 0이 나온 상황이다.

왜 1이 아닌 0이 나온 것인가

✔︎ 'kneighbors()' 메소드를 이용하여 가장 가까운 이웃을 찾는다.(기본값 = 5)

✔︎ 이를 그래프에 초록색 다이아 모양으로 표시한다.

✔︎ 그 결과 초록색 다이아 모양을 타깃 데이터로 1이 하나 0이 네개인 것을 확인 가능하다.

 

✔︎ 기준이 없기에 기준이 필요하다!

 

🟣 기준 맞추기

✔︎ 위의 문제에 대한 원인 

: x축은 범위가 좁고 y축은 범위가 넓다.

--> y축으로 조금만 멀어져도 거리가 아주 큰 값으로 계산된다.

 

🟣 범위 지정하기 : 'xlim() , ylim()'

✔︎ xlim() , ylim() : 맷플롯립에서 x축 범위와 y축 범위를 지정

✔︎ x축, y축 범위을 동일하게 맞춤.

 

🟣 스케일(scale)

✔︎ 특성의 단위가 다르다. = 스케일이 다르다.

✔︎ 데이터를 표현하는 기준이 다르면 알고리즘이 올바르게 예측할 수 없다. --> 해결법) 데이터 전처리(data preprocessing)

 

🟣 데이터 전처리(data preprocessing) : 표준점수(standard score)(z 점수)

✔︎ 표준점수

: 각 특성값이 평균에서 표준편차의 몇 배만큼 떨어져 있는지를 나타낸다.

: 실제 특성값이 크기와 상관없이 동일한 조건으로 비교할 수 있다.

 

✔︎ np.mean() : 평균 계산

✔︎ np.std() : 표준편차 계산

✔︎ 특성마다 값의 스케일이 다르므로 평균과 표준편차는 각 특성별로 계산해야 한다.

✔︎ axis = 0 : 행을 따라 각 열의 통계 값을 계산한다.

 

✔︎ 표준점수로 변환

 

🟣 브로드캐스팅(broadcasting)

✔︎ 브로드캐스팅

: 조건을 만족하면 모양이 다른 배열 간의 연산을 가능하게 해 주는 기능이다.

: 크기가 다른 넘파이 배열에서 자동으로 사칙연산을 모든 행이나 열로 확장하여 수행하는 기능이다.

✔︎ 넘파이 배열 사이에서 일어난다.

 

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

✔︎ 특성의 단위가 다르다. = 스케일이 다르다.

✔︎ 훈련 세트의 값의 스케일을 변환해주었기에 범위가 달라졌다.

✔︎ 따라서 샘플 데이터(세모 모양 마크) 또한 스케일을 변환해주어야 한다.

 

✔︎ 이 그래프는 표준편차로 변환하기 전의 산점도와 거의 동일하다. 다른 점은 축의 범위가 변했다는 것이다.

✔︎ 즉, 훈련 데이터의 두 특성이 비슷한 범위를 차지하고 있다.

 

✔︎ 데이터 훈련시키기

 

🟣  모델 평가하기

✔︎ !주의! : 훈련 세트의 기준으로 테스트 세트를 변환해야 같은 스케일로 산점도를 그릴 수 있다.

 

  훈련 세트를 변환한 방식 그대로 테스트 세트를 변환해야한다.  

'📁 ETC > 혼공머신' 카테고리의 다른 글

REVIEW) 회귀분석  (0) 2024.07.10
REVIEW) 회귀 알고리즘과 모델 규제  (1) 2024.03.22
REVIEW) Numpy_넘파이  (0) 2024.03.17
REVIEW) KNN  (0) 2024.03.16