我有用户购买的用户和产品,似乎没有用户提供的产品评级。 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
答案 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]