当前位置: 首页 > news >正文

集体智慧编程笔记

关于聚类算法

物以类聚,相似的构成组

 

已rss订阅源为例

一、数据构造

  1.每个博客都有不同的词汇

  2.统计出所有博客中出现的词汇

  3.以所有的词汇作为模板,统计每个博客中这些词汇出现的频率,构造每个博客的数据

二、皮尔逊相关算法

三、聚类算法

  1.定义一个统计类bicluster 包含属性:数据、左边临近对象、右边临近对象、左右两临近对象数据近似度、id

  2.首先构造所有博客的bicluster对象数组(数据、左右临近对象为空、相似度为空、id为博客的索引)初始对象currentclustid=-1

  3.遍历所有的博客的对象数组 找出相似度最高的两个博客对象 构造两博客对象的中间对象(数据为两博客数据的均值,左右临近对象分为两个博客对象,相似度为连个博客对象数据的相似度,id为初始对象currentclustid)

  4.对象数组删除这两个博客对象同时加入新构造的对象 重复遍历操作 直至对象数组只剩一个元素

  5.最终形成一个博客对象的关系链

代码如下:

def hcluster(rows,distance=pearson):
    distances={}
    currentclustid=-1

    # 最开始的聚类就是数据集中的行
    clust=[bicluster(rows[i],id=i) for i in range(len(rows))]


    while len(clust)>1:
        lowestpair=(0,1)
        closest=distance(clust[0].vec,clust[1].vec)

        # 遍历每一个配对,寻找最小距离
        for i in range(len(clust)):
            for j in range(i+1,len(clust)):
                #用distance来缓存距离的计算值
                if (clust[i].id,clust[j].id) not in distances: 
                    distances[(clust[i].id,clust[j].id)]=distance(clust[i].vec,clust[j].vec)

                d=distances[(clust[i].id,clust[j].id)]

                if d<closest:
                    closest=d
                    lowestpair=(i,j)

        # 计算两个聚类的平均值
        mergevec=[
        (clust[lowestpair[0]].vec[i]+clust[lowestpair[1]].vec[i])/2.0 
        for i in range(len(clust[0].vec))]

        # 建立新的聚类
        newcluster=bicluster(mergevec,left=clust[lowestpair[0]],
                         right=clust[lowestpair[1]],
                         distance=closest,id=currentclustid)

        # 不在原始数据集合中的聚类,其id为负数
        currentclustid-=1
        del clust[lowestpair[1]]
        del clust[lowestpair[0]]
        clust.append(newcluster)

    return clust[0]

图示如下:

转载于:https://www.cnblogs.com/helmsyy/p/7765796.html

相关文章:

  • 【探路者】第三周立会报告6(总第18次)
  • 如何在Windows下安装Linux子系统(Ubuntu,openSUSU,SUSU Linux Server)
  • 很想说点什么
  • 使用vue-cli构建vue项目流程
  • Python学习笔记(1)-列表
  • 【20171103中】sqli-libs Less 40-49
  • 迷宫问题
  • js:字符串(string)转json
  • 硬币收集问题
  • 无缝连续滚动
  • Django--权限组件
  • 电子凭证 : Java 生成 Pdf
  • 前端资源管理工具sourcetree
  • Sourcetree中切换到其他分支,临时分支的这次提交丢失
  • [总结]FFMPEG视音频编解码零基础学习方法
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • ➹使用webpack配置多页面应用(MPA)
  • 2017-08-04 前端日报
  • Android 架构优化~MVP 架构改造
  • co模块的前端实现
  • Create React App 使用
  • fetch 从初识到应用
  • JS笔记四:作用域、变量(函数)提升
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue 动态创建 component
  • Vultr 教程目录
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 创建一种深思熟虑的文化
  • 前端面试总结(at, md)
  • 使用SAX解析XML
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 数据可视化之 Sankey 桑基图的实现
  • 译有关态射的一切
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • #LLM入门|Prompt#3.3_存储_Memory
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (4)(4.6) Triducer
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (C语言)fgets与fputs函数详解
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (二)Linux——Linux常用指令
  • (黑马C++)L06 重载与继承
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)Scala的“=”符号简介
  • (转)scrum常见工具列表
  • (转)德国人的记事本
  • **PHP分步表单提交思路(分页表单提交)
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案