ClustLib——A C++ Data Clustering Framework(一):数据集相关类设计

原创 2015年11月18日 23:35:32

数据(Data)是一个聚类算法(a clustering algorithm)的重要组成部分,不然所聚为何物呀,也是聚类算法的处理对象和意图。因此在设计和实现聚类算法之前,我们需要进行数据的设计与实现(存储数据的结构及相关类的关系)。
本文作为 C++ 数据聚类框架的 ClustLib 系列的第一篇文章,我们首先进行基础类(Foundation Classes),也即数据集(datasets)的设计与实现。在数据聚类的相关文献中,一个数据集(dataset)记录(record)的集合(a collection of records),而一个记录又被属性(attributes)所描述(characterized by a set of attributes),正如本文的第一幅图表所示。

从一张最终呈现出来的表(table,代表数据集),来建立起表中元素与代码中不同的对应关系(采用面向对象的方式)。

客户端程序


这里写图片描述

我们先来看客户端程序,进一步思考如何进行类和接口的设计。我们来对如下形式的数据集进行数据结构(也即面向对象中的类)的设计:

#include <boost/shared_ptr.hpp>
#include "./datasets/dataset.hpp"

using namespace std;
using namespace ClusLib;

int main(int, char**)
{
    // 首先创建所谓的模式Schema
    // 如同我们在word中建一张表,先建的是表头,

    // Schema类继承自Container<boost::shared_ptr<AttrInfo>>
    // 为显示提供其构造函数
    boost::shared_ptr<Schema> schema(new Schema);
    boost::shared_ptr<DAttrInfo> labelInfo(new DAttrInfo("Label"));            // 标签列,也即上例中的最后一列
    boost::shared_ptr<DAttrInfo> idInfo(new DAttrInfo("Identifier"));

    return 0;
}

属性(Attributes)

一个属性(Attribute)标识一条记录中的一个独立的成分。我们可将属性分为四类(four categories):ratio,interval,ordinal 以及 nominal。我们可以使用一个实数(a real number)存储一个 ratio 或者 interval 型属性,使用一个整数(integer)来存储一个 ordinal 或者 nominal 型属性。

为了实现对属性(Attributes)的抽象,我们设计了四个基础类(Foundation Classes),分别为:AttrValueAttrInfoCAttrInfo 以及 DAttrInfo。其UML类图如下所示:


这里写图片描述

AttrInfo 类的说明:

  • 用来操作属性值

    属于操纵类;

  • 该类代表属性信息,而非属性本身

    也即本身不持有值内容
    所以当涉及 AttrInfo 的比较(乃至CAttrInfo/DAttrInfo 的比较时)
    并不涉及值的(内容的)比较,更多的是比如属性名,属性类型,此类的抽象层面的比较;

    bool AttrInfo::equal_shallow(const AttrInfo& ai) const
    {
        return _name == ai.name() && _type == ai.type();
    }
    bool CAttrInfo::euqal(const AttrInfo& ai) const
    {
        return equal_shallow(ai) && ai.can_cast_to_c();
    }
  • 真正的保存值的类在 AttrValue

记录(Record)

需要依靠Schema才能建立。

数据集(Dataset)

也是需要Schema才能建立。

版权声明:本文为博主原创文章,未经博主允许不得转载。

knn分类器c++实现(含测试数据IRIS)

  • 2014年06月19日 12:13
  • 719KB
  • 下载

面向小数据集构建图像分类模型

本文地址:http://blog.keras.io/building-powerful-image-classification-models-using-very-little-data.html ...
  • u012260637
  • u012260637
  • 2017年02月02日 13:20
  • 2231

DATA SET (数据集)

1.什么是DATASET         数据集是逻辑上相关的数据集合,主机上的数据、编写的程序源码存放于Data Set中。简而言之:数据集就是类似PC机中的“文件”。         根据...
  • ycc5617
  • ycc5617
  • 2013年10月07日 22:32
  • 2517

聚类(clustering)与分类(Classification)的区别

当把聚类(Clustering)和分类(Classification)放到一起时,很容易弄混淆两者的概念,下分别对两个概念进行解释。       1 聚类(Clustering):       ...
  • gdp12315
  • gdp12315
  • 2015年11月11日 10:59
  • 7581

KNN算法实现(Mnist数据集)

参考 http://blog.csdn.net/wds2006sdo/article/details/51933044 #!/usr/bin/python # -*- coding:utf8 -*-...
  • wlzard
  • wlzard
  • 2017年11月01日 19:47
  • 68

常用图像数据集大全(分类,跟踪,分割,检测等)

常用图像数据集大全(分类,跟踪,分割,检测等) 1.搜狗实验室数据集: http://www.sogou.com/labs/dl/p.html 互联网图片库来自sogou图片搜索...
  • u014696921
  • u014696921
  • 2016年11月08日 14:54
  • 1457

常用图像数据集大全(分类,跟踪,分割,检测等)

常用图像数据集大全(分类,跟踪,分割,检测等) 1.搜狗实验室数据集: http://www.sogou.com/labs/dl/p.html 互联网图片库来自sogou图片搜索所索引的部分...
  • tiandijun
  • tiandijun
  • 2015年03月22日 18:02
  • 17489

用朴素贝叶斯对wine数据集分类

该实验的数据集是MostPopular Data Sets(hits since 2007)中的wine数据集,这是是对在意大利同一地区生产的三种不同品种的酒,做大量分析所得出的数据。这些数据包括了三...
  • qq_22562949
  • qq_22562949
  • 2015年11月10日 09:51
  • 4372

聚类算法教程(3):层次聚类算法Hierarchical Clustering Algorithms

基本工作原理 给定要聚类的N的对象以及N*N的距离矩阵(或者是相似性矩阵), 层次式聚类方法的基本步骤(参看S.C. Johnson in 1967)如下: 1.     将每个对象归为一类, 共得到...
  • ningyaliuhebei
  • ningyaliuhebei
  • 2015年05月29日 17:18
  • 1329

常用图像数据集大全(分类,跟踪,分割,检测等)

常用图像数据集大全(分类,跟踪,分割,检测等) 1.搜狗实验室数据集: http://www.sogou.com/labs/dl/p.html 互联网图片库来自sogou图片搜索...
  • twinkle_star1314
  • twinkle_star1314
  • 2017年02月10日 11:58
  • 975
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ClustLib——A C++ Data Clustering Framework(一):数据集相关类设计
举报原因:
原因补充:

(最多只允许输入30个字)