개인 공부

데이터 과학 - 8. Data Preprocessing Part 2

Beige00 2024. 4. 18. 22:23

* Data Reduction

=> data가 크면 분석하는데 cost가 높아진다. 따라서 데이터의 크기를 줄이는 과정이 필요하다.

Data Reduction의 전력으로는 차원 축소, 수치 축소, 데이터 압축이 있다.

 

* Curse of dimensionality : 데이터의 차원이 크면 data들은 점점 넓게 퍼지게 되고, 점 간의 밀도와 거리는 clustering, outlier 분석에 중요하므로 이는 좋지 않다.

=> Dimensionality reduction : irrelevant feature와 noise 제거의 도움이 된다 또한 data mining의 소요 cost를 줄이고 visualization을 쉽게 해준다.

 


* Dimensionality reduction

 

1. Fourier transform

2. Wavelet transform

- 신호를 여러가지 주파수로 분해한다.

- 서로다른 해상도 수준에서 객체들이 상대적 거리를 보존하도록 변환한다.

- 이는 자연스럽게 그룹들을 명확히 구분할 수 있게 도와준다.

=> Discrete Wavelet Transform은 Discrete Fourier Transform과 유사하지만 손실 압축에 더 적합하며 공간적으로 국소화 되었다..(이미지의 특정 부분에서의 세부 사항이나 신호의 순간적인 변화 포착 유리)

 

DWT 방법 : 1. 길이 L을 2의 정수 제곱으로 바꾼다.(0 padding) 2. smoothing, difference 조건에 맞춰 변환한다.

3. 데이터 쌍에 적용하여 L/2 길이의 분해된 데이터를 결과로 한다. 4. 이를 원하는 길이가 될 때까지 반복한다.

 

- Haar Wavelet :

원하는 해상도가 될 때까지 압축을 할 수 있다. 방법은 다음과 같다.

n,n+1의 원소의 산술 평균을 다음 Average(저주파)의 원소로 한다. 그리고 n의 원소에서 n+1의 원소를 빼고 이것을 2로 나누어 Detail Coef.(고주파)로 저장한다.

예를 들어, 8->4로 압축하는 과정은 다음과 같다.

[ (2+2)/2, (0+2)/2, (3+5)/2, (4+4)/2 ] => Average, [(2-2)/2, (0-2)/2, (3-5)/2, (4-4)/2] => Detail Coef.

압축된 데이터에서 원본 데이터로 돌리는 방법은 Detail Coef를 Average 원소에서 더하고, 빼면 된다.

예를 들어, 2->4로 돌리는과정은 다음과 같다.

[ (1.5+0.5), (1.5-0.5), (4+0), (4-0) ] => Average

그래서 결과적으로 저장된 data는 다음과 같이 list에 존재하게 된다.

[ (결과), Detail Coef의 역순 ] => [ 2.75, -1.25, 0.5, 0, 0, -1, -1, 0 ]

=> 이렇게 transform이 된 데이터에서 Detail Coef. 부분은 뒤에 있는 부분일 수록 "덜 중요한" 데이터일 것이다.(raw에 가까우므로) 따라서 이 부분을 0으로 치환할 수록 압축이 되는 효과를 가진다.

 

ex) [2.75, -1.25, 0.5, 0, 0, -1, -1, 0]에서 4개를 압축할 시, [2.75, -1.25, 0.5, 0, 0, 0, 0, 0] 이 된다.

 

이는 다시 tree로 그려낼 수 있다.

결과에서 첫 coef 더하고, 그 다음은 +,- 반복

 

* Dimension Reduction에 Wavelet Transform 사용하는 이유?

1. 효율적이다. (O(N))

2. outlier 제거에 좋다. (noise에 둔감하며 input order에 둔감하다.)

3. Multi- resolution : 다양한 scale에서 cluster의 detecting 가능

4. Hat-shape filters의 사용 : 데이터 포인트가 모이는 곳을 강조한다.(특징 강조)

그러나, 저차원 데이터에만 적용이 가능하다.

 

3. PCA

여러 feature를 하나로 압축하는 것이다. (Vector를 중요한 요소로 줄여서 출력)

