代码原始出处:http://blog.youkuaiyun.com/k76853/article/details/50440182zhouxianen,20170322
修改:
- 能准确分类边界点、核心点和噪音点,并输出
- 维度扩展,原来程序只能读取、聚类和显示二维特征数据,扩展后,可以处理n维数据
- 定义了init()函数初始化化类成员变量(也可以不用)
- 领域半径eps判断条件修改为小于等于,这是为保证与matlab版本形式一致
输入数据类型:xx.txt文件
输入txt文件格式如下(数据维度可以是n维):
1.400000,0.200000
1.400000,0.200000
1.300000,0.200000输出结果:控制台输出,同时输出clustering.txt文件 输出txt文件格式如下:
1.4,0.2,1
1.4,0.2,1
1.3,0.2,1 其中第三列为分类标记,数据之间用逗号分开 本文件中附上了两组组测试数据和测试结果(测试数据来源:http://yarpiz.com/255/ypml110-dbscan-clustering)
二维测试数据:dataPoint2.txt 四维测试数据:dataPoint4.txt
输出结果:clustering2.txt,clustering4.txt (eps=0.25,MinPts=3时结果)
#include "DBSCAN.h"
int main(int argc, char** argv) {
vector<point> dataset = openFile("788points.txt");
DBSCAN(dataset, 1.2,4);
//cout << pointType_UNDO << pointType_NOISE
// <<pointType_BORDER
// <<pointType_CORE << endl;
return 0;
}
//#if !defined(_DBSCAN_H_INCLUDED_)
//#define _DBSCAN_H_INCLUDED_
#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <limits>
#include <cmath>
#include <stack>
#include <map>
using namespace std;
enum//枚举类型默认值为0-3
{
pointType_UNDO,
pointType_NOISE,//噪声
pointType_BORDER,//边界点
pointType_CORE//核心点
};
class point {
public:
float x;
float y;//~x,y坐标
vector<float> xn;
//vector<float> yn;
int cluster;//第几个簇
int pointType; //1 noise 2 border 3 core
int pts; //每个点周围包含的点数
int corePointID;//核心点的标号
vector<int> corepts;
int visited;//点是否被遍历,1代表被遍历,0代表没被遍历
void init();//初始化
//point();
//point(float a, float b, int c) {
// x = a;
// y = b;
// cluster = c;
//};
point(vector<float> an, int c) {
//three or more dimension
this->xn = an;
this->cluster = c;//
};
};
float stringToFloat(string i);//把字符串转换为浮点数
vector<point> openFile(const char* dataset);//打开文件
float squareDistance(point a, point b);//计算距离
float squareDistanceVect(point a, point b);////多维数据算欧氏距离
void DBSCAN(vector<point> dataset, float Eps, int MinPts);
//#endif
#include "DBSCAN.h"
//#include "DBSCAN.h"
int clusterID = 0;
void point::init

本文详细介绍了DBSCAN聚类算法的C++实现,包括代码优化,支持处理多维数据,以及边界点、核心点和噪音点的准确分类。通过读取xx.txt文件,输出clustering.txt结果文件,展示了算法在不同维度数据上的应用,如dataPoint2.txt和dataPoint4.txt的测试数据。
最低0.47元/天 解锁文章
2726

被折叠的 条评论
为什么被折叠?



