【发布时间】:2014-12-14 01:54:36
【问题描述】:
我正在尝试构建一种算法,该算法能够根据我以前喜欢的文章预测我是否会喜欢某篇文章。
例子:
- 我阅读了 50 篇文章,我喜欢了 10 篇。我告诉我的程序我喜欢它们。
- 然后有 20 篇新文章来了。我的程序必须根据我之前喜欢的 10 篇文章为每篇新文章提供一个“喜欢百分比”。
我在这里找到了线索: Python: tf-idf-cosine: to find document similarity
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> from sklearn.datasets import fetch_20newsgroups
>>> twenty = fetch_20newsgroups()
>>> tfidf = TfidfVectorizer().fit_transform(twenty.data)
然后,将数据集的第一个文档与数据集中的其他文档进行比较:
>>> from sklearn.metrics.pairwise import linear_kernel
>>> cosine_similarities = linear_kernel(tfidf[0:1], tfidf).flatten()
>>> cosine_similarities
array([ 1. , 0.04405952, 0.11016969, ..., 0.04433602,
0.04457106, 0.03293218])
就我而言,我想我会做的是将我的 10 篇文章的文本连接起来,运行 TfidfVectorizer,然后将新的大向量与即将到来的每篇新文章进行比较。
但我想知道如何进行比较:
- 大向量(10 篇)对比小向量或
- 小个子对比大个子
我不知道你是否明白我的意思,但在第一种情况下,大向量中 90% 的单词不会出现在小向量中。
所以我的问题是:余弦相似度是如何计算的?您认为我的项目有更好的方法吗?
【问题讨论】:
标签: python machine-learning scikit-learn cosine-similarity