반응형

 

 

AWS Sagemaker Notebook에서 git 연결 문제(?)

 

 

위의 스샷처럼 Jupyter Lab의 왼쪽 메뉴 리스트 중 git 아이콘을 클릭해도 기존에 연결되었던 git 정보가 나오지 않는 형상이 발생하였습니다.

잘되던 것이었기 때문에 정말 이상했지요. 깜짝 놀랐는데 해결 방법은....

그냥 기다리면 됩니다. 그래도 안되면 페이지 새로고침 (컨크롤+r, 커멘드+r)을 실행해 보니 잘 연결되어 보입니다. 아마도 오랜 시간 동안 git 연결을 안 해서 그랬나 봅니다. 

이처럼 Sagemaker 주피터 노트북 에서는 연결 지연 발생으로 문제가 있는 것처럼 안 보이는 경우가 종종 있습니다.

기다리거나 새로고침 버튼이 있는 경우 새로고침 버튼을 없는 경우(저장 후) 페이지 새로고침을 해보세요~

 

 

반응형
반응형

Pandas Data Frame 출력시 일부가 짤려서(중간이 생략되서) 출력이 안되는 경우 해결 방법

pd.set_option() 함수를 이용해서 출력할 크기를 먼저 정해주면 됩니다.  아래와 같이 설정하면 되고, None 대신에 숫자를 넣어 설정해도 됩니다.

 

# python3.8
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(100,10))

print("옵션 설정 전: ", df)
pd.set_option("display.max_rows", None)
pd.set_option("display.max_columns", None)
pd.set_option("display.width", None)
pd.set_option("display.max_colwidth", None)

print("\n옵션 설정 후: ", df)

 

실행결과를 보면, 아래 이미지와 같이 옵션 설정 전에는 중간 내용이 생략되어서 보이지 않았는데 옵션을 None 으로 설정하고 나서는 모든 Row가 출력되는 것을 볼 수 있습니다.

반응형
반응형

 

 

Lecture 14 - Expectation-Maximization Algorithms | Stanford CS229: Machine Learning (Autumn 2018)

 

 

주요내용

  • Unsupervised Learning(비지도 학습)
    • K-means Clustering
    • Mixture of Gaussian: Gaussian Mixture Model (GMM)
    • EM (Expectation-Maximization)
    • Derivation of EM

 

비지도 학습은 이전까지 배웠던 지도학습과 다른 학습 방법입니다. 예를 들면 지도학습은 긍정 데이터와 부정 데이터들이 주어지고 이들을 잘 분류하는 선형 회귀 모델 같은 것을 만들어서 잘 분류하는 회귀선을 만드는 것이었습니다. 그러나 비지도 학습은 레이블이 없는 데이터들이 주어지고, 지도학습에서는 (x, y)가 주어졌지만 비지도 학습에서는 x 만 제공됩니다. 이런 데이터 셋은 {x(1), x(2), ....x(m)} 으로 주어진 x 데이터 m개를 표현할 수 있습니다. 

 

K-means Clustering

첫번째로 이야기할 비지도 학습은 클러스터링 입니다.  x 데이터가 주어지면 두개 또는 그 이상의 그룹으로 묶는 알고리즘 입니다. 가장 많이 사용되는 클러스터링은 시장 구분(Market Segmentation)입니다. 예를 들면 사용자들을 클러스터링하여 어떤 다른 시장으로 그룹핑할 수 있는지 알 수 있습니다. 고객의 나이, 성별, 교육, 지역 등을 가지고 클러스터링 하여 다른 그룹으로 만들 수 있습니다. 

위와 같은 데이터 셋이 제공되면 2개의 그룹으로 클러스터링 하기를 원할 것입니다. k-means의 경우 임의로 클러스터 갯수에 해당하는 위치를 선정하고 

 

데이터 별로 두개의 중심점 중에서 어느 중심점에 더 가까운지를 기준으로 클러스터(색)를 정합니다.

 

두 번째로는 파란색 점들의 평균을 구해서 새로운 중심점으로 정합니다.  

 

