반응형

이번 포스팅은 SVD를 이용한 추천시스템 2번째 글입니다. 저는 Oracle과 연동하여 사용하였습니다.

SVD에 대한 이해가 필요하다면 이전 글을 보고 와주세요 ↓↓↓↓↓

 

 

[Python] SVD를 이용한 추천 시스템 만들기 - 1

안녕하세요 이번엔 SVD를 이용한 추천 시스템을 소개해 보려고 합니다. 그전에 SVD에 대해 간략히 소개해드리겠습니다. https://angeloyeo.github.io/2019/08/01/SVD.html 특이값 분해(SVD) - 공돌이의 수학정리

maxtime1004.tistory.com

 

저는 아래의의 깃허브 내용을 토대로 jupyter notebook으로 진행하였고 저에게 맞춰서 조금씩 변형하였습니다.

원본 코드를 보고 싶으시면 아래의 주소로 가주세요 ↓↓↓↓↓

 

lsjsj92/recommender_system_with_Python

recommender system tutorial with Python. Contribute to lsjsj92/recommender_system_with_Python development by creating an account on GitHub.

github.com

 

 

저의 본 포스팅을 보시고 전체 코드를 원하신다면 밑의 github 주소로 들어가서 확인하세요↓↓↓↓↓

 

dpwls64/profit_recommand

Contribute to dpwls64/profit_recommand development by creating an account on GitHub.

github.com

 

* 참고

- 테스트용으로 만든거라 데이터가 보기 좋은 형태가 아닐 수도 있는데 이점은 양해부탁드려요 ㅜㅜ

- 필요한 테이블은 2개인데 하나는 강의(강의번호, 강의제목) 데이터가 들어있는 테이블,

   하나는 강의에 대한 평점(사용자아이디, 강의번호, 평점) 데이터가 들어있는 테이블이 필요합니다.

- 저의 목적은 강의 하나당 추천 강좌 5개의 데이터를 DB로 넣어서 활용하려고 합니다.

  최종 테이블에는 이러한 형태로 들어갈 것 입니다. 방법을 이해하셔서 본인에게 맞게 변경하여 사용하세요.

 

* SVD 추천 시스템 

 

1. 필요한 패키지를 import 합니다.

 

2. 현재 DB에 등록되어 있는 강의 테이블을 가져옵니다. 필요에 따라 안의 sql문은 바꿔주세요.

 

3. 같은 방식으로 평점 테이블도 가져옵니다.

 

4.  강의 번호를 기준으로 두 테이블을 합칩니다.

 

5. SVD 를 수행하기 위한 데이터 형태를 맞춰줍니다.

 

6. 다음과 같이 특이값 분해를 진행합니다.

 

7. 그래프를 그려봅니다.

 

8. 강의 번호와 그에 따른 추천 강의 5개를 추출합니다.

 

9. 형태에 맞게 데이터를 추가 합니다.

반응형
반응형

안녕하세요 이번엔 SVD를 이용한 추천 시스템을 소개해 보려고 합니다.

그전에 SVD에 대해 간략히 소개해드리겠습니다.

 

 

특이값 분해(SVD) - 공돌이의 수학정리노트

 

angeloyeo.github.io

 

저는 이분의 글을 참고하여 개념을 익혔지만 사실 수학적인 부분은 깊게 이해하지 못했기 때문에 추천시스템을 활용하기 위한 정도만 학습하였고, 제 이해를 바탕으로 글을 작성하는 것이기 때문에 깊은 이해를 원하시면 위의 링크나 따로 검색을 이용해 주세요!!

 

 

* 배경 지식 

 

먼저 고유값 분해(EVD)가 있습니다. 고유값 분해는 정방행렬에 대해서만 적용 가능하여 한계가 존재합니다.

따라서 정방 행렬이 아닌 m x n 행렬에 적용될 수 있게 일반화된 EVD가 SVD 입니다.

즉, 특이값 분해(Singular Value Decomposition, SVD)의 정의는 임의의 m x n 차원의 행렬 A에 대하여 행렬을 분해할 수 있는 방법 중에 하나입니다.

 

 

* 특이값 분해의 기하학적 의미 

 

직교하는 벡터 집합에 대하여, 선형 변환 후에 그 크기는 변하지만 여전히 직교할 수 있게되는 그 직교 집합은 무엇인가?

그리고 선형 변환 후의 결과는 무엇인가?

 

 

* 특이값 분해의 활용 

 

특이값 분해는 분해되는 과정보다 분해된 행렬을 다시 조합하는 과정에서 그 응용력이 빛을 발합니다.

A행렬을 특이값 p개 만을 이용해 A' 라는 행렬로 부분복원이 가능합니다.

특이값의 크기에 따라 A의 정보량이 결정되기 때문에 값이 큰 몇개의 특이값들을 가지고도 충분히 유용한 정보를 유지할 수 있습니다.

 

 

특이값 분해를 통해  부분 복원을 하여 사진을 더욱 선명하게 만들 수도 있습니다.

 

SVD를 이용한 실습 예제를 보고 싶으시면 다음 글을 클릭해주세요↓↓↓↓↓

 

[Python] SVD를 이용한 추천시스템 만들기 - 2

이번 포스팅은 SVD를 이용한 추천시스템 2번째 글입니다. 저는 Oracle과 연동하여 사용하였습니다. SVD에 대한 이해가 필요하다면 이전 글을 보고 와주세요 ↓↓↓↓↓ https://maxtime1004.tistory.com/90 [Py

maxtime1004.tistory.com

 

반응형

+ Recent posts