赞
踩
本人曾做机器学习方向,由于实习需要转做文本聚类、分类的工作,虽然大致相似,但仍是新手,过程和结果也仅供大神指教。本博包含了作者两周的专心研究调试及由数千行测试得到了300余行代码精华,如需转载,请注明出处。
文本聚类是将一个个文档由原有的自然语言文字信息转化成数学信息,以高维空间点的形式展现出来,通过计算那些点距离比较近来将那些点聚成一个簇,簇的中心叫做簇心。一个好的聚类要保证簇内点的距离尽量的近,但簇与簇之间的点要尽量的远。
聚类是一种非监督学习,也就是说聚成几类,怎么聚,我们都不知道,只能一点点试出来。但是有时候机器认为这两堆点可以认为是两个簇,但人理解可能是一个簇,文本聚类就就难在了这里,机器与人的理解不太一样。一般能看到这个博的人都学过基本的聚类算法,拿k-means为例,簇心的选取是个非常随机的过程,导致k值相同的情况下聚类的结果每次都不一样,又不好取个平均,所以聚类的好坏很难被评价出来。
我在上一篇博:http://blog.csdn.net/chixujohnny/article/details/51852633 中讲到完爆一切的S_Dbw评价指标,我目前还没试过,有兴趣的同学可以试试,总之早晚都要用的。
词赋权方法还有textrate,还没用,jieba自带的,肉眼看不错,可以试试。
上面的图说几个部分,一般生成文档向量矩阵的格式是,每一行代表一个文档,每一列是一个维度代表该文档这个词的权重,没出现这个词就是0,几千个文件维度在10多w左右(看文档的大小),这么大的维度人脑想也想到了,矩阵将是及其稀疏的,也就是说,在一个高维空间中,几千个点几乎都聚在了一起,虽说彼此之间有距离,但是距离非常之小,很明显这样聚类效果肯定非常差,实测过,跟抛硬币的概率一样。于是将矩阵稠密一点就想到了pca降维,pca是主成分分析的缩写,大致意思就是取这个高维向量中方差最大的方向经过一些数学变换将有用的部分保留,没用的部分舍弃,这种办法同样适合分类算法中寻找最吊的特征,具体细节我在《机器学习实战》这本书看到的(一个小哥背麻袋的那本书),讲的不详细但是大致懂了。为啥不用SVD降维呢,SVD适合稠密型矩阵,比如图像矩阵或者推荐系统中,取80%有用的信息,适合做图像压缩算法(懂得不深入,请打脸)。
轮廓系数这个概念我实在这个北邮同学的博客里看到的:buptguo.com/2016/05/31/learn-ml-from-scikit-learn-silhouette-analysis/ 直接点进去看就行了,他讲的比我好。
聚类这块我看了些资料,百度的那些用的都是k-means做的文本聚类,我就想问你们做的是不是学校的作业应付了事?上千维的向量用k-means做?搞笑吗?我实测了一下,效果很差,扔筛子的准确度。后来开始查文献资料,有一种叫BIRCH的层次聚类算法,该算法可以比较好的解决k-means每次聚类结果偏差太大的问题,相比dbscan有可以设置聚类的个数(当然阈值也可以设置),
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。