Home

[머신러닝] 추천 시스템과 SVD

SVD를 다시 떠올려보자 $\ $SVD를 이용하면, 우리에게 주어진 어떤 행렬 $A$를 총 세개의 행렬로 분해할 수 있다. $$A = U\sum V^T$$ 이렇게 분해된 총 세개의 행렬을 다시 곱하면 당연히도 원래 행렬 \(A\)를 얻게된다. SVD 행렬 분해는 일반적인 non-sparse 행렬에서뿐만 아니라 real data 들이 공통적으로 보여주는 spare 형태 행렬에서도 잘 작동한다. 하지만, 영화 평점을 예측하는 것과 같은 explicit dataset이 아닌, implicit dataset 에서의 추천에서는 잘 작동하지 않을 수 있다. 잘 작동한다? 라는 말은, 분해된 세개의 행렬을 다시 곱해서...

Read more

[머신러닝] 추천 시스템 Diversity 측정 정리

추천 시스템에서의 다양성 $ $MoiveLens와 같은 데이터셋에 추천 알고리즘을 적용한 추천 시스템을 구축할 때에, 얼마나 이 시스템이 유저의 평점을 정확히 예측하는 지는 매우 중요한 평가 척도이다. 하지만, 이러한 예측 정확도 못지 않게, 실제 많은 e-commerce 환경에서는 추천 시스템의 다양성 또한 고려해야 한다. 너무 편협하게 소수의 컨텐츠만 반복적으로 유저에게 추천하면, 유저 입장에서는 쉽게 지루해질 수 있다. 또한 시스템의 관점에서는 새로운 상품을 추천하지 못하고, 유저들이 충분히 매력을 느낄만한 아직 유저들에 의해 발굴되지 못한 상품들에 대해서도 유저에게 제시해 줄 수 없다. e-commerce ...

Read more

[딥러닝] Keras 함수형 API

이 포스팅은 케라스 창시자에게 배우는 딥러닝 Chapter 7 의 내용 중 일부를 발췌하여 정리한 것입니다. 함수형 API? $\ $케라스를 사용할 때, Sequential() 모델을 이용해서 빠르고 효율적으로 신경망을 구축할 수 있다. 하지만, Sequential() 모델만을 사용해서는 조금 더 복잡한 그래프 형태를 취하는 신경망을 모델링할 수 없다. Sequential() 만을 이용하면 단일 데이터 입력 소스로, 단일 출력 소스를 내보낼 수 밖에 없다. 아래 그림처럼 Sequential API는 순서대로 층을 쌓아 만들기 때문에, 다양한 입력 소스에서의 데이터를 다양한 출력으로 내보내기 힘들다. 반면에, 함수형...

Read more

[딥러닝] Keras를 활용한 간단한 NN implementation

Keras로 간단한 NN 모델 구축하기 $\ $해당 포스팅은 케라스 창시자에게 배우는 딥러닝, 프랑소, 숄레, 박해선 역 책을 읽고 개인적으로 정리한 것입니다. IMDB movie set Classification Hello Data Keras의 데이터셋 모듈에서 간단하게 데이터를 불러오자. 트레이닝 데이터셋(X), 트레이닝 라벨값(y), 테스트 데이터셋(X), 테스트 라벨값(y)들을 불러온다. 가장 빈번하게 출현하는 단어들 10000개만 데이터에 포함하도록 제한을 걸자. imdb 데이터 객체는 단어와 인덱스를 딕셔너리로 연결한 값들을 제공하며, 이 값들을 이용해 데이터 안에 정수로 표현된 인덱스들을 영화 이름으로...

Read more

[요즈] 음

일기 $\ $하루 정도는 블로그에 일기를 쓰자. 우선 생각을 정리할 필요가 있다. 요즘 $ $ 블로그를 시작한지 얼마 안됐지만, 요즘 들어 포스팅 빈도가 눈에 띄게 줄었다. 사실 이전에 1일 1포스팅은 말도 안되는 목표였을 수도 있다. 3일 1포스팅 정도가 적당할 것 같다. 최근에 공부를 게을리 했던 것은 아니고, 공부에 투자하는 시간은 늘었으나 조금 더 다양한 주제에 대해 동시다발적으로 공부를 하다보니 완성해서 업로드하는 포스팅 수가 적어졌다. 더욱 많은 것을 공부해야한다. 특히 추천시스템 쪽 공부를 시작하면서 막대한 정보를 받아들이고 있다. 선형대수학, 베이지안 추론, 알고리즘, 딥러닝 등등 받아들여야 할 것들...

Read more

[머신러닝] Gaussian Processes

Gaussian Process (GP) $\ $일반적인 머신러닝 알고리즘들은 트레이닝 데이터 셋이 주어졌을 때, 해당 데이터들에 최고로 잘 맞는 (“best fit”) 하나의 함수를 찾는 것을 목표로 한다. 이 함수를 이용해서 미래의 데이터 입력 값이 들어오면 출력 값에 대한 함수 값을 계산할 수 있다. 지금까지의 이러한 방법에서 조금은 접근이 다를 수 있는 Bayesian methods 에 대해 살펴보자. 전통적인 학습 알고리즘들과는 다르게, 베이지안 알고리즘은 최적의 함수 fitting을 찾는 것으로 볼 수는 없다. 이 방법론은 모델들에 걸쳐 존재하는 사후 분포를 계산한다. 이러한 분포들은 모 측정에 대한 우리...

Read more

[선형대수학] Linear Transformation (선형변환)

Linear Transformation $\ $고등학교에서 행렬과 행렬 간의 곱을 구하는 방법은 우리가 이미 배워서 익히 안다. 또한, 단위 벡터를 활용해서 특정 공간에서 특정 벡터를 단위 벡터만을 활용해서 표현할 수 있음도 알고 있다. 벡터의 개념과 행렬 표현식을 조합해서 사용하는 법에 대해 알아보자. $\ $행렬들의 곱을 계산하는 방법은 이미 우리가 알고 있지만, 해당 연산이 의미하는 바가 기하학적으로 이해하기 위해서는 Linear Transformation을 이해할 필요가 있다. 각 행렬의 column space을 basis vector로 이해할 때, 이 벡터들의 선형적 조합의 결과물은 해당 공간에서 Line...

Read more

[선형대수학] Cofactor expansion

Determinant $\ $ \(2 \times 2\) 행렬에 있어서, 해당 행렬의 determinant가 0이 아닐 때에 해당 행렬의 역행렬이 존재한다. 이러한 determinant와 역행렬 존재유무의 관계는 더 큰 사이즈의 행렬에도 당연히 성립한다. \(\begin{bmatrix} a & b \\ c & d \end{bmatrix}\) 행렬의 determinant는 \(ad - bc\)로 쉽게 계산할 수 있음을 알고 있다. 하지만, 행렬의 사이즈가 커감에 따라 determinant 계산이 점점 쉽지 않음을 알 수 있는데, 따라서 다양한 determinant 방법들이 존재하며 그에 대해 알아보자....

Read more