=> n 차원에서 N개의 데이터가 주어지면 주어진 데이터를 가장 잘 표현할 수 있는 k개의 직교 벡터를 찾는다.(k<=n)

=> 선형 변환이므로 각 입력 데이터는 k 개의 PCA 직교 벡터로 표현된다.

=> PCA는 "중요도" 순서로 나열된다. 따라서 끝에서부터 PCA를 제거하면 데이터 크기를 줄일 수 있다.

=> 작동 원리를 생각해보면 numeric data에서만 작동할 수 있다.


* Numerosity Reduction

- 데이터 표현의 대체법을 선택하여 data volume을 줄이는 것이다.

 

방법

1. Parametic methods (ex: regression)

=> 데이터를 어떤 모델에 fitting 시켜서 모델의 parameter를 추정하고, parameter만 저장한 뒤, 데이터를 폐기한다.(outlier 제외)

2. Non-parametric methods (ex: histograms, clustering, sampling...)

 

1. Parametic methods

 

- Linear regression : 데이터는 직선에 fitting된다.(주로 최소제곱법 사용)

- Multiple regression : Y는 여러가지 X 들로 모델링된다. (Y = k + aX1+bX2+cX3...)

- Log-linear model : 이산 다차원 확률 분포를 근사한다. (Dimensionality reduction, data smoothing에 유용.)

 

=> Regression analysis의 결과로 데이터를 가장 잘 설명하는 선의 파라미터(ex: a,b,c)를 알 수 있다.

 

2. Non-parametric methods

 

- Histogram analysis : 데이터를 bin으로 나누고 각 bin의 평균(합)을 저장한다.

=> 이 때 나누는 규칙은 equal-width(bin의 간격이 같게), equal-frequency(bin의 높이가 같게) 가 있다.

 

- Clustering : 데이터를 clustering 하고 cluster 표현만 저장한다.(ex: 중심 및 직경)

=> 데이터가 clustering 된 경우 효과적이나, 데이터가 분산되어있을 경우 효과적이지 못하다.

=> 또한 계층적 클러스터링을 가질 수 있으며 이는 다차원 index tree에 저장된다.

 

- Sampling : 일부 데이터만 뽑는 기법이다. 즉, 전체 데이터 모집합에서 표본을 추출하는 것이다.

=> 효율적이게 작동할 수 있으나 어떻게 data를 추출할 것인지가 문제이다.

=> 단순 무작위 샘플링은 데이터가 Skewed 되어있을 경우 성능이 떨어질 수 있다.

=> 샘플링은 데이터베이스가 한 페이지씩 처리될 때 I/O cost가 그대로일 수 있다.

* Type of Sampling : 무작위 샘플링, 비복원 샘플링, 복원 샘플링, Stratified sampling( data set을 나누고, 각 partition에 따른 sample을 추출한다. 따라서 데이터의 비율이 동일하게 추출된다. -> skewed data에 사용 가능)

 

* Data Compression

- String compression(lossless, 그러나 확장이 필요.), Audio/Video Comp.(보통 lossy compression이다), 시계열 데이터

=> 사실 Dimension Reduction과 Numerosity reduction은 data compression의 일환으로 볼 수 있다.


* Data Discretization

- 데이터의 타입은 Nominal, Ordinal, Numeric으로 나눌 수 있다. 이 중 Continous한 값들을 가지는 데이터는 구간을 나눠 구간에 포함시키는 작업을 하여 Discrete처럼 다룰 수 있는데, 이를 Discretization이라고 한다.

- Discretization의 방법

1. Binning

2. Histogram analysis

3. Correlation analysis - 여기까지는 이미 다뤘다.

4. Clustering analysis

5. Decision-tree analysis

 

* Discretization by Classification & Correlation Analysis

- Classification ( ex: decision tree analysis)

=> Supervised, Top-down, recursive split

 

- Correlation analysis ( ex: X^2 based discretization )

=> Supervised, Bottom-up merge, stopping cond.가 완료될 때까지 merge

=> Correlation value가 기준보다 이상이면 합친다.

 

- Concept hierarchy

