聚类和绘制词向量 - python 或 R
Posted
技术标签:
【中文标题】聚类和绘制词向量 - python 或 R【英文标题】:Clustering and plotting word vectors - python or R 【发布时间】:2017-11-19 23:12:55 【问题描述】:所以我是 python(以及 R)和词向量的新手,并且一直坚持如何完成我的下一步,学习如何将其可视化。当我尝试在 python 中工作时,我也愿意将其应用于 R。我将简要说明我已经走了多远以及我想去哪里。
所以我有一个用户列表,他们收到了与该用户相关的 10 部电影的列表。我已经设法获取列表,创建输出 csv 文件并匹配用户属性,如性别、年龄、位置等。我已经提取并创建了电影的属性以及类型和年份。
但接下来,我尝试对用户进行聚类,以查看电影列表与每个用户的相似程度。我这样做的方式是,我提取了每部电影的类型并将它们放在一个列表中。因此,拥有说用户 1“喜剧”、“戏剧”、“浪漫喜剧”列表的用户将类似于另一个喜欢喜剧、浪漫的用户 2,但与喜欢“恐怖”、“犯罪”的用户 3 不同, '惊悚'。我正在想象基于这些类型的大约 5-6 个集群(比如“动作”、“喜剧”、“戏剧”、“家庭”、“恐怖”。)如果我绘制它,我希望看到用户 1 和 2 在一个集群中的集群(在喜剧集群周围),用户 3 在另一个集群中(靠近恐怖集群),依此类推。然后我可以根据年龄、性别等对情节进行着色,以查看相同年龄段的人是否喜欢类似的电影,或者我会看到更多的男性更接近“动作”电影集群,而更多的女性更接近“浪漫”?
这就是我卡住的地方。我查看了 sckit 以尝试绘制此图,但只是不知道该去哪里。这些列表的长度也不同,与其他用户相比,我已经能够获得用户的余弦相似度。我设法在第二列中创建了用户编号和流派列表的数据框。我已经成功地创建了一个 csv 文件,其中包含用户和流派,并将它们分开放在自己的列中。我现在如何获取这些信息并将其聚类或绘制在向量空间中?下面是我能够构建并用于计算不同用户之间余弦相似度的数据框。
ID Genre
0 1 ['Adventure', ""Children's"", 'Drama', 'Comedy', 'Musical', 'Horror', 'Drama', 'Drama', 'Mystery', 'Documentary', 'Comedy', 'Drama', 'Romance', 'Drama', 'Comedy', 'Romance']"
1 2 ['Horror', 'Mystery', 'Thriller', 'Documentary', 'Action', 'Comedy', 'Musical', 'Sci-Fi', 'Horror', 'Sci-Fi', 'Thriller', 'Adventure', 'Animation', ""Children's"", 'Musical', 'Romance', 'Documentary', 'Action', 'Adventure', 'Western', 'Comedy', 'Drama', 'Comedy']"
2 3 ['Documentary', 'Drama', 'Thriller', 'Documentary', 'Comedy', 'Horror', 'Drama', 'Romance', 'Documentary', 'Comedy', 'Drama', 'Romance', 'Action', 'Adventure', 'Sci-Fi', 'War', 'Drama']
3 4 ['Drama', 'War', 'Drama', 'Drama', 'Romance', 'Action', 'Thriller', 'Comedy', 'Horror', 'Horror', 'Comedy', 'Musical', 'Crime', 'Drama', 'Horror', 'Comedy', 'Horror']
4 5 ['Documentary', 'Drama', 'Documentary', 'Comedy', 'Romance', 'Drama', 'Horror', 'Comedy', 'Drama', 'Animation', ""Children's"", 'Action', 'Drama', 'Drama', 'Comedy', 'Romance']"
5 6 ['Horror', 'Documentary', 'Comedy', 'Horror', 'Drama', 'Drama', 'Drama', 'Action', 'Comedy', 'Comedy', 'Horror']
...
【问题讨论】:
【参考方案1】:我不确定您真正想做什么,但如果您的目标是情绪分析,我会建议您这样做。
a = ['Horror', 'Mystery', 'Thriller', 'Documentary', 'Action', 'Comedy', 'Musical', 'Sci-Fi', 'Horror', 'Sci-Fi', 'Thriller', 'Adventure', 'Animation', 'Musical', 'Romance', 'Documentary', 'Action', 'Adventure', 'Western', 'Comedy', 'Drama', 'Comedy']
>>> b= set(a)
>>> b
'Action', 'Romance', 'Documentary', 'Sci-Fi', 'Adventure', 'Musical', 'Animation', 'Thriller', 'Western', 'Drama', 'Comedy', 'Horror', 'Mystery'
您现在可以将电影类型转换为数值,例如
'Action' = 1
之后你可以对数据进行聚类,但是算法的选择就不是那么简单了。你可以使用k-means,fuzzy c mean或者其他一些算法。你可以阅读更多关于这个here
【讨论】:
以上是关于聚类和绘制词向量 - python 或 R的主要内容,如果未能解决你的问题,请参考以下文章
127在线民宿 UGC 数据挖掘实战--基于词向量的主题聚类挖掘