面向对象——类设计(六)——算法类
来源:互联网 发布:易语言文本处理源码 编辑:程序博客网 时间:2024/06/05 11:30
对于一个基于面向对象的数据聚类的基础类库(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; // 聚合关系};
0 0
- 面向对象——类设计(六)——算法类
- 《设计模式精解》学习笔记(六)—— 面向对象的新视角
- 《设计模式精解》学习笔记(六)—— 面向对象的新视角
- 设计模式精解学习笔记(六)—— 面向对象的新视角
- 可复用面向对象软件基础——设计模式(六)之原型模式
- Java面向对象设计模式(六)——适配器模式
- 【面向对象】——六原则
- 面向对象分析与设计——类与对象
- JAVA基础六—面向对象二
- 面向对象——类设计(一)
- 面向对象——类设计(二)
- 面向对象——类设计(三)
- 面向对象——类设计(四)
- 面向对象——类设计(五)
- 面向对象——类设计(七)
- 面向对象 —— 类设计(八)
- 面向接口设计和编程——(面向对象、面向接口、面向过程、面向实现)
- Python学习笔记(六)——面向对象编程
- PAT (Advanced Level) Practise 1055 The World's Richest (25)
- Linux内存管理误区问答总结
- arch linux 时钟同步服务
- ibatis的cacheModel
- jquery html5 视频播放控制
- 面向对象——类设计(六)——算法类
- input checkbox 复选框的操作示例
- XML概述
- 如何在终端输出带颜色的字体?PHP CLI输出颜色
- activity的启动模式
- Linux开启mysql远程连接的设置步骤
- Android消息推送1----原始的socket长链接
- HDU1285拓扑排序实例分析
- IOS学习 UIDatePicker 包含时间格式转换