基于LDA对关注的微博用户进行聚类
转自:http://www.datalab.sinaapp.com/?p=237
最近看了LDA以及文本聚类的一些方法,写在这里算是读书笔记。文章最后进行了一个小实验,通过爬取本人在微博上关注的人的微博,利用微博的内容,尝试将我关注的人按主题进行进行聚类。
文本聚类就是把一个文本集分成一定数量的簇(Cluster),使每个簇内的文本之间具有较大的相似性,而使簇间的文本具有较大的差异性。传统的文 本聚类方法一般基于向量空间模型(vector space model): 在对文本集中的每个文本进行预处理(分词、停用词过滤等)、特征选择和权重计算之后,将文档集表示成一个高纬、稀疏的文档-词矩阵,进而使用K- Means、凝聚的层次聚类、DBSCAN等聚类方法对文档进行聚类。
在特征选择选择环节,虽然一些高效的特征选择方法,例如互信息MI(Mutual Information)、x2统计量等已经非常成功地应用于文本分类,但由于它们需要每个文档人工标记的类信息而无法应用于无监督的文本聚类。文本聚类 里面一般选择无监督的特征选择方法,例如文档频数(整个数据集中有多少个文本包含这个单词)、单词权(认为一个词在相关的文本中出现得越多, 在不相关的文本中出现得越少就越为重要,需要计算每个文档对的相似度)等。
由于基于VSM 向量空间模型在文本聚类时存在的高维稀疏问题,以及不能从语义上理解文本之间的内在联系,另一种比较流行的方法就是通过主题模型来给文本建模,将文本表示 成一个主题概率向量,这样能够充分的挖掘文本集合的主题信息。通过主题模型,原本是在高维的特征词空间上表示的文本,被转换在了低维的并且融入更多语义信 息的主题空间上来表达,应该能提高文本聚类性能和效率,使得聚类的结果更加有效。
LDA(Latent Dirichlet Allocation)主题模型
LDA 是一个三层贝叶斯概率模型,包含词、主题和文档三层结构。整个文档集有K个主题,每个主题是固定词汇表上的一个多项式分布。这些主题被集合中的所有文档所 共享,但每个文档有一个特定的主题分布。每个文档的主题分布θm从Dirichlet分布中抽样产生,每个主题的词分布φk也从Dirichlet分布中 抽样产生,这两个Dirichlet分布相互独立,参数分别是α和β。(Dirichlet 分布可以理解为一个分布的分布,从Dirichlet 分布中抽个样取出的是一个分布)。
LDA的图模型表示:
整个文档集的生成过程:
- 1、首先从以β为参数的Dirichlet分布中,抽样产生整个文档集的K个词分布,标记为φ1至φk,即左侧的K个主题;
- 2、对于每一篇文档:
- 2.1、从以α为参数的Dirichlet分布中,抽样产生一个主题分布θm,即这篇文档中各个主题的比重,图中为右侧的直方图;
- 2.2、对于文章m中的每一个词:
- 2.2.1、以概率分布θm,选择K个主题中的一个主题,例如为φi;
- 2.2.2、以概率分布 φi,从该主题中选择一个词。

