【发布时间】:2016-12-13 03:48:26
【问题描述】:
我一直在尝试构建一个啤酒推荐引擎,我决定简单地使用 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)`
现在我知道如何使用余弦相似度,但我无法弄清楚:
- 如何利用余弦
- 如何将建议限制为最多 5 杯啤酒
【问题讨论】:
-
“如何使用余弦”是什么意思?您假设使用它来查找用户之间或项目之间的相似性。关于你的第二个问题 - 简单的答案是“前 5 名”。但更准确地说,您需要找到要推荐的项目列表,并且假设从最佳匹配到最差匹配进行排序 - 然后仅向用户呈现前 5 个。
-
我的意思是,当我使用余弦相似度与其他的相似度时,它给出了一个非常好的矩阵。就像前一样,如果我在第一行使用它,那么它给出 [1,0.5,0.23,0.045,..........] ,现在我明白这个矩阵代表什么但我该如何使用它?
-
我很抱歉这个问题:你知道一些关于 Collaborative_filtering (en.wikipedia.org/wiki/Collaborative_filtering) 的事情吗?此链接可以提供一些重要信息。但无论如何 - 对于你的问题 - 对于给定的用户,你应该选择 K 个最相似的用户(你可以从你的余弦矩阵中提取它),然后为所有项目预测给定用户如果他/她必须给他们打分。然后,您所要做的就是从预测的评分列表中选择前 5 名(这意味着这些项目“可能”是最受欢迎的)。
-
我相信
sklearn已经包含了该功能。如果您想了解它的作用,也许这会有所帮助:stackoverflow.com/a/27504795/874188
标签: python scikit-learn tf-idf