그리고는 새로 정해진 중심점을 기준으로 모든 점들에 대해서 다시 어느 중심점이 더 가까운지 비교하여 새로운 클러스터를 할당합니다.

 

그리고 다시 새롭게 할당된 클러스터의 중심점을 구합니다.

 

 이런 클러스터를 할당하고 새로운 중심점을 구하는 동작을 반복하다 보면 특정 지역에 중심점이 수렴하게 됩니다.

 

이런 알고리즘을 k-means 알고리즘이라고 합니다.

레이블 되지 않은 Data x 가 주어졌을 때 알고리즘은 아래와 같습니다. 1. 먼저 중심점을 초기화 합니다. k 갯수 만큼의 중심점의 초기 값을 정하는 것인데 보통 random 값으로 잡지 않고 실제 Data x 값들 중에서 k 개를 임으로 선택합니다. 

 

 

비용함수를 공식으로 적어보면 아래와 같습니다. c는 각 점들을 의미하고, u 뮤는 중심점을 의미 합니다. 각 x 값과 중심점과의 차이를 모두 더한 값으로 반복할 수록 작은 값으로 수렴하게 됩니다. 아주 많은 데이터를 가지고 이 알고리즘을 돌리다보면 아래의 그래프 처럼 수렴하기 전에라도 어느 정도 중심점이 변하지 않으면 종료하기도 합니다.

 

k-means 클러스터링과 관련해서 가장 많이 받는 질문은 어떻게 k 값을 정하는가? 입니다.  메트릭이 있기는 하지만 잘 쓰지는 않습니다. 보는 사람마다 다르게 판단할 수 있기 때문에 모호합니다.

2가 맞을 까요 4가 맞을까요?

오히려 목적에 맞게 k를 정하는 것을 권합니다. 예를 들어 마케팅을 위해 마켓 세그멘테이션이 필요하고 이를 위해 클러스터링을 한다고 했을때, 그룹핑을 4개로 할 수도 있고 100개로 도 할 수 있지만 업무적으로 프로모션을 위한 그룹 설계가 4개로 준비되어 있을 경우 4개로 그룹핑하여 제공해야 실무에서 마케팅에 사용할 수 있습니다.

k-means 알고리즘은 로컬 미니멈에 빠질 수 있습니다. 이 말은 초기 중심점 값을 어떻게 정하냐에 따라서 알고리즘을 실행할 때마다 다르게 그룹핑 될 수 있다는 의미입니다. 이런 로컬 미니멈에 빠지는 것을 방지하는 방법중 하나는 여러번 알고리즘을 실행 시키고 나서 비용함수의 값이 제일 작은 결과로 정해진 클러스터 결정을 선택하는 것입니다.

 

 

Density estimation

비행기 엔진을 만드는 공장에서 만들어진 엔진의 불량을 탐지하는 모델을 만든다고 생각해 보시죠. 시험 테스트 중에 나온 데이터인 진동 Vibration과 발열 Heat을 가지고 그래프를 만들었을 때 아래와 같이 그려진다고 하겠습니다. 이 때 녹색 점과 같은 데이터를 만들어낸 비행기 엔진의 경우 이상 탐지(Anomaly Detection)으로 탐지 할 수 있습니다.

 

그러나 아래와 같이 분포가 간단하지 않은 경우 그룹핑을 하기 매우 어렵습니다. 이럴때 아래쪽에 있는 두개의 타원형 형태의 가우시안 분포와 이 타원형의 왼쪽에 연결된 또 다른 두개의 타원형 형태의 가우시안 분포, 즉 2개의 가우시안 분포로 전체 분포를 설명할 수 있습니다.

 

1차원 가우시안 분포를 예를 들어 보겠습니다. 아래와 같이 X 데이터가 주어졌을 때 이것은 2개의 가우시안 분포에서 왔을 수 있습니다. 그리고 이번 예시의 경우 두 개의 분포를 연결하면 중앙 부분은 확률이 낮아지는 부분으로 구성된 하나의 분포 곡선을 그릴 수 있습니다. (아래쪽 쌍봉 곡선)

 

Mixture of Gaussians Model: Gaussian Mixture Model (GMM)

