인공지능/자연어 처리

자연어 처리 - 머신러닝 기초, 나이브, k알고리즘, 앙상블,

이게될까 2024. 1. 4. 19:04
728x90
728x90

Bayes Classifier

Logistic regression은 P(y|x)를 바로 근사하도록 학습
bayes classifier는 Bayes' theorem을 활용하여 분류
P(y|x) = p(x|y)P(y) / p(x)
p(x) = sum{p(x,y)} = sum {p(x|y)P(y)} 항상 같은 값이다.
많은 경우 p(x)를 계산하기는 어렵다. 하지만 p(x)를 계산하지 않아도 된다.

이런 형식으로 분류하여 p(x)를 구하지 않아도 된다.

독립 변수 k가 늘어날수록 차원의 저주가 발생 = 데이터의 요구량 폭증
- k개의 조합의 공간에서 분포를 충분한 근사하기에 요구되는 데이터양이 지수적으로 증가한다. = 2^k개의 확률이 필요하게 된다.
독립 변수 간의 종속성을 제거한다면 차원의 저주를 없앨 수 있다. => Naive Bayes Classifier  => k+1개의 확률 분포만 알면 된다.

확률 분포 구하는 법
Discrete 한 변수의 확률 분포 구하는 법 = counting
Continuous 한 변수의 확률 분포 구하는 방법
- Discretize = bucketing을 해서 counting 할 수 있게 변환
- probability density estimation = normal distribution을 가정

k-최근접 이웃 분류

여태까지는 결정 경계를 그려서 분류를 했다.

K-nearest neighbor classifier
입력된 인풋 샘플과 학습 샘플 중 거리가 가장 가까운 샘플들을 찾아 그 부류를 결정하는 분류기

parameteric model
파라미터 수가 고정된 모델
근사하고자 하는 확률 분포에 대한 정보가 모델 내에 저장되어 있다.
정규 분포를 가

non parametric model
모델의 파라미터 수가 학습 데이터에 비례해서 증가하는 모델
데이터가 특정한 분포를 따른다고 가정하지 않는다.

Parzen window
입력 변수 x값의 주위의 h 크기의 구간 안에 샘플의 개수를 구하고 전체 개수의 크기와 h의 넓이로 나누어 x의 확률 밀도를 구하는 방법
p(x) = kx/(h^d*N)
단점 : 차원의 저주에 자유롭지 못하고, 1차원에서 N개의 샘플이 필요하다면 K차원에서는 N^K개 이상 샘플이 있어야 데이터의 밀도를 유지할 수 있다.

K-nearest neighbor estimation
k를 고정시키고 x에 따라 h가 변한다.
한계 : 높은 계산량이 필요하다. O(kdN), 높은 시간 복잡도를 해결하기 위한 알고리즘들이 있다.(FAISS, ANNOY, ScaNN)
classifier : x에 대한 k개의 이웃 샘플들을 찾은 다음, 찾은 k개의 이웃 부류 중 가장 많은 부류를 x의 부류로 결정한다.
피쳐들 간의 거리를 선정하는 방법 : 유클리드, 코사인
feature에 대해 scaling이 중요하다.

k-means 클러스터링

유사한 친구들을 묶어준다. label이 달려있지 않다.

k개의 점을 랜덤 하게 찍는다.
각각 샘플들은 가장 가까운 점에 할당된다.
그리고 그 할당된 샘플들의 평균 위치에 점을 이동시킨다.
그 후 과정을 계속 반복하면 된다.

알고리즘 수도 코드

k-means의 에러 측정은 그 클러스터에 할당된 샘플 간의 거리의 합으로 정의할 수 있다.

k-means error 구하기 이 것을 사용해 gradient descent를 사용 가능

한계
초기값에 민감, local minimun에 빠지기 쉽다
outlier에 민감

앙상블 기법

하나의 모델이 모든 문제를 잘 풀 수 없다. = 모든 모델을 조합해서 사용한다.

앙상블 생성 = 여러 개의 분류기를 생성하는 작업
생성 방법 = 훈련 집합을 재 샘플링하는 기법(bagging, boosting), 서로 다른 분류 알고리즘을 사용하는 기법, 특징 벡터의 부분 공간을 사용하는 기법

bagging

각각 분류기들이 서로 독립적이다.

Boosting
이전 루프에서 만들어진 분류기가 별로일 경우 가중치를 부여하여 다음 분류기를 학습할 때 못했던 부분을 더 잘 분류하게 만든다.

boosting - Adaboost

앙상블 결합 방법
분류 표지(class label), 부류 확률(class probability), 부류 순위 (class ranking)

부류 표지
한 모델이 출력으로 선택한 최종 부류
부류 표지 벡터 ex) (0,0,0,1,0) 이렇게 4번째 부류를 표현하는 것

다수 투표
분류기들이 가장 많이 선택한 부류를 최종 부류로 결정

가중 다수 투표
분류기들의 신뢰도 또는 형향력을 고려하여 가중 다수 투표하여 최종 부류를 결정

부류 확률
한 모델이 각 부류마다 출력하는 출력 확률
부류 확률 벡터 ex(0,0.1,0.3,0,0.6) 이렇게 확률을 벡터 형식으로 표현
가중합, 합, 곱, 최대 확률 등 다양하게 구할 수 있다.

부류 순위
부류에 대한 순위를 나타낸 것
부류 순위 백터 : 부류 순위에 대한 벡터 형식 표현 (1,2,3,4) -> 총 부류 개수 - 요소값(3,2,1,0)으로 표현 or 요소값 / 총 부류 개수(4,3,2,1)로 표현

728x90