data 분포 확인하기.
machine learning 공부를 하면서, 무작정 scaling을 하는 것이 의미가 있는가 ? 에 대한 고민을 하게되었다.
먼저 지금 내가 살펴보고 있는 data의 특징을 파악한 후 알맞은 scaler을 사용해야겠다는 생각에서 googling을 한후 보게 된 내용을 정리한다.
우리가 주로 머신러닝을 통해 예측하기 전 보게 되는 데이터는 방대한 양의 수를 가지고 있을 것이다.
그렇기에 데이터가 주로 어떤 값 근처에 어떠한 모양을 띄고 있는지는 전반적인 형태를 살펴보며 아는 수 밖에 없다.
주로 데이터의 분포는
1. 기술 통계 (descriptive statistics)
2. 히스토그램 (histogram)
3. 커널 밀도 (kernel density) 를 통해 본다.
# 1 . 기술통계
기술통계는 주로 데이터 분포의 특징을 대표할 수 있는 몇가지 숫자를 계산하여 이 숫자들로부터 데이터의 분포를 추측하는 방법이다.
예를 들면,
- 데이터의 숫자(Count)
- 평균 (mean, average)
- 분산 (variance)
- 표준 편차 (standard deviation)
- 최댓값 (maximum)
- 최솟값 ( minimum)
- 중앙값 (median)
- 사분위수 (quartile)
등이 많이 사용된다.
# 2. 히스토그램
히스토그램은 자료 값이 가질 수 있는 범위를 몇 개의 구간으로 나누고 각 구간에 해당하는 값의 숫자 혹은 상대적인 빈도를 계산하는 방법이다.
matplotlib에서 hist 함수의 경우 다음과 같은 3개의 값을 반환한다.
1) n : 각 구간에 있는 값의 수 혹은 빈도 리스트
2) bins : 구간의 경계값 리스트
3) patches : 각 구간을 그리는 matplotlib patch객체 리스트
* distplot을 그리는 경우 data의 분포 모양을 더욱 정밀하게 바라볼 수 있었던 것 같다.
#3. 커널 밀도
곡선으로 나타내는 경우를 커널 밀도라고 한다. 커널밀도에서 커널이라고 하는 특정 구간의 분포를 묘사하는 함수의 집합을 사용하여 전체 분포를 묘사하는 방법이다. 커널 밀도를 사용하면 분포의 전체 모양을 파악하기가 더욱 쉽다.
** 다차원 데이터 분포를 묘사하는 경우
: 다차원 데이터 분포는 순서가 정해진 여러개의 일차원 데이터가 있는 것과 같다.
만약 2차원의 데이터이고 각 데이터가 모두 연속적인 실수 값이라면 scatter plot 을 사용하면 된다. seaborn - joint plot을 그리는 경우 각변수의 히스토그램과 동시에 scatter plot 을 그려준다.
: 만약 3차원 데이터라면 seaborn package의 Pairplot명령을 사용한다. pairplot은 각 그리드 형태로 각 집합의 조합에 대해 히스토그램과 스캐터플롯을 그린다.
: 만약 모든 값이 category 값이면 Seaborn 패키지의 heatmap을 사용하면 된다.
정리참조글 https://notebook.community/zzsza/Datascience_School/09.%20%EA%B8%B0%EC%B4%88%20%ED%99%95%EB%A5%A0%EB%A1%A02%20-%20%ED%99%95%EB%A5%A0%20%EB%B3%80%EC%88%98/02.%20%ED%8C%8C%EC%9D%B4%EC%8D%AC%EC%9C%BC%EB%A1%9C%20%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EB%B6%84%ED%8F%AC%20%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0