对于一个基于面向对象的数据聚类的基础类库(Class Library)而言,算法类(Algorithm,这里特指聚类算法 clustering algorithms)的设计是必不可少的一环。

聚类算法名目繁多,但都具有如下的三种共同的属性:

  • (1)参数(parameters or arguments)
  • (2)结果(clustering results)
  • (3)聚类算法本身(perform data clustering)
  • (4)不同的聚类算法需要不同的参数集(Arguments),产生不同的聚类结果(Results);

Arguments

所有的聚类算法在执行数据聚类的时候无一例外都需要参数(有时甚至是超参),而且不同的算法需要不同类型的参数。例如,k-means 算法需要首先指定聚类的数目,FCM聚类算法同时也需要样本与类别的隶属度。

Additional 类用于持有任意可见(类型任意 boost::any)的参数;

class Additional
{
public:const boost::any& get(const std::string& name) const;void insert(const std::string& name, const boost::any& value);std::map<std::string, boost::any> additional;
protected:Additional() {}
};

在我们的设计中,我们将数据集(dataset)以及距离度量的类(distance measure,几乎所有的聚类算法都需要距离的度量)也作为参数。

class Arguments :public Additional
{
public:boost::shared_ptr<Dataset> ds;boost::shared_ptr<Distance> dist;
};

Results

与 Arguments 类相似,不同的聚类算法产生不同的聚类结果,如 k-means 聚类算法产生 hard clustering results,而 FCM 聚类算法产生 fuzzy clustering results。

class Results :public Additional
{
public:void reset();// 清空聚类结果std::vector<Size> CM;// 存储样本的所属类别// 这不正是聚类算法要做的事吗
};

Clustering Algorithms

这里,我们将给出全部聚类算法的基类 Algorithm 的设计;

class Algorithm
{
public:virtual ~Algorithm(){}virtual Arguments& getArguments();// non-const 型成员函数virtual const Results& getResults() const;virtual void reset() const;virtual void clusterize();
protected:virtual void setupArguments();virtual void performClustering() const = 0;virtual void fetchResults() const = 0;boost::shared_ptr<Dataset> _ds;mutable Results _results;Arguments _arguments;// 聚合关系
};

面向对象——类设计(六)——算法类相关推荐

  1. 面向对象——类设计(五)

    面向对象--类设计(一) 面向对象--类设计(二) 面向对象--类设计(三) 面向对象--类设计(四) (1)约定:私有成员函数:以下划线开头,_:公有成员函数则不必: 设计顺序 类首先是对成员变量的 ...

  2. 面向对象——类设计(二)

    面向对象--类设计(一) 拷贝构造函数 拷贝构造函数(copy ctor)和拷贝赋值(copy assignment)操作符: 编译器创建的版本只是单纯地将来源对象的每一个non-static成员变量 ...

  3. 面向对象 —— 类设计(九) —— 类设计的内在一致性

    类设计的内在一致性,可以理解为"逻辑一致性".所谓逻辑一致性,比如说,网络上流传甚广的"俗话说,俗话又说"系列,"宰相肚里"vs " ...

  4. 面向对象 —— 类设计(十二)—— 全局变量和成员变量

    全局变量和成员变量都提供了一种共享和通信机制: 只不过成员变量的共享和通信仅限于类内部,全局变量则是全局可见: 更为重要的是,类的访问修饰符概念为成员变量的访问和修改施加了更多的限制,也即在面向对象的 ...

  5. 面向对象 —— 类设计(八)

    私有成员与全局函数 根据信息局部化的原则,局部使用的功能(或者更浅薄的理解为只被当前类的其他成员函数调用的,被使用的场合单一)不应定义为全局函数. 成员变量与成员函数 (1)思考:成员变量是一个类得以 ...

  6. 面向对象——类设计(一)

    如果一个类将自己的成员变量声明为protected,则该类很有可能作为多态基类 一个类的成员变量一般不声明为public(如果非声明为public不可的话,使用struct岂不是更好),而protec ...

  7. 面向对象 —— 类设计(十)—— 成员函数

    注意区别同名成员函数接口所属的类类型: BinNodePosi(T) BinNode<T>::insertAsLC(const T&); BinNodePosi(T) BinTre ...

  8. 面向对象——类设计(七)

    定义(definition)即类.类间关系 (1)A cluster is a collection of objects or records that share the same propert ...

  9. 面向对象 —— 类设计(十一)—— 构造与析构

    1. 构造函数 构造函数的形式参数:表达的是该对象成立的前提,也即依赖(对象成立依赖于那些其他对象) 构造函数的功能 完成成员变量的初始化工作: 构造函数的分类 默认构造 基于复制的构造

最新文章

  1. 你知道怎么在生产环境下部署tomcat吗?,灵魂拷问
  2. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  3. 045_Collapse折叠面板
  4. 从输入url到显示网页,后台发生了什么?
  5. 网工协议基础(4)TCP/UDP协议
  6. 直接使用Berkeley DB的Memory Pool 功能
  7. python--从入门到实践--chapter 10 文件及错误
  8. C++产生指定范围内的随机数/随机小数
  9. 面对对象三大特性之一继承性。
  10. 基于STM32F103ZET6 HC_SR501人体红外感应
  11. 登录首页时报错:java.lang.IllegalArgumentException (不合法的参数异常)
  12. 【微机实验系列】标准输入输出系统
  13. JADE学习笔记1:JADE简介与配置
  14. QQ隐藏福利二-----------------那些免费的挂件和气泡
  15. excel多元线性拟合_急,如何用excel拟合多元函数
  16. vue-pdf查看pdf文件及打印乱码问题处理
  17. 计算机运行大型游戏特热,玩大型游戏cpu温度多少度算正常
  18. 突破某些网站限制只能由微信打开的尴尬场景
  19. 我看无损音频APE和FLAC
  20. 一牛网5G产品及方案:mtk5G/高能5G核心板/5GCPE/5G相关仪器

热门文章

  1. C语言pop_back用法,【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)...
  2. Doris之Routine Load
  3. 面向对象(OOP)基本概念及基本语法
  4. scala的模式匹配
  5. 猜字游戏(python版加C语言版)
  6. Python基础——字典(dictionary)
  7. 稀疏矩阵的创建--十字链表
  8. php程序员需要精通js的程度_PHP程序员基本要求和必备技能
  9. mysql read uncomit_mysql配置文件,帮看看
  10. 你猜一个 TCP 连接上面能发多少个 HTTP 请求