=> 연관된 개념들을 그룹으로 묶어 높은 수준의 개념으로 분류한다. (ex : 나이 데이터 => 청소년,성인,노인)

=> 이 과정은 데이터를 잘 이해하고 있는 전문가들에 의해 이루어질 수도 있다.

 

- Concept hierarchy generation for Nominal Data

1. 전문가에 의해 데이터의 순서를 명시적으로 정의한다. (ex: street<city<state<country)

2. 구분된 값들에 대해 계층 지정

3. 모든 값들에 대해 계층을 지정하지 않아도 된다.

4. 몇몇 계층은 자동으로 생성될 수 있다. (예를들어 가장 많은 고유 값이 있는 속성이 가장 낮은 계층에 존재한다.)


* Feature Engineering

- raw feature들을 가치있는 데이터로 변형하는 과정이다.

- Feature Engineering은 non-linear 관계를 simple linear model로 묘사할 수 있다.

- non-numeric data를 모델에 입력으로 사용할 수 있게 인코딩이 가능하다.

=> 이 Feature engineering 때문에 sklearn이 SquareRegression/PolynomialRegression을 포함하지 않는다.

 

* One hot encoding

- 그렇다면, 위와 같은 데이터를 어떻게 linear model에 입력으로 줄까? 무언가 Feature Engineering 과정이 필요하다.

그 과정에서 사용되는 것중 하나가 one hot encoding이다.

범주형 데이터는 결국 특정 범주값을 1로 가지는 데이터이다. (ex: 빨간색은 빨주노초파남보 중에 빨간색이 1인 case이다.)

이런 식으로 범주형 데이터를 변환시키는 것이다.

One hot encoding외에 이러한 데이터를 input으로 주는 다른 방법은 색깔과 같은 다른 표현법으로 추가로 표현을 해주는 것이다.

물론 이러한 방법은 표현할 데이터의 양이 적고 종류가 적어야한다.

* Overfitting

- 데이터가 N개의 구분되는 size를 지닐 시, 우리는 항상 N-1개의 항을 써서 MSE가 0인 model을 만들 수있다.

그러나 이는 의미가 없는 짓이다. 이러한 모델은 Overfitting이 되었다고 하며 특정 상황을 "기억"할 뿐이지 해당 상황에 최적화된 나머지 일반적인 상황에 대한 예측력은 떨어지게 되는 것이다.

이렇게 모델의 complexity가 늘어나면 늘어날 수록 각 데이터 하나하나에 대해 지나치게 민감해지는 경향이 있고,

적으면 적을수록 지나치게 둔감해지는 경향이 있다. 이러한 모델의 민감도를 "model variance"라고 한다.

=> 따라서 linear 모델의 order를 올릴 수록(Complexity가 늘어날 수록) training error는 떨어지지만 model variance는 올라가는 효과가 있다. (trade-off 관계이다.)


* Feature Selection

 

- 중복 속성

=> 하나 이상의 속성이 공통된 정보를 포함한다. (ex: 제품의 구매 가격과 sales tax의 양)

 

- 관계없는 속성

=> data mining을 통해 얻을 어떠한 정보도 없다. (ex: 성적을 예측하는데 학번?)

 

Feature Selection problem은 이러한 Feature들을 걸러내어 최소한의 feature로 데이터 분포를 이해하는 것을 의미한다.

 

방법(Heuristic)

1. 각 속성이 독립이라는 가정 하에 중요성 테스트를 하여 최고의 단일 속성을 선택

2. 중요성 테스트로 하나를 선택후, 더 필요하면 그 다음 속성 선택...

3. 반대로 반복적으로 최악의 속성을 제거해나가는 접근법도 존재.

4. 1,3 방법을 섞어 선택과 제거를 동시에 하는 방법

5. 제거 후 백트래킹을 반복하는 방법

 

또는 아예 데이터 셋의 중요한 정보를 원래의 속성보다 더 효과적으로 캡처할 수 있는 새로운 feature를 만들 수도 있다.

(Attribute extraction, Mappint to new space(data reduction)-푸리에 변환, 웨이블렛 변환 등, Attribute construction(Data discretization))