이러한 방법으로 여러개의 다변량 분포가 혼합되어 있는 경우 어느 분포에서 추출될 가능성이 높은지를 알 수 있습니다.

latent 는 hidden 또는 unobserved의 의미 입니다. z는 랜덤 변수값이고 다중 분포일때 z ㅌ {1, ... k} , x(i), z(i)는 결합 분포를 가지고 있습니다. 이 것은 P(x(i), z(i)) = P(x(i) | z(i)) P(z(i)) 로 계산됩니다. 

일반적으로 GDA Gaussian Distribution Analysis 는 2개의 분포, 즉 베르누이 분포를 말하지만 여기에서는 k개의 분포를 가지는 다형성의 파이를 갖습니다. 이 것이 첫번째로 GDA와 다른 것이고 두번째는 j분포 갯수의 차이 입니다. z(i)가 j번째 가우시안 분포에서 나왔을때 x(i)가 나올 확률은 평균이 uj 이고 분산이 시그마j 인 정규분포에서 나올 확률과 같습니다.  GDA와 가장 큰 차이점은 GDA는 데이터 y(i)가 관측된 값으로 주어진다는 것입니다. 

 

 

만약 우리가 z(i)의 값들을 알고 있다면 MLE를 사용할 수 있습니다. 그때 가능도는 아래와 같이 구할 수 있습니다.

 

 

EM (Expectation-Maximization)

EM은 관측되지 않는 잠재변수에 의존하는 확률 모델에서 최대가능도(maximum likelihood)나 최대사후확률(maximum a posteriori, 약자 MAP)을 갖는 모수의 추정값을 찾는 반복적인 알고리즘을 말합니다. (위키피디아)

첫번째 E-step은 아래와 같습니다. 우리는 실제 z(i) 값을 모르기 때문에 주어진 값들을 이용해서 기대값을 찾는 단계입니다. 여기서 z(i)란 x(i)가 뽑힐 수 있는 특정 정규분포 j를 말합니다.

 

두번째 단계는 M-step 입니다. 앞에서 찾은 기대값을 최대로하는 모수 값을 찾습니다.

이러한 단계를 거처 기대값을 최대로 하는, 여러개의 분포가 합쳐지는 하나의 분포 곡선을 만들 수 있습니다. 이러한 곡선은 아래처럼 다양합니다.  이로써 찾은 함수를 통해 입력값 x를  실행했을때 결과 확률값이 특정 기준(입실론) 보다 크거나 같으면 정상적인 데이터이고 확률값이 작으면 이상탐지(Anomaly)로 판단할 수 있습니다.

 

 

 

 

 

Derivation of EM

이후 아래는 EM의 공식을 유도하는 내용입니다.

Jensen's inequality

함수 f를 아래로 볼록한 함수(Convex function)이라고 하고 x를 임의의 값이라고 할때, 공식 f(EX) <= E[f(x)] 를 만족합니다.

 

 

 

 

우리는 젠슨의 불균형 공식을 위로 볼록한 Concave 함수로 사용합니다. Concave 함수는 Convex 함수와 위/아래가 바뀐 함수이지요. 그럴 경우 위에서 설명한 모든 부등식을 반대로 바꾸면 됩니다.

임의의 녹색 theta세타 값을 먼저 설정합니다. 이 값에 해당하는 함수곡선(녹색)을 만들고 이 함수와 목표 함수(검정색)가 만나는 점을 찾고 이 녹색 함수의 꼭지점을 찾습니다. 그리고 이 꼭지점으로 이동합니다. 이 꼭지점에 해당하는 theta값으로 변경 후 다시 함수를 찾습니다. 이러한 내용을 반복하면 검정색의 목표 함수의 지역 최대값(꼭지점)에 점점 가깝게 됩니다. 그러나 아래 그림의 오른쪽 처럼 목표함수가 여러개의 지역 최대값을 가지고 있는 경우 전체 최대값을 찾지 못할 수도 있습니다.

 

아래는 이러한 E, M 단계를 공식으로 풀이 증명하는 내용입니다.

 

위 공식의 변형에 필요한 기본 전제 공식은 아래와 같습니다.

 

 

 

 

 

 

