인공지능-머신러닝-맛보기03

아래의 글은 elice(엘리스) 에서 진행한 인공지능/머신러닝 맛보기 수업을 듣고 개인 공부를 목적으로 정리한 글입니다.
학습자료가 따로 있기에 그림이나 예제등 자세한 내용 없이 키워드와 기억하고 싶은 내용, 궁금해서 따로 검색해 놓은 내용만 적어놓은 것임을 밝힙니다.


비지도 학습 개론(Introduction to Unsupervised Learning)

답이 정해져 있지 않은 데이터에서 숨겨진 구조(Latent Structure)를 파악
데이터 포인트들은 비슷한 것들끼리 뭉쳐있다 -> Hard Clustering
한 개의 데이터 포인트는 숨겨진 클러스터들의 결합이다. -> Soft Clustering

Hard Clustering

  • Hierarchical Clustering
  • K-Means
  • DBSCAN
  • OPTICS

Soft Clustering

  • Topic Models
  • FCM
  • Gaussian Mixture Models(EM)
  • Soft K-Means

Hard Clustering

목표 : 비슷한 데이터 포인트끼리 모은다
일반적으로는 완벽한 방법은 없다.

  1. 눈으로 확인
  2. 모델이 데이터를 얼마나 잘 설명하는가
    • Elbow method
    • Silhouette method
    • Gap staticstic method

고려할 것들

  • 데이터의 특성
    • 어떻게 만들어진 데이터인가?
    • 데이터 포인트 외 다른 Feature
  • 분석 결과로 얻고자 하는 것
    • 고양이 vs 개 분류
    • 사람들의 행동 분석
    • 가격 대비 효율성 분석

PCA 차원 축소

PCA란?

주 성분 분석
Principal Component Analysis(PCA)
데이터를 최대한 덜 잃도록 해야한다.
투사했을때 분산이 가장 커지는 방향

고차원 데이터 다루기
N차원 데이터 집합에 대해 최대 N개의 서로 수직인 주성분 벡터를 발견할 수 있음
첫 번째 주성분은 그 방향으로 데이터들의 분산이 가장 큰
두 번째 주성분은 그 다음으로 가장 분산이 큰 축

N 번째 주성분은 그 다음으로 가장 분산이 큰 축

PCA 왜 사용하는가?

  1. 고차원의 데이터를 저차원으로 줄인다.(예: 시각화)
  2. 데이터 정제
  • 차원의 저주(Curse of Dimensionality)
    차원이 하나 많아질 수록 표현할 수 있는 데이터의 종류는 기하급수적으로 늘어난다.
    해당 공간의 부피는 기하급수적으로 증가
    데이터의 밀도가 그만큼 희박해진다 => 더 많은 데이터가 필요해진다.
  • 솔루션 : 핵심이 되는 정보를 유지한 채 차원을 낮춰서 데이터의 밀도를 높이는 것
1
2
3
4
5
6
7
8
import sklearn.decomposition
def run_PCA(X, num_components):
'''scikit-learn'''
pca = sklearn.decomposition.PCA(n_components=num_components)
pca.fit(X)
pca_array = pca.transform(X)

return pca, pca_array

위의 코드가 PCA를 구현한것.
N차원을 num_components차원으로 줄여준다.
scikit-learn을 활용.

데이터 표준화

표준화(Normalization)는 여러 뜻을 가지고 있다.
이번엔 데이터를 [0..1]의 범위로 조정하는 것을 의미
이유는 스케일(Scale) 따라 주성분의 방향이 바뀌기 때문에 모든 특성(Attribute)의 스케일을 같게 할 필요가 있다.


K-means 클러스터링

반복을 이용한 클러스터링 알고리즘

  1. 중심 Centroid : 각 클러스터의 “중심”을 의미
  2. 중심과의 거리 distance : 중심과 데이터 포인트와의 거리

K-means Step

  1. 초기 중심값은 데이터 중 임의로 선정
  2. 두개의 중심점과 각각의 다른 점들과의 거리를 구해서 거리가 가까운쪽의 중심점의 그룹으로 분류한다.
  3. 형성된 그룹(클러스터)에서 중심점을 다시 계산한다. 여러가지 방식이 있지만 오리지널은 포인터 위치의 무게중심값으로 정한다.(평균으로 하기도 한다)
  4. 다시 각각의 데이터 포인트에 대해 위에서 계산된 중심점과의 거리를 구해 가까운 중심점을 찾는다.
  5. 모든 데이터 포인트에 대해 가장 가까운 클러스터를 할당한다.
  6. 데이터 포인트의 클러스터 할당이 새로 진행되지 않을때가지 3번부터 반복한다.

K-means의 문제점

빠르고 강력한 만큼 문제점이 존재한다.

  1. K(클러스터 개수)값에 따라 결과값이 완전히 달라진다.
  2. 초기값에 예민하게 반응한다.
  3. 비구형 클러스터에서 잘 동작하지 못한다.

위의 문제점에 따른 해결책

  1. 여러 K값을 시도해본다.
    이것을 체크하기 위한 알고리즘 : 실루엣
    Silhouette: 모든 데이터 포인트가 클러스터에 얼마나 잘 분류되었는가를 수치화하는것.
    A : 한 데이터와 같은 클러스터내 다른 포인트 사이의 평균 거리
    B : 이 데이터와 이웃 클러스터 내 다른 포인트 사이의 평균거리
    A <<< B 일수록 좋은것.

  2. 다른 초기값과 함께 알고리즘을 반복 실행
    최고의 silhouette 점수를 가진 클러스터를 선택

  3. 다른 알고리즘을 사용한다.


문서 벡터화

  1. 정제
    Bag of Words 모델을 단어 순서가 있는 1차원 벡터로 변환하는 과정(단어순서는 아무렇게나)
  2. 전체 데이터에서 단어 카운트
  3. 전체 데이터에서 50개 미만인 단어는 제거
  4. 전체 데이터에서 50개 이상인 각 단어에 인덱스 할당
  5. 문서 내에서 인덱스가 있는 단어의 단어 카운트

마치며

인공지능&머신러닝을 공부하며 다시한번 느낀건데 파이썬 라이브러리들은 정말 대단한 것 같습니다. 파이썬이 왜 데이터 사이언스에서 중요해졌는지를 느끼게된 시간이었습니다.
이번 시간에선 고차원의 데이터를 시각화를 위해 저차원으로 줄이는 과정이 무척 인상적이었습니다. 간단히 라이브러리를 불러와서 적용하고, 처리한 데이터들을 조합해서 원하는 결과물을 만들어내는 과정을 보면 레고가 연상됩니다.
이는 데이터 사이언스라는 학문의 특성인것 같습니다.
개발자는 새로운 알고리즘을 만들거나 코드 하나하나 의미를 부여하며 더 나은 성능을 위해 노력한다면, 데이터 사이언티스트는 라이브러리들을 활용해 데이터를 분석하고 다양한 예측모델을 만들어내는 노력이 필요한 것 같습니다.
결국 원하는 것이 무엇이고, 목표를 위해 주어진 재료가 무엇이며, 어떻게 효율적으로 활용할 것인가 하는 문제를 끊임없이 생각하고, 더 나은 선택을 위해 지식과 경험을 넓혀 나가야겠다는 다짐을 했습니다.

Share 0 Comments