LDA的参数估计:
Gibbs 抽样容易实现并且能够有效地从大规模文集中抽取主题,是当前最流行的LDA 模型抽取算法。Gibbs 抽样并没有直接去计算主题-单词分布φk和文本上的主题分布θm,转而对每个位置上的词的主题进行迭代采样。一旦每个位置上的词的主题确定下来,那么φk和θm的值就可以在统计频次后计算出来。对每个位置上的词进行主题采样时,该词的主题以该词当时在各个主题上的概率分布采样获得。采样前需要计算该词属于每个主题的概率。
微博用户聚类实验:
- (1)爬取我在微博上的关注的用户他们在之前一个月内发的微博。每个人的微博作为一个文本,得到大约500个文本;
- (2)用IK Analyzer对每个文本进行切词,并同时过滤掉一些停用词;
- (3)利用JGibbLDA将每个文本表示成一个主题向量,即该文本属于每个主题的概率,运行时指定了20个主题,进行了1000次迭代;
- (4)使用scikit-learn里的K-Means进行聚类,指定的簇个数是20。
下面是聚类的一部分结果,可以看到一些内容账号的聚类效果还是可以的,主要是它们每天发博量比较大,而且博文的主题较明显。对于个人账号,往往发博量少而且主题分散。当然跟抓的量少也有关系。
(1) LOVE_湖人 湖人新闻动态 NikeBasketball 爱死科比论坛 CNTV体育台 科比演绎之路 于嘉 NBA 苏群
(2) SAP中国 创新工场微招聘 新浪校园招聘 IBM中国有限公司人才与招聘 Google中国校园招聘 IBM中国 IBM杭州分公司 IBM中国大学合作部 新浪招聘
(3) 百度校园 百度开发者中心 百度搜红包 编程之美全国挑战赛 美国国家仪器 阿里巴巴集团校园招聘 微软亚洲研究院 百老汇之家 acmicpc 微软学生技术俱乐部 阿里云 百度云 BaiduFamily 微软校招官方微博 微软中国 网易校园招聘
(4) DataScientist 52opencourse_挖课 网易汪源 丕子 刘思喆 杨滔_数据科学 邓侃 王威廉 北冥乘海生 刘洋THU ChinaHadoop MachineLearner 阿里日照
(5) 唯美丶中国风 全球视觉图宴 镜头中的中国 BJTUcaixia 百度旅游 全球顶尖摄影
(6) TechWeb 程苓峰-云科技 互联网的那点事 开心的老胡-GodHope 淘宝鬼脚七 google那点事儿 腾讯微信团队 张辉forestsong 刘江总编 月光博客 PingWest中文网 刘挺 王小川 36氪 雷军 Fenng 高效IT网 庄宝童
(7) Smile_geek 赫阳at百度 199IT-互联网数据中心 苏宁易购李斌 视物致知 蔡学镛 billgates FT中文网 数据化管理 微数据 爬盟中国 DataV 淘宝技术大学 社会网络与数据挖掘 李开复 于仰民_Emilyu 数据挖掘_PHP 淘依韵 ResysChina 量子恒道 林仕鼎 钱皓-互联网分析师 陈利人 EMC中国研究院 BIT-百度技术学院 3W咖啡 微指数 淘薛奎 数据挖掘研究院 百度统计 TEDNews 周鸿祎 一淘数据工程师 杨栋_Kenny 大数据 张俊林say 郭去疾 数据魔方 微软云计算 ipad应用排行榜 数据挖掘与数据分析 唐福林 五洲红 AdMaster 程辉 2012百度之星程序设计大赛 eBayTech 百度推广 社交数据分析 Google黑板报 张亚勤
(8) 连城404 伯乐在线官方微博 图灵社区 何_登成 一淘测试 python4cn 骆逸 nosqlfan zhh-2009 阿里技术嘉年华 微博应用架构 developerWorks 开源中国 程序员的那些事 LAMP人 InfoQ 程序员修炼营 TimYang CNodeJS 百度技术沙龙 朴灵 微博平台架构 SinaAppEngine
(9) 一淘网 淘宝网 淘宝邓悟 Python发烧友 淘宝数据 rockdai 一淘招聘 淘楚材 乔三石 hugozhu 淘宝指数
(10)姚晨 花泽云静 司華Fighting glinglingw 邹_小珊 蔡圆媛的后花园 开启新起点tianran 凌_欣 任婷婷养了一只皮皮兽 胡思乱想乐 BatmanFly 超级码力 macbax Miss好好菁 蔡虎Stanley 夏炎xyxy 阿Oey–陈叶萍 Ali_lulululuya 夏碉堡 turbosun 依兰花开_emma LillianC小超人 Loxpzi-四叶草 稀土部队
基于LDA对关注的微博用户进行聚类的更多相关文章
- 【转】基于LDA的Topic Model变形
转载自wentingtu 基于LDA的Topic Model变形最近几年来,随着LDA的产生和发展,涌现出了一批搞Topic Model的牛人.我主要关注了下面这位大牛和他的学生:David M. B ...
- 基于LDA的Topic Model变形
转载于: 转:基于LDA的Topic Model变形 最近有想用LDA理论的变形来解决问题,调研中.... 基于LDA的Topic Model变形 基于LDA的Topic Model变形最近几年来,随 ...
- 【Python3爬虫】微博用户爬虫
此次爬虫要实现的是爬取某个微博用户的关注和粉丝的用户公开基本信息,包括用户昵称.id.性别.所在地和其粉丝数量,然后将爬取下来的数据保存在MongoDB数据库中,最后再生成几个图表来简单分析一下我们得 ...
- selenium获取微博用户粉丝数
selenum的安装 selenium文档 获取微博用户粉丝数 from selenium import webdriver from time import sleep wd = webdriver ...
- Spark Mllib里相似度度量(基于余弦相似度计算不同用户之间相似性)(图文详解)
不多说,直接上干货! 常见的推荐算法 1.基于关系规则的推荐 2.基于内容的推荐 3.人口统计式的推荐 4.协调过滤式的推荐 协调过滤算法,是一种基于群体用户或者物品的典型推荐算法,也是目前常用的推荐 ...
- 微博爬虫,python微博用户主页小姐姐图片内容采集爬虫
python爬虫,微博爬虫,需要知晓微博用户id号,能够通过抓取微博用户主页内容来获取用户发表的内容,时间,点赞数,转发数等数据,当然以上都是本渣渣结合网上代码抄抄改改获取的! 要抓取的微博地址:ht ...
- 【WebMisCentral WMC】基于Extjs 4.2x的企业级用户授权认证中心系统(SSO+AM+SM),多租户SAAS应用
http://saas.chinacloudtech.com 题记 三年磨一剑,在企业信息化的道路上已经走了3年之久了,3年多时间里做了很多,突破了很多:有无奈和辛酸,也有收货与喜悦:自我价值也在不断 ...
- QQ登入(6)腾讯微博-获取微博用户信息,发送微博
1.1获取weibo用户信息 //先登入授权,可以参考QQ登入(1) Weibo mWeibo = new Weibo(this, mQQAuth.getQQToken()); mWeibo.getW ...
- [SharePoint 2010]关于基于声明(Claims)的用户认证模式
转:http://blog.csdn.net/zw_2011/article/details/7417132 SharePoint 2010在用户认证模式上,较之以前的版本有了非常大的改变.在Shar ...
随机推荐
- 平时学习HTML5及其安全相关的一些站点资源
http://www.w3.org/ -- HTML5一切标准都来自这里,如果你是发烧级HTML5患者,就读这个http://www.whatwg.org -- 和W3分分合合,最终共同指定HTML5 ...
- mysql利用存储过程批量插入数据
最近需要测试一下mysql单表数据达到1000W条以上时增删改查的性能.由于没有现成的数据,因此自己构造,本文只是实例,以及简单的介绍. 首先当然是建表: [sql]view plaincopy CR ...
- Notepad 列编辑、正则查找、替换
目标: 将源数据转成初始化sql语句.源数据: 104110040018,1,中国银行,中国银行天津琼州道支行,NULL,1100,天津市,12,天津市 104110040059,1,中国银行,中国银 ...
- Shell教程3-Shell特殊变量
前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ ...
- Creole
Home Bisher besucht: AnzeigenAnhängeInfo The Creole 1.0 project has been succ ...
- MYSQL中 ENUM、SET 类型(建议用tinyint代替)
ENUM类型 ENUM 是一个字符串对象,其值通常选自一个允许值列表中,该列表在表创建时的列规格说明中被明确地列举. 在下列某些情况下,值也可以是空串("") 或 NULL: 如果 ...
- android 深入研究ratingbar自定义
http://blog.csdn.net/rain_butterfly/article/details/22892879
- 上传Test Result和attachment到ALM
之前在HP的时候用ALM,还是很好用的功能很强大的一个测试管理工具,当时用C#依照ALM的API实现了一个上传测试结果的程序,现在贴出来: 这个程序的使用方式很自由,使得ALM几乎可以和所有测试工具做 ...
- 备份数据库SQL Server 2008下实测
下面的存储过程适用: 1.一次想备份多个数据库. 2.只需要一步操作,在有存储过程的条件下. 3.可以根据自己的需要修改存储过程. /*----------------------------- De ...
- Python超级程序员使用的开发工具
我以个人的身份采访了几个顶尖的Python程序员,问了他们以下5个简单的问题: 当前你的主要开发任务是什么? 你在项目中使用的电脑是怎样的? 你使用什么IDE开发? 你将来的计划是什么? 有什么给Py ...