聚类和绘制单词向量 - python或R

时间:2017-06-17 06:54:54

标签: python r vector scikit-learn cluster-analysis

所以我是python(和R)和单词向量的新手,并且一直坚持如何完成我学习如何可视化的下一步。当我尝试在python中工作时,我也愿意将它应用于R。我将简要解释一下我到底走了多远以及我想去哪里。

所以我有一个用户列表,他们收到与该用户关联的10部电影的列表。我已经设法获得列表,创建输出csv文件并匹配用户属性,如性别,年龄,位置等。我已经提取并创建了电影的属性,以及类型和年份。

但接下来,我正在尝试对用户进行聚类,以查看电影列表与每个用户的相似程度。我这样做的方式是,我已经提取了每部电影的类型并将它们放在一个列表中。因此,拥有用户1'喜剧',戏剧',浪漫喜剧'的列表的用户将类似于喜欢喜剧,浪漫但与喜欢'恐怖','犯罪'的用户3不相似的另一用户2, “惊悚片”。我想象基于这些类型的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 个答案:

答案 0 :(得分: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,模糊c均值或其他一些算法。你可以阅读更多关于这个here < / p>