본문 바로가기

Database/Statistics

[통계] 비지도학습(차원 축소, 군집분석)

1️⃣ 머신러닝의 학습 방법

▪️ 지도학습

  • 말 그대로 정답이 있는 데이터를 활용해 데이터를 학습시키는 것
  • 입력 값이 주어지면 입력값에 대한 Label을 주어 학습시키며 대표적으로 분류, 회귀
  • 예를 들어 3*3을 주고 라벨 데이터 셋을 입력 데이터 셋의 정답인 9를 알려주면 주어지지 않은 데이터 셋 9*3도 해결할 수 있음

▪️ 비지도학습

  • 지도 학습과 달리 정답이 없는 데이터
  • 비슷한 특징끼리 군집화하여 새로운 데이터에 대한 결과를 예측하는 방법
  • 라벨링이 되어 있지 않은 데이터로부터 패턴이나 형태를 찾아야 하기 때문에 지도학습보다는 조금 더 난이도가 있음
  • 비지도 학습의 대표적인 종류로는 클러스터링(Clustering), 차원 축소(Dimentionality Reduction)이 있음

2️⃣ 차원 축소

  • 데이터에서 차원 = 변수의 수 (차원이 크다는 것은 변수가 많다는 것)
  • 차원이 크면 시각화가 어렵고, 이해하기 어렵고, 분석하기도 어렵다
  • 그래서 이 차원을 줄이는 다양한 기법들을 차원 축소라고 한다

▪️ PCA (주성분 분석, Principal Component Analysis)

  • 대표적인 차원 축소 알고리즘
  • PCA는 시각화를 위해 사용되며, 다차원의 시각화도 가능해진다
  • 차원을 줄이기 위해서 축을 회전시켜 새로운 축을 찾아내는 방법이다
  • 몇 개의 점은 서로 겹치게 되는 문제점이 발생하는데 이 경우 정보의 유실이 있을 수 있다
  • 그러므로 분산이 가장 넓은 지역을 찾는다
  • 분산이 가장 넓은 지역을 직선으로 표시해 점을 옮겨 점들이 퍼져있는 정도를 지켜준다
  • 각 점들이 겹치지 않도록 하는 방법

Scree Plot

  • PCA 분석 후 주성분 수를 선정하기 위해 고유값-주성분의 분산 변화를 보는 그래프
  • 설명된 분산의 비율이 완만하게 감소되는 차원들은 버림

Python

seaborn.scatterplot(x='petal_length', y = 'petal_width', hue='species', data=iris)

from sklearn.decomposition import PCA

# 2차원으로 축소
pca = PCA(n_components=2) # n_components = 주성분의 갯수를 결정
pca.fit(x) # 각도를 찾음
# 축소된 차원으로 데이터를 변환
z = pca.transform(x)

# 축소된 차원을 이용해 시각화
# 4가지 변수를 잘 보여줄 수 있는 2차원으로 축소함
# 모든 변수가 다 반영이 되어있다
seaborn.scatterplot(
    x=z[:, 0],
    y=z[:, 1],
    hue=iris.species
)

 

▪️ NMF (비음수 행렬 분해, Non-negative Matrix Factorization)

  • PCA에 비해 점수의 해석이 좀 더 쉽다
  • 마이너스가 필요한 경우에는 사용할 수 없다
  • 텍스트 데이터를 쓸 때 효과적
  • 문서별 단어의 빈도를 정리
  • 어떤 문서들을 이루는 주제의 축을 찾을 수 있다
더보기

예시 : 고객 리뷰

  • 청결(청소, 깨끗, 더럽, 지저분, 깔끔..)
  • 서비스(친절, 안내, 접객..)
  • 인테리어(가구, 실내, 장식, 벽지..)

데이터를 가지고 NMF로 뽑아낼 수 있다

# 10차원으로 축소
from sklearn.decomposition import NMF
nmf = NMF(n_components=10)
nmf.fit(psyabs)

# 단어별 가중치
weight = pd.DataFrame(nmf.components_.T)
weight.index = psyabs.columns

# 0번 차원 확인
weight.sort_values(by=0, ascending=False).head(10)

# 1번 차원 확인
weight.sort_values(by=1, ascending=False).head(10)

 

▪️ MDS(다차원 척도법, Multi Dimensional Scaling)

  • 개체들 사이의 유사성/비유사성을 측정하여 유사도(근접성, 거리)를 시각화
  • 객체들 사이의 유사도(거리)를 최대한 유지하는 방법
  • MDS의 장점은 거리를 유지한다는 점
  • MDS의 축은 의미가 없어서 해석 자체가 되지 않음
  • 시각화할 때만 사용하며 거리와 방향이 의미가 없음
더보기

예시 : 브랜드 지도, 마케팅 전략, 포지셔닝 맵 -> 마케팅도 분석이다

 

import matplotlib.pyplot as plt
# MDS를 이용해 거리를 좌표로 바꾸기
mds = MDS(n_components=2, dissimilarity='precomputed')
z = mds.fit_transform(d)

# 시각화
seaborn.scatterplot(
    x = z[:, 0],
    y = z[:, 1],
)

for c, p in zip(name2id, z):
    plt.text(p[0], p[1], c,)

 

▪️ 차원 축소 정리

PCA NMF MDS
시각화, 단점 가중치가 -인 경우가 있어서 해석이 어려울 때가 있다 PCA와 비슷하지만 해석이 좀 더 잘 됨 방향에 대한 해석이 필요가 없고, 원래의 거리를 가능한 지켜서 그리고 싶을 때

 

3️⃣ 군집 분석(Clustering)

  • 비슷한 사례들을 군집으로 묶음
  • 고객을 성별, 연령 등 인구학적 변수에 따라 그룹화 → 그러나 고객들은 단순하게 나눠지지 않으며, 정확성도 떨어짐
  • 구글, 넷플릭스 등의 서비스는 인구학적 변수를 사용하지 않음
  • 데이터에 기반해서 고객들을 그룹화할 필요가 있을 때 군집 분석을 사용함
  • 분류분석은 label이 있을 때 새로운 데이터 그룹을 예측하기 위한 목적이며, 군집분석은 label이 없을 때 데이터 자체의 특성에 대해 알고자 하는 목적

k-Means

  • k개의 평균이라는 뜻으로 가장 널리 사용되는 클러스터링 방법
  • 군집의 평균(중심점)을 구함
  • 사례를 중심점이 가장 가까운 군집에 포함시킴
# 데이터
iris = pd.read_excel('iris.xlsx')
x = iris.iloc[:, 0:4]

# 학습
from sklearn.cluster import KMeans
km = KMeans(n_clusters=3)
km.fit(x)

# 예측
cluster = km.predict(x)# 같은 번호가 있으면 같은 그룹

# 시각화
seaborn.scatterplot(x=z[:,0], y=z[:,1], hue=cluster, data=iris)
반응형