0

我有用户和用户购买的产品,用户给出的产品似乎没有评分。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
4

1 回答 1

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]
于 2018-02-15T11:15:27.790 回答