2016-08-07 10 views
0

私はビール推薦エンジンを構築しようとしています。私は単純にtf-idfとCosineの類似性を使用することにしました。ここでtf-idfとコサイン類似度を使って推薦システムを構築するには?

は、これまでの私のコードです: `

import pandas as pd  
import re 
import numpy as np 
from bs4 import BeautifulSoup 
from sklearn.feature_extraction.text import TfidfVectorizer 
from nltk.corpus import stopwords 
from nltk.stem import WordNetLemmatizer 
wnlzer = WordNetLemmatizer() 


train = pd.read_csv("labeledTrainData.tsv" , header = 0 , \ 
    delimiter = '\t' , quoting = 3) 


def raw_string_to_list_clean_string(raw_train_review): 
    remove_html = BeautifulSoup(raw_train_review).text 
    remove_punch = re.sub('[^A-Za-z ]' , "" , remove_html) 
    token = remove_punch.lower().split() 
    srm_token = [wnlzer.lemmatize(i) for i in token if not i in set(stopwords.words('english'))] 
    clean_text = " ".join(srm_token) 
    return(clean_text) 

ready_train_list = [] 
length = len(train['review']) 
for i in range(0 , length): 
    if (i%100 == 0): 
     print "doing %d of %d of training data set" % (i+1 , length) 
    a = raw_string_to_list_clean_string(train['review'][i]) 
    ready_train_list.append(a) 

vectorizer = TfidfVectorizer(analyzer = "word" , tokenizer = None , preprocessor = None , \ 
    stop_words = None , max_features = 20000) 
training_our_vectorizer = vectorizer.fit_transform(ready_train_list)` 

は、今私は、コサイン類似度を使用する方法を知っているが、私は把握することはできませんよ。

  1. コサイン
  2. を利用するにはどのように
  3. 5ビールまでの推奨を制限する方法
+0

あなたは「コサインの使用方法」とはどういう意味ですか?あなたは、ユーザー間またはアイテム間の類似性を見つけるためにそれを使用すると仮定します。あなたの2番目の質問については - 簡単な答えは「トップ5」です。しかし、より正確には、あなたが推奨するアイテムのリストを見つけ出す必要があります。そして、最善のマッチから最悪のマッチまでソートされていると考えられます。その後、ユーザーにはトップ5だけが表示されます。 –

+0

私は、余弦との類似性とそれ以外のものは非常に良い行列を与えています。私は最初の行のためにこれを使用する場合、私は[1,0.5,0.23,0.045、.........]を与えるように、今のように私はこの行列が何を表しているのか理解していますが、 ? –

+0

私は、ご質問申し訳ありません.Collaborative_filtering(https://en.wikipedia.org/wiki/Collaborative_filtering)についてご存じですか?このリンクはいくつかの重要な情報を与えることができます。しかし、とにかく - あなたの質問のために - 与えられたユーザーにとっては、最も類似したユーザーKを選ぶべきです(コサインマトリックスからそれを抽出することができます)。そしてすべてのアイテムを予測するよりも、彼女はそれらを評価しなければならない。それで、あなたがしなければならないのは、予測された評価リストから上位5位を選ぶことです(これらの項目が「おそらく最も好き」という意味です)。 –

答えて

0

簡単な実装では、その後、電子のcdistを使用して他のビールのそれぞれまでの距離、およびargsortを使用して、あなたの提言を返す:

from scipy.spatial.distance import cdist 
import numpy as np 

vec = TfidfVectorizer() 
beerlist = np.array(['heinekin lager', 'corona lager', 'heinekin ale', 'budweiser lager']) 
beerlist_tfidf = vec.fit_transform(beerlist).toarray() 
beer_tfidf = vec.transform(['heinekin lager']).toarray() 
rec_idx = cdist(beer_tfidf, beerlist_tfidf, 'cosine').argsort() 
print(beerlist[rec_idx[0][1:]]) 

#['heinekin ale' 'corona lager' 'budweiser lager'] 
関連する問題