위클리페이퍼 #6 - High Dimensional Clustering, 고유값(Eigenvalue), 고유벡터(Eigenvector), 히스토그램(Histogram)
Codeit DA1기 파트1 팀프로젝트 동안 위클리페이퍼를 진행하지 못했고, 금주부터 시작되는 위클리 페이퍼의 주제는 3가지 이다.
1) 데이터 간의 유사도를 계산할 때, feature의 수가 많다면(예: 100개 이상), 이러한 high-dimensional clustering 문제를 해결하기 위한 방법들을 설명해 주세요.
2) 고유값(eigenvalue)과 고유벡터(eigenvector)에 대해 설명해 주세요. 이들이 데이터 분석에서 왜 중요한지 구체적인 예를 들어 설명해 주세요.
3) 히스토그램의 주요 단점은 무엇이며, 이를 극복하기 위한 대안적인 시각화 방법을 설명해 주세요.
High-dimensional clustering 문제 해결
데이터의 Columns(feature)가 늘어남에 따라서, 관측된 것이 많아 지는 것 보다. 변수(특성)이 많아지는 것이 문제가 될 확률이 높다. 차원이 커질수록 데이터 공간을 설명하기 위해서는 데이터를 매우 많이 필요로 하기 때문이다. 이와 같은 현상을 차원의 저주라고 부른다. 또한 데이터의 차원이 높아질 수록 데이터 내부의 노이즈가 증가하게 되고, 이는 곧 모델의 성능의 저하로 이어 질 수 있다.

위의 그림과 같이 2차원에 데이터가 특성 추가로 인해 3차원으로 확장 됨에 따라 점들이 더 퍼져 나가고, 점들간의 쌍방향 거리가 멀어지는 형태를 보인다. 이러한 형태의 데이터는 데이터 포인트간 거리가 멀엊지기 때문에 ML 알고리즘을 학습하게 된다면 모델이 복잡하게 되어지고 결국에는 overfitting 위험이 커지게 된다. 이러한 차원의 저주를 벗어나기 위한 차원 축소(Dimensionality Reduction)의 방법을 사용한다.
차원 축소 방법
차원축소 기법은 크게 특징 추출과 특징 선택로 나눌 수 있다.
1. Feature Extraction(특징 추출)
- 데이터셋 에서 덜 필요한 feature를 제거
- 비정형데이터에 주로사용
Feature Extration의 방법은 선형 / 비선형 방식으로 분류 된다.
- Liner mothods
- PCA(Principal Component Analysis, 주성분 분석) : 데이터의 분산을 최대화하는 방향으로 주성분을 찾아 저차원으로 변환
- LDA(Linear Discriminant Analysis, 선형 판별 분석) : 클래스 간 분산을 최대화하고 클래스 내 분산을 최소화하여 차원 축소.
- SVD(Singular value Decomposition, 특이값 분해) : 행렬을 특이값으로 분해하여 데이터구조를 저차원 공간에서 표현하는 방법이고 PCA 계산에서 사용되는 핵심 알고리즘이다.
- 요인분석(Factor Analysis) : 관찰된 변수들 간의 상관관계를 바탕으로 숨겨진 잠재 변수를 추정하여 데이터를 설명
- Non-linear methods
- AE(AutoEncoder) : 인공신경망을 활용하여 입력 데이터를 저차원 잠재 공간으로 인코딩하고, 이를 다시 원래 데이터로 복원하는 방법, 비선형 관계를 학습하여 차원 축소
- t-SNE(t-Distributed Stochastic Neighbor Embedding) : 데이터의 구조를 보존하면서, 고차원 데이터를 저차원으로 변환하는 비선형적 기법. 데이터 포인트 간의 거리나 유사도를 보존, 주로 데이터 시각화에 사용됨
- LLE(Locally-Linear Embedding) : 데이터의 국소적인 선형관계를 유지하면서 저차원으로 변환하는 비선형 방법. 데이터의 비선형적 구조를 보존하는데 효과적
2. Feature Selection(특징 선택)
중요하지 않거나 반복되는 특성을 제거하여 데이터의 성능을 최적화 하는데 사용
- 필터 방법 (Filter Methods)
- 상관계수 (Correlation Coefficient) : 각 특성과 목표 변수 간의 상관관계를 계산하여, 상관계수가 높은 특성을 선택하는 방법입니다. 일반적으로 피어슨 상관계수가 사용됨, 회귀 분석에서 자주 사용
- 카이제곱 검정 (Chi-square Test) : 범주형 데이터에서 각 특성과 목표 변수 간의 독립성을 검정하여, 상관성이 높은 특성을 선택하는 방법입니다. 주로 분류 문제에서 사용됩니다.
- 분산 분석 (ANOVA, Analysis of Variance) : 각 특성과 목표 변수 간의 분산을 비교하여, 특성이 목표 변수에 얼마나 기여하는지를 평가하는 방법입니다. 특성이 목표 변수에 대한 설명력이 높은 경우 선택됩니다.
- 랩퍼 방법 (Wrapper Methods)
- 전진 선택법 (Forward Selection) : 처음에는 특성을 하나도 선택하지 않고 시작하여, 성능이 가장 많이 향상되는 특성을 순차적으로 추가하는 방법입니다. 최적의 특성 집합을 찾는 데 효과적입니다.
- 후진 제거법 (Backward Elimination) : 모든 특성을 포함한 상태에서 시작하여, 성능에 가장 적은 영향을 미치는 특성을 하나씩 제거하는 방법입니다. 최적의 특성 집합을 점진적으로 도출합니다.
- Recursive Feature Elimination (RFE) : 기계 학습 모델을 사용하여, 각 반복에서 가장 중요도가 낮은 특성을 제거해 나가면서 최적의 특성 집합을 찾는 방법입니다. 주로 SVM이나 회귀 모델과 함께 사용됩니다.
- 임베 디드 방법 (Embedded Methods)
- 라쏘 회귀 (Lasso Regression) : L1 정규화를 적용하여 불필요한 특성의 계수를 0으로 만들어 제거하는 방법입니다. 라쏘는 자동으로 특성 선택을 수행하면서 모델을 학습합니다
- 릿지 회귀 (Ridge Regression) : L2 정규화를 적용하여 특성들의 계수를 작게 만듦으로써 과적합을 방지합니다. 모든 특성을 유지하면서도 중요한 특성을 강조하는 데 사용됩니다.
- Elastic Net : L1과 L2 정규화를 결합한 방법으로, 라쏘와 릿지 회귀의 장점을 결합한 방식입니다. 라쏘처럼 특성을 선택하면서도 릿지처럼 모든 특성을 고려합니다.
이와 같은 방법들을 통해서 데이터의 특성에 따른 여러 방법중에 골라서 이용하여 모델링의 성능을 개선 할 수 있다.
고유값(eigenvalue)과 고유벡터(eigenvector)
머신러닝(ML)에서 사용되는 PCA, SVD, 행렬 분해와 관련된 시스템의 근간이 되는 개념으로 행렬을 선형 변환이라고 했을때, 선형 변환 정방행렬 A를 가했을 경우에 크기만 변화하고, 0이 아니면서 방향을 변하지 않는 벡터를 고유벡터(eigen vector, \(\vec{v}\) )라고 하고 변환된 크기(벡터)에 대해서 고유값(eigen value, $\lambda$)이라고 한다.

