728x90
Python
8

Content-based 추천 시스템 구현 (2)

이전 포스트 Content-based 추천 시스템 구현 (1)에서 Content-based 방식의 추천 알고리즘에대해 알아보고 간단하게 구현해보았다. 이때 상품의 카테고리를 기준으로 one-hot encoding한 벡터값을 활용하여 코사인 유사도를 계산하였는데, 이러한 방식은 단순히 많이 구매한 카테고리에 속한 상품을 추천해주는 것으로 밖에 안된다. 이러면 굳이 계산할 필요없이 카테고리 별로 구매한 횟수만 저장해놓고 가장 많이 구매한 카테고리의 상품들을 추천해줄 수 있다. 또한 가장 많이 구매한 카테고리에만 편향(Bias)되어 다른 카테고리에 속한 상품은 추천 대상에서 제외되는 문제가 발생하게 된다.상품 프로필 구성위와 같은 문제를 해결하기위해 카테고리 뿐만 아니라 상품 등록시 작성한 제목과 본문도 활용..

Python 2024.08.17

Content-based 추천 시스템 구현 (1)

휴리스틱 알고리즘으로 추천 시스템을 구현하는 방법으로 Content-based와 Collaborative Filtering이 있다. 이 두 가지 방법 중 Content-based를 적용할 것이고, 이에 대해 먼저 간단히 살펴보겠다.Content-based 추천Content-based 추천 방법은 각 사용자가 구매/만족했던 상품과 유사한 것을 추천하는 방법이다. 동작 순서는 다음과 같다.상품 프로필 수집사용자 프로필 구성사용자 프로필과 다른 상품들의 상품 프로필 매칭사용자에게 상품 추천이제 하나씩 순서대로 어떤 것을 하는지 간단하게 알아보겠다.1. 상품 프로필 수집상품 프로필이란, 상품의 특성을 나열한 벡터이다. 이를 Feature라고도 부른다. 예를 들어, 영화의 프로필의 특성을 나열한 벡터라고 한다면 ..

Python 2024.08.14

[PEP8] Comments

comments는 완벽한 문장이어야한다. 첫 번째 문자는 대문자 각 문장은 마침표로 끝난다. 여러 문장으로 작성할 때는 마침표 뒤에 공백을 두 개 사용 (마지막 문장 제외) 웬만하면 영어로 작성 Block Comments 뒤에 작성되는 코드에 해당하는 comments이고 들여쓰기도 해당 코드와 동일하게 적용 #과 공백으로 시작 ('# ') Inline Comments inline comments는 많이 사용하지 말 것 statement와 같은 줄에 사용 statement와 두 개 이상의 공백으로 분리되며 #과 공백으로 시작 해당 statement가 주석없이도 분명하다면 inline comments는 불필요 x = x + 1 # Increment x 때때로 satement가 다른 의미를 가지고 있다면 다음..

Python 2022.02.26

[PEP8] When to use trailing commas

하나의 요소로된 튜플을 만들때 마지막에 comma를 추가하고 괄호로 감싸는 것을 추천 # Correct: FILES = ('setup.cfg',) # Wrong: FILES = 'setup.cfg', trailing comma는 나중에 list, arguments, imported items 등 확장될 것으로 예상될 때 유용 각 line에 trailing comma를 추가하고 괄호는 다음 줄에 닫는다. trailing comma와 같은 줄에 괄호를 닫는 것은 의미가 없음 # Correct: FILES = [ 'setup.cfg', 'tox.ini', ] initialize(FILES, error=True, ) # Wrong: FILES = ['setup.cfg', 'tox.ini',] initialize..

Python 2022.02.25

[PEP8] Whitespace in Expressions and Statements

Pet Peeves 대괄호, 중괄호, 소괄호 안의 공백 # Correct: spam(ham[1], {eggs: 2}) # Wrong: spam( ham[ 1 ], { eggs: 2 } ) 마지막 쉼표와 닫는 괄호 사이의 공백 # Correct: foo = (0,) # Wrong: bar = (0, ) 콤마, 세미클론, 콜론 앞의 공백 # Correct: if x == 4: print(x, y); x, y = y, x # Wrong: if x == 4 : print(x , y) ; x , y = y , x 슬라이스에서는 콜론의 양쪽 간격이 동일(단, 슬라이스의 parameter가 생략되면 공백도 생략) # Correct: ham[1:9], ham[1:9:3], ham[:9:3], ham[1::3], ham..

Python 2022.02.07

[PEP8] String Quotes

python에서 작은 따옴표 문자열과 큰 따옴표 문자열은 동일 문자열에 작은 따옴표 또는 큰 따옴표가 포함되는 경우 다른 하나를 사용하여 백슬래시 사용을 피해야한다. # https://www.kite.com/python/answers/how-to-put-quotes-in-a-string-in-python # -- 1 print('"abc"') # -- 2 print("'abc'") # -- 3 print("""a'b"c""") # -- backslash를 사용하는 경우 print("\"abc\"") print('\'abc\'') 삼중 따옴표로 묶인 문자열의 경우 항상 큰 따옴표를 사용 [reference] https://www.python.org/dev/peps/pep-0008/#string-quotes

Python 2022.02.07

[PEP8] Code Lay-out

들여쓰기 들여쓰기는 4개의 공백을 사용 # 올바른 예 # 괄호 기호에 맞춰 정렬 foo = long_function_name(var_one, var_two, var_three, var_four) # arguments를 구별하기 위해 들여쓰기를 추가 def long_function_name( var_one, var_two, var_three, var_four): print(var_one) # 다음과 같은 들여쓰기는 Hanging indent라고 부르며 level이 추가되어야 함 foo = long_function_name( var_one, var_two, var_three, var_four) # 잘못된 예 # vertical로 정렬이 안되어있으면 첫째 줄에 arguments를 작성하면 안됨 foo = lo..

Python 2022.02.04

한 번 사용하고 버려지는 Iterator 객체

map, reversed와 같은 함수에서 반환하는 Iterator 객체는 한 번 사용되면 지워진다. 즉, 일회성이라고 할 수 있다. 우선 map을 사용해서 확인해보자. arr = map(int, input().split()) max_ = max(list(arr)) print(list(arr)) 위 코드를 보면 arr에 입력한 숫자들을 int형으로 변환한 iterator 객체를 저장하고 max_에 최댓값을 저장한다는 것을 알 수 있다. 그리고 arr를 리스트로 출력하면 빈 리스트([])가 나온다. 왜일까?? 차례대로 확인해보자. arr에 iterator가 저장된다. max_에 arr안에 있는 숫자들 중 최댓값이 저장된다. 이때 arr에 저장된 iterator 객체가 사용되었다고 생각하자. arr를 리스트로..

Python 2021.06.13
728x90