数据分析、数据挖掘之聚类、分类

总结:此聚类的模型相对简单,
     模型:
               集合{
                    itemN:{col1:n1,col2:n2,col3:n3,...,coln:n}
               }
               二维表形式:column1 column2 column3 ... columnN item
          关键在于数据准备阶段,比如,对博客进行聚类的时候,按照"每个单词在出现在博客列表中的次数(注意是不论在一篇博客中出现多少次,都算只能算一次),取次数/博客总数,取10%-50%区间中的单词",做为col,来构建模型
          然后根据随机选取的k个点,遍历整个集合,将元素放到距离自己最近的k个点之一
          重新计算k个集合的中心点,重新迭代;直到k个集合不在变化
 
          优化:
               1.对连续型数据用皮尔逊距离(两个元素相同时为1,不同时为0,所以用1-皮尔逊距离)代替欧几里得距离,来避免博客篇幅较大时对群组划分不准确的影响
               2.对离散型数据,比如在{物品:{persion1:1,persion2:0,...,persionN:1}}模型中,客户购买与否被数据化为1、0,所以用Tanimote系数来衡量两个物品间的距离,其计算公式为1-(float)(共同购买的人数)/(单独购买物品1的人数+单独购买物品2的人数-共同购买的人数),即并集与交集的商
               3.对模型转置后,可对列进行聚类,但是在行、列较小的维度上进行聚类时,得到的模式更加有意义,例如,单词的数量比博客多,此时在行上进行聚类,得到的模式更为合理
 

1.目的
     是一种用于寻找紧密相关的事、人和观点,并将其可视化的方法
     场景:
          利用常规的消费者消费记录自动检测出具有相似购买模式的消费者群体
          在生物学里寻找具有相似行为的基因组
2.监督学习和无监督学习
     监督学习(supervised learning):通过检查一组输入和期望的输出来进行“学习”,传入一组数据,利用学习到的知识产生一个输出,如神经网络、决策树、向量支持机和贝叶斯过滤
     无监督学习:从一组数据中寻找某种结构,如聚类算法 非负矩阵因式分解 自组织映射
    
3.聚类算法:
     a.数据准备
          定义一组公共的数值型属性,利用这些属性对数据项进行比较,比如上一章的对delicious网站上的标签用0 1来进行数据化
         
     b.运用算法:
          分级聚类:
               原理:通过连续不断的将最为相似的群组两两合并,来构造一个群组的层级结构;其中每个群组都是从单个元素开始的
               可视化:通过树状图按层级排列节点,有效的确定一个聚类中各个元素见的相似程度,并以此来描述聚类的紧密程度
              
          K-means聚类:
               原理:根据随机选取的K个中心位置,将各个数据项分配给最邻近的中心点,然后根据群组的元素调整中心点的位置,重新进行分配,直到分配过程不再产生变化未知

              
4.例子:
     1)     对博客用户进行分类:
          数据准备:
               a.RSS订阅源包含一个标题和一组文章条目,每个文件条目都有一段摘要,对摘要的单词进行统计
               b.构造数据如下数据模型:
Rss     单词1     单词2
url     num     Num
         

               c.计算每个单词在出现在博客列表中的次数(注意不是对num的求和,而是对单词变量博客列表,出现在此博客,count++),取次数/博客总数,取10%-50%区间中的单词,主要是过滤掉常见和不常见的单词
              
          算法计算(分级聚类):
               初始时,每个元素都是一个群组;
               然后,计算每个群组间的距离(向量间的距离,可以用欧几里得距离),将距离最近的两个群组组成在一起,并计算此时的群组的位置(为元素的中间位置)
               迭代
               直到只剩下一个群组为止
         

          结果展现:
               树状图:
                    按层级排列节点,利用群组间的距离标识群组间的距离

          优化:
               紧密度(closeness):利用(1-皮尔逊系数)来定义,使得相似度越大的元素其距离越小。用途:排除博客篇幅较大,对群组划分带来的负影响
               将距离的算法变为皮尔逊算法,采取分级聚类的思想进行计算

     2)列聚类
          同时在行和列上对数据进行聚类是很有必要的。在进行市场研究时,对消费者进行分组是非常有意义的,有助于了解消费者的统计信息和产品的状况,同时还能有助于我们确定哪些商品可以进行捆绑销售
          最简单的方法就是对数据集进行转置,然后对每个单词按照上面的方法进行聚类计算,其数据模型如下:
Rss     url1     url2
单词     url     url


          算法2:K-均值聚类
          分级聚类缺点:对结果还需要认为的进行分类,同时计算每个配对项间的距离,在数据项特别大的时候,速度非常慢
          流程:
1.     随机定义k个中心点
2.     将数据项分配给最邻近的中心点,分配完成后,重新计算群组的中心点
3.     再次进行数据项的分配,直到分配的过程不再产生变化,即中心点不再变化为止

3)例子2:针对编号的聚类:
     1.数据源:
          用户在Zebo(www.zebo.com)上对列举自己最想拥有的物品
     2.从网站上抓取数据,构建模型
          etl:过滤掉some a new more my own等物品属性词
          将数据构建为指定的模型:行为物品,列为匿名用户,某用户想拥有此物品记为1,否则计0;
     3.选取距离计算方法:
          Tanimote系数:代表的是交集与并集的比率,数据只有0 1两种取值,代表有和无。
     4.结果展示
           

posted @ 2017-01-07 10:21  成金之路  阅读(872)  评论(0编辑  收藏  举报