余弦相似度原理

image.png


import pandas as pd

import numpy as np

# 导入余弦相似度

from sklearn.metrics.pairwise import cosine_similarity

# 读取问卷星答题数据加载数据(问卷是以评分矩阵的方式统计便于计算余弦相似度,这里简单的以1代表喜欢0代表不喜欢)

data = pd.read_excel("./余弦相似度计算推荐体育项目爱好问卷_20_20.xlsx")

data

image.png


image.png


# 计算用户之间的余弦相似度矩阵

similarity_matrix = cosine_similarity(rating_matrix)

similarity_matrix

# 相似度排序 每一行相似度从小到大排序 返回的是数组中的索引

sorted_indices = np.argsort(similarity_matrix,axis=1)

sorted_indices

image.png


# 相似度排序 每一行相似度从小到大排序 返回的是数组中的值

sorted_rows = np.sort(similarity_matrix,axis=1)

sorted_rows

image.png


image.png


image.png

from pyecharts import options as opts

from pyecharts.charts import Graph

from pyecharts.globals import ThemeType



# 模拟的数据,实际中替换为真实全班同学的数据

# 字典的键是同学名字,值是对应的相似好友名字列表

classmate_relations = classmate_relations


# 节点数据列表

nodes = []

# 边数据列表

links = []


# 生成节点数据,为每个同学创建一个节点信息

for classmate in classmate_relations:

    nodes.append({"name": classmate, "symbolSize": 20})


# 生成边数据,根据相似好友关系来创建边

for classmate, similar_friends in classmate_relations.items():

    for friend in similar_friends:

        links.append({"source": classmate, "target": friend})


# 创建Graph图表对象

graph = Graph()

# 添加节点和边数据到图表

graph.add(

    "", 

    nodes, 

    links,

    repulsion=500


)

# 设置全局配置项,比如图表标题等

graph.set_global_opts(

    title_opts=opts.TitleOpts(title="全班爱好相似关系图"),

)


# 生成节点数据后,打印节点数据查看

print("Nodes:", nodes)

# 生成边数据后,打印边数据查看

print("Links:", links)

# 渲染生成HTML文件,在浏览器中查看图表,你也可以使用render_notebook()

# 如果是在Jupyter Notebook环境下直接展示图表

graph.render("student_friends_relation_graph.html")

graph.render_notebook()


image.png






0 评论 最近

没有评论!