예시로 PCA를 들어서 설명하겠습니다. PCA에서 고유값과 고유벡터는 데이터의 분산을 설명하는데 사용된다. 이때 고유값이 큰 고유벡터는 데이터의 주요 변동 방향을 나타내고, 그런 과정을 통해서 차원을 축소 할 수 있게 되는 것이다.
# PCA 예시
import numpy as np
from sklearn.decomposition import PCA
# 예시 데이터
data = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])
# PCA 적용
pca = PCA(n_components=2)
pca.fit(data)
# 고유값과 고유벡터 출력
print("고유값:", pca.explained_variance_)
print("고유벡터:", pca.components_)
히스토그램의 주요 단점은 무엇이며, 이를 극복하기 위한 대안적인 시각화 방법
히스토그램(Histogram)은 표로 되어 있는 도수 분표를 정보그림으로 나타낸 것으로, 도수분포표(표본의 산출 분포)를 그래프로 나타낸 것이다.
히스토그램의 주요 단점
- 빈(bin) 간격 설정에 매우 민감 : 데이터 범위를 특정 간격으로 나누어 막대를 그리기 때문에 간격의 크기와 개수에 따른 시각화가 크게 달라질 수 있기 때문에 간격 설정에 유의 해야한다.
- 데이터의 정확한 분포를 놓칠 수 있음 : 연속적인 데이터에서 특정 패턴 및 세부사항에 대한 정보가 히스토그램에서 사라질 수 있다.
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = np.random.randn(1000)
sns.histplot(data, bins = 3) #bin의 단위는 정수형만 가능
plt.show()

이를 극복하기 위한 대표적인 시각화 방법에 대해서 설명하자면 아래와 같다.
커널 밀도 추정(KDE, Kernel Density Estimation)
- 히스토그램 대안으로 연속적인 곡선을 이용해서 데이터의 분포를 추정하는 방법, 간격에 의존하지 않고 데이터의 분포를 매끄럽게 시각화해서 세부 패턴을 파악가능.
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = np.random.randn(1000)
sns.kdeplot(data) #KDE Plot
plt.show()

박스 플롯(Box Plot)
- 데이터의 중간값, 사분위수, 이상치를 시각화를 통해 데이터의 분포를 요약하여 보여줌
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = np.random.randn(1000)
sns.boxplot(data=data)
plt.show()

바이올린 플롯(Violin Plot)
- 박스 플롯과 커널 밀도 추정을 결합하여 데이터의 분포 및 요약통계를 동시에 파악 할 수 있다.
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
data = np.random.randn(1000)
sns.violinplot(data=data)
plt.show()

위와 같은 방식 외에도 누적 분포 함수(CDF)등 여러 방법을 통해서 히스토그램의 단점을 극복을 위한 시각화 방법이 여러가지 존재한다.
참고자료 : https://velog.io/@cuckoobee/%EC%B0%A8%EC%9B%90%EC%B6%95%EC%86%8CDimension-Reduction
참고자료 : https://www.cs.cornell.edu/courses/cs4780/2018fa/lectures/lecturenote02_kNN.html
참고자료 : https://gguguk.github.io/posts/eigenvalue_eigenvector/