아래는 강의 동영상 링크 입니다.

https://www.youtube.com/watch?v=rVfZHWTwXSA&list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU&index=14 

 

 

반응형
반응형

 

MRR: Mean reciprocal rank

 
Mean reciprocal rank (MRR) 은 랭킹 모델을 평가하기 위한 가장 간단한 방법중 하나 입니다. MRR은 질의(Q)에 대해 가장 적절한 아이템의 역순위 평균입니다. 역순위란 1을 제안된 리스트에서 적절한 아이템이 나타난 위치의 숫자로 나눈 것을 말합니다. 예를 보시면 쉽게 이해하실 수 있습니다.
Query Proposed Results Correct response Rank Reciprocal rank
cat catten, cati, cats cats 3 1/3
torus torii, tori, toruses tori 2 1/2
virus viruses, virii, viri viruses 1 1
 
Query 는 질의어/검색어이고, Proposed Results는 검색엔진의 결과로 제안된 내용입니다. Correc response는 질의어 입력시 우리가 원하는 제안 내용이고요, Rank는 결과에서 제안 내용이 위치한 순위 입니다. Reciprocal rank 는 1 나누기 Rank의 값 입니다. Mean Reciprocal rank 는 이러한 Reciprocal rank 를 평균한 값입니다. 이 내용을 공식으로 정리하면 아래와 같습니다.
 
 
MRR =  1/|Q|   Sigma i=1 to |Q|   1/rank i
 
따라서, 위 예시에 대한 MRR을 구해보면 아래와 같습니다.

 

MRR= 1/3*(1/2+1/3+1/1)= 11/18 = 0.61111
 
 
MRR의 한계중 하나는 검색 결과 아이템들 중에 하나의 순위만 고려하고 다른 것의 순위들은 무시한다는 것입니다. 따라서, 웹페이지에서 검색 결과를 중요도 순으로 노출하는 것에 대한 성능을 측정하고자 할 경우 MRR은 좋은 지표가 아닙니다. 여러 개의 위치와 중요성을 고려하지 못하기 때문이지요.

 

 

Precision at k

 
Precision at k (P@k) 는 많이 사용되는 또 다른 지표중 하나 입니다. 이 지표는 상위 k개의 문서중에서 연관된 문서의 수로 정의 됩니다.
 
예를 들면, 구글에서 “손 소독제” 를 검색한다고 생각해보겠습니다. 검색 결과 처음 페이지에 나온 10개 문서중에서 8개가 '손 소독제'와 연관된 문서라면 Precision@10(P@10)은 8/10 = 0.8 입니다. 
여러 질의들 Q에 대한 Precision@k를 찾기 위해서는 Q에 있는 각 질문들에 대한 P@k의 평균 값으로 계산할 수 있습니다.

 

P@k는 몇가지 한계점이 있습니다.
가장 중요한 것은 상위 k개 연관된 문서들의 위치를 고려하지 못한다는 것 입니다. 이것은 매우 중요할 수 있습니다. 첫페이지에서 첫번째 문서가 연관된 문서일 경우와 첫페이지에서 마지막 문서가 연관된 문서일 경우는 완전히 다를 수 있습니다. (왜냐하면 첫페이지의 마지막 문서는 실제로 사용자가 보지 못할 수 있기 때문이지요.)  반면에 상위 k개의 결과들이 연관된 문서인지 아닌지만 검토하면 되기 때문에 모델을 쉽게 평가할 수 있습니다.
매우 비슷한 방법으로 정의되면서, 많이 사용되는 평가지표가 바로 recall@k입니다.

 

AP@k

AP@k(Average Precision at k). 앞에서 말씀드린 것처럼 Precision@K에서는 순서를 고려하지 않은 단점이 있었습니다. AP@K는 위치를 고려한 평가 지표입니다. 이말은 추천 리스트중에 높은 위치에 추천한 항목이 더 관심있는 항목으로 해야 좋다라는 가정에서 평가하는 방법입니다. 일반적으로 가정이 맞는 상황이지요. 공식은 아래와 같습니다.  rel(i)는 선호 여부로 0 또는 1입니다. 

 

 

Recall@k

