如何根据purchsed项找到类似的用户

时间:2018-02-15 10:41:48

标签: machine-learning recommendation-engine svd cosine-similarity recommender-systems

我有用户购买的用户和产品,似乎没有用户提供的产品评级。 Blow是样本数据

数据:

user    products
A   111, 333, 444
B   333, 444, 555
C   555, 111, 333
D   222,333, 333,333
E   111,333,444,555
F   222,555,111

我们能否根据以上数据找到类似客户。我试图使用1购买产品,如果不喜欢,则尝试使用0。

    111 222 333 444 555
A   1   0   1   1   0
B   0   0   1   1   1
C   1   0   1   0   1
D   0   1   1   0   0
E   1   0   1   1   1
F   1   1   0   0   1

使用上述矩阵,我如何找到类似的客户。期待以下格式的输出。

user Id     similar customers
A   E, B, C
B   E, A, F
C   A, E
E   A, B, C
F   B, D

1 个答案:

答案 0 :(得分:0)

from sklearn.feature_extraction.text import TfidfVectorizer, CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity

df = df.set_index('user')

cvect = CountVectorizer()

cs = pd.DataFrame(cosine_similarity(cvect.fit_transform(df['products'])),
                  columns=df.index, index=df.index)

np.fill_diagonal(cs.values, 0)

threshold = 0.66

df['similar'] = cs[cs > threshold].apply(lambda row: row.dropna().index.tolist(), axis=1)

结果:

In [300]: df
Out[300]:
              products       similar
user
A        111, 333, 444     [B, C, E]
B        333, 444, 555     [A, C, E]
C        555, 111, 333  [A, B, E, F]
D     222,333, 333,333            []
E      111,333,444,555     [A, B, C]
F          222,555,111           [C]