๋ฉ๋ด๋ช ์ ๋ฐ์ผ๋ฉด ์นดํ ๊ณ ๋ฆฌ ์ ์ฌ๋์ ๋ฐ๋ผ ์์์ ์ถ์ฒํด ์ฃผ๊ณ , ์ฌ์ฉ์์ ํ๊ฐ๋ฅผ ๋ฐ์ ์ถ์ฒ์ ๋ฐ์ํ๋ ์ปจํ ์ธ ๊ธฐ๋ฐ ์ถ์ฒ ์์คํ ์ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ์ด๋ค !!
์ฐ์ ์ ๊ณต๊ณต ๋ฐ์ดํฐ ์ค ํ๊ตญ๊ตญ์ ๊ต๋ฅ์ฌ๋จ_ํ๊ตญ์์์ ๋ณด_์๋ฌธ ๋ฐ์ดํฐ์ ์ ์ฌ์ฉํ๋ค
AI hub์ ์๋ ๋ฐ์ดํฐ์ ๋ค์ ์์ ์ด๋ฏธ์ง ๋ฐ์ดํฐ์ ์ด๋ผ ์ด๋ฏธ์ง๋ช ์์ ์นดํ ๊ณ ๋ฆฌ์ ์์๋ช ์ ๋ฝ์์์ผ ํด์ ํ ์คํธ๋ก ์ ๊ณตํด ์ฃผ๋ ๋ฐ์ดํฐ์ ์ ์ ํํ๋ค
์๋๋ ๋ ธ์ ์ ์ ๋ฆฌํด ๋ ๋ฐ์ดํฐ์ ํ๋ณด๋ค ๐ค
์ถ์ฒ ์์คํ ์ ์ฒ์ ์ ํด๋ณด๋ ๊ฑฐ๋ผ ๊ธฐ๋ณธ์ ์ธ ๊ฒ๋ถํฐ ์์ !
์ฐ์ csv ํ์ผ์ ์ฝ๊ธฐ ์ํด pandas๋ฅผ ์ํฌํธ ํด์ค๋ค
import pandas as pd
df = pd.read_csv('food_list.csv',encoding='cp949') # csv ํ์ผ ์ฝ์ด์ค๊ธฐ
data = df[['๊ตฌ๋ถ', '์์๋ช
']] # ํ์ํ ๋ฐ์ดํฐ๋ง ๊ฐ์ ธ์ค๊ธฐ
ํ๊ธ์ด ๊นจ์ง๊ธฐ ๋๋ฌธ์ ์ธ์ฝ๋ฉ ์ต์ ์ ์ถ๊ฐํด์ฃผ์๋ค
๋ค์์ผ๋ก๋ ๋ฌธ์์ด๋ก ๋์ด์๋ ์์ ์นดํ ๊ณ ๋ฆฌ๋ฅผ ๋ฒกํฐํํด์ค๋ค
sklearn ๋ชจ๋ ์ํฌํธ !
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer(ngram_range=(1,1))
cv_category = cv.fit_transform(data['๊ตฌ๋ถ'])
cv.vocabulary_ # ์นดํ
๊ณ ๋ฆฌ๋ณ ์ธ๋ฑ์ค ๋ฒํธ
CountVectorizer๋ ํ ์คํธ์์ ๋ฑ์ฅ ํ์๋ฅผ ์นด์ดํ ํ์ฌ ๋ฒกํฐํํด ์ฃผ๋ ์ญํ ์ ํ๋ค
๋จ์ํ ์นด์ดํธ๋ง์ ํด์ฃผ์ด์ ๋น๋์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ํ ๋จ์ด๋ค์ ๋ฝ์์ฃผ๋ TF-IDF๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค๋๋ฐ, ๋๋ ๋ฌธ์ฅ์ ๋ถ์ํด์ ๋ฒกํฐํํ๋ ๊ฒ์ด ์๋๋ผ์ CountVectorizer๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค (CountVectorizer๋ ์กฐ์ฌ๋ ๊ด์ฌ๋ฅผ ์ค์ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๋ ์๋ค๊ณ ํจ)
์ฌ๊ธฐ์ ngram_range๋ ๋จ์ด ๋ฌถ์์ ๋ฒ์๋ฅผ ์ค์ ํด์ค๋ค
๋๋ (1, 1)๋ก ์ค์ ํด ์ฃผ์๋๋ฐ, ๋ด๊ฐ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ ๋์ด์ฐ๊ธฐ ์์ด ํ ๋จ์ด๋ฌถ์์ผ๋ก ๋์ด์๊ธฐ ๋๋ฌธ์ 1๊ฐ์ ๋จ์ด๋ฌถ์ ~ 1๊ฐ์ ๋จ์ด๋ฌถ์์ผ๋ก ์ค์ ํด์ฃผ์๋ค
CountVectorizer๋ก ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ fit_transform์ ํตํด ๋ณํ์์ผ์ค๋ค
vocabulary_์๋ ์นดํ ๊ณ ๋ฆฌ๋ณ ์ธ๋ฑ์ค ๋ฒํธ๊ฐ ์ ์ฅ๋๋ค
๋ค์์ผ๋ก๋ ๋ฒกํฐํ๋ ์นดํ ๊ณ ๋ฆฌ์ ์ ์ฌ๋๋ฅผ ๊ณ์ฐํด์ค๋ค
๋๋ ์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ์ฌ์ฉํ์๋ค
from sklearn.metrics.pairwise import cosine_similarity
similarity_category = cosine_similarity(cv_category, cv_category).argsort()[:,::-1]
print(similarity_category)
similarity_category.shape
์ฝ์ฌ์ธ ์ ์ฌ๋๋ฅผ ๊ตฌํ๊ณ argsort๋ก ์ ์ฌ๋๊ฐ ๋์ ์์๋๋ก ์ ๋ ฌํด์ฃผ์๋ค
๋ค์์ผ๋ก! ๋ฉ๋ด๋ช ์ ์ ๋ ฅํ๋ฉด ๋น์ทํ ์นดํ ๊ณ ๋ฆฌ์ ์์์ ์ถ์ฒํด์ฃผ๋ ํจ์๋ฅผ ์์ฑํ๋ค
def recommend_menu(df, menu_name, top=10):
target_menu_idx = df[df['์์๋ช
'] == menu_name].index.values
sim_idx = similarity_category[target_menu_idx, :top].reshape(-1)
sim_idx = sim_idx[sim_idx != target_menu_idx]
result = df.iloc[sim_idx]
return result
์ ๋ ฅ๋ ์์๋ช ๊ณผ ๋น์ทํ ๋ฉ๋ด๋ฅผ ๋ฝ๊ธฐ ์ํด ํด๋น ์์๋ช ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค
์ฝ์ฌ์ธ ์ ์ฌ๋๊ฐ ๋น์ทํ ๊ฒ๋ค์ ๊ฐ์ ธ์ค๊ณ
์๊ธฐ ์์ ๊ณผ๋ ์ฝ์ฌ์ธ ์ ์ฌ๋๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ธํด์ค๋ค
data frame์ผ๋ก ๋ง๋ค๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด์ค๋ค
๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํด ๋ด ์๋ค~
recommend_menu(data, menu_name='์
๋ ฅํ๊ณ ์ถ์ ๋ฉ๋ด๋ช
')
๋ฐ๋ ~
์ด๋ค ๋ฉ๋ด๋ ๊ตฌ๋ถ๋๋ก ์์ฒญ ์ ๋์ค๊ณ ์ด๋ค ๋ฉ๋ด๋ ์.. ๋ ๊ณต๋ถํด๋ด์ผ๊ฒ ๋ค!! ๐โฌ๐ง
's t u d y . . ๐ง > ์ด๊ฒ์ ๊ฒ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[chatGPT] chatGPT API ์ฌ์ฉํ๊ธฐ ๐ซง (0) | 2023.04.14 |
---|---|
[์ถ์ฒ ์์คํ ] ๋ฉ๋ด ์ถ์ฒ ์์คํ (3) (0) | 2023.04.11 |
[์ถ์ฒ ์์คํ ] ๋ฉ๋ด ์ถ์ฒ ์์คํ (2) (0) | 2023.03.28 |
๊น,,, ๋น์ ,,, ๋๋์ฒด ๋ญ์ผ,, (0) | 2020.12.21 |
๊นํ๋ธ ์์ (0) | 2020.12.21 |