Recall@k(R@k)는 검색 결과로 가져온 k개의 문서들 중에서 얼마나 많은 (적합한) 관련 문서가 있는 가로 계산할 수 있습니다. 즉, Recall@10의 경우, 가져온 10개의 문서중에서 8개가 관련된 문서이고 전체 관련 문서수가 9개인 경우 Recall@10은 8/9입니다.

Precision@k의 경우 가져온 문서 중에서 얼마나 정확한 문서가 많은 가를 중심으로 판단하는 지표라면, Recall@k는 가져와야할 문서 중에서 얼마나 많은 문서를 가져왔는가를 중심으로 판단하는 지표 입니다. 둘다 단점으로는 가져온 위치/순위를 고려하지 못한다는 것 입니다.

 

 

 

nDCG(CG/DCG/nDCG)

 
nDCG는 랭킹 시스템의 학습을 평가하기위해 가장 많이 사용되는 평가지표 입니다. 이전의 평가 지표들과는 달리 nDCG는 문서의 순서와 관련성의 중요성을 고려한 지표입니다. 즉, 추천 리스트의 위쪽에 관련성이 높은 문서가 위치할 수록 높은 값을 갖습니다.
nDCG의 공식적인 정의를 말하기 전에 먼저 두가지 연관 지표에 대해서 소개해 드리겠습니다. 바로 Cumulative Gain (CG) 과  Discounted Cumulative Gain (DCG) 입니다.
Cumulative Gain (CG) 이란 질의 결과로 가져온 각 문서의 연관성 점수를 모두 합친 것을 말합니다.  아래와 같이 정의될 수 있습니다.
 
여기에서는 각 문서의 연관성 점수(보통 상수)는 주어진다고 가정합니다.

 

 

Discounted Cumulative Gain (DCG) 는 CG에 가중치가 부여된 버전입니다. 결과의 위치에 따른 연관성 점수를 적절하게 변환하고자 로그함수를 사용합니다. 이것은 시스템의 성능을 평가할때 상당히 유용한데, 왜냐하면 처음 몇개의 문서들이 좀더 높은 가중치를 갖게되기 때문입니다. 검색 결과의 상위에 노출되는 결과 일수록 더 높은 가중치를 준다는 말은 검색 결과를 평가하는 입장에서 보면 맞는 말인 것 같습니다. DCG는 아래와 같이 정의 됩니다.
 
분모에 로그가 있어서 순서(i)가 커질 수록(추천 리스트의 아래에 위치할 수록) 분모가 커지면 DCG값은 작아집니다. 숫자가 많이 커져도 분모에 로그를 취하기 때문에 단순히 위치로 나눈 값보다는 적당히 커진 분모값이 됩니다.
또 다른 버전도 있습니다.

 

 
Normalized Discounted Cumulative Gain (NDCG) 는 실제 어플리케이션 평가에 더 적합하도록 DCG를 향상시켜서 고안된 것입니다. 가져온 문서들의 집합은 질의나 시스템에 따라 매우 다르기 때문에 nDCG는 DCG의 졍규화된 버전을 이용해서 성능을 평가합니다. 이상적인 시스템의 DCG로 평가하려는 시스템의 DCG를 나누는 것 입니다. 다른 말로 하면, 관련성을 기준으로 리스트 결과를 정렬하고, 해당 위치에서 이상적인 시스템에서 얻어지는 가장 좋은 DCG를 가지고 정규화하는(나누는) 것입니다.
여기서 IDCG는 “ ideal discounted cumulative gain”이고, 아래와 같이 정의합니다.

 

 
nDCG는 인기 많은 평가지표 입니다. 그러나 한계성도 있습니다. 주요 한계중 하나는 검색 결과 중에서 잘못된(연관성 없는) 문서를 가져온 것에 대한 패널티가 없다는 것 입니다. 이 말은 몇 개의 괜찮은 결과를 만드는 질의의 성능을 측정하는 것에 적합하지 않습니다. 특히, 검색 결과로 처음에 나오는 몇 개에만 관심이 있는 경우에는 더욱 적합하지 않습니다.

 

 

참고 문서

 
반응형

+ Recent posts