DBscan实现


采用C++ 实现基于密度聚类算法DBScan的实现
资源截图
代码片段和文件信息
#include “ClusterAnalysis.h“
#include 
#include 
#include 

/*
函数:聚类初始化操作
说明:将数据文件名,半径,领域最小数据个数信息写入聚类算法类,读取文件,把数据信息读入写进算法类数据集合中
参数:
char* fileName;    //文件名
double radius;    //半径
int minPTs;        //领域最小数据个数
返回值: true;    */
bool ClusterAnalysis::Init(char* fileName double radius int minPTs)
{
this->radius = radius;        //设置半径
this->minPTs = minPTs;        //设置领域最小数据个数
this->dimNum = DIME_NUM;    //设置数据维度
ifstream ifs(fileName);        //打开文件
if (!ifs.is_open())                //若文件已经被打开,报错误信息
{
cout << “Error opening file“;    //输出错误信息
exit(-1);                        //程序退出
}

unsigned long i = 0;            //数据个数统计
while (!ifs.eof())                //从文件中读取POI信息,将POI信息写入POI列表中
{
DataPoint tempDP;                //临时数据点对象
double tempDimData[DIME_NUM];    //临时数据点维度信息
for (int j = 0; j {
ifs >> tempDimData[j];
}
tempDP.SetDimension(tempDimData);    //将维度信息存入数据点对象内

//char date[20]=““;
//char time[20]=““;
////double type;    //无用信息
//ifs >> date;
//ifs >> time;    //无用信息读入

tempDP.SetDpId(i);                    //将数据点对象ID设置为i
tempDP.SetVisited(false);            //数据点对象isVisited设置为false
tempDP.SetClusterId(-1);            //设置默认簇ID为-1
dadaSets.push_back(tempDP);            //将对象压入数据集合容器
i++;        //计数+1
}
ifs.close();        //关闭文件流
dataNum = i;            //设置数据对象集合大小为i
cout << “总数据量: “ << dataNum << “ 条“ << endl;
for (unsigned long i = 0; i {
SetArrivalPoints(dadaSets[i]);            //计算数据点领域内对象
}
return true;    //返回
}

/*
函数:将已经过聚类算法处理的数据集合写回文件
说明:将已经过聚类结果写回文件
参数:
char* fileName;    //要写入的文件名
返回值: true    */
bool ClusterAnalysis::WriteToFile(char* fileName)
{
ofstream of1(fileName);                                //初始化文件输出流
for (unsigned long i = 0; i {
for (int d = 0; d of1 << dadaSets[i].GetDimension()[d] << ‘ ‘;
of1 << dadaSets[i].GetClusterId() << endl;        //将所属簇ID写入文件
}
of1.close();    //关闭输出文件流
return true;    //返回
}

/*
函数:设置数据点的领域点列表
说明:设置数据点的领域点列表
参数:
返回值: true;    */
void ClusterAnalysis::SetArrivalPoints(DataPoint& dp)
{
for (unsigned long i = 0; i {
double distance = GetDistance(dadaSets[i] dp);    //获取与特定点之间的距离
if (distance <= radius && i != dp.GetDpId())        //若距离小于半径,并且特定点的id与dp的id不同执行
dp.GetArrivalPoints().push_back(i);            //将特定点id压力dp的领域列表中
}
if (dp.GetArrivalPoints().size() >= minPTs)            //若dp领域内数据点数据量> minPTs执行
{
dp.SetKey(true);    //将dp核心对象标志位设为true
return;                //返回
}
dp.SetKey(false);    //若非核心对象,则将dp核心对象标志位设为false
}


/*
函数:执行聚类操作
说明:执行聚类操作
参数:
返回值: true;    */
bool ClusterAnalysis::DoDBSCANRecursive()
{
unsigned long clusterId = 0;                        //聚类id计数,初始化为0
for (unsig

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5901  2016-07-09 11:38  dbscandbscanClusterAnalysis.cpp

     文件        932  2016-07-08 23:07  dbscandbscanClusterAnalysis.h

     文件       1348  2016-07-07 21:26  dbscandbscanDataPoint.cpp

     文件       1296  2016-07-07 21:24  dbscandbscanDataPoint.h

     文件       3528  2016-11-15 21:49  dbscandbscandbscan.cpp

     文件       3698  2016-11-15 10:22  dbscandbscandbscan.vcxproj

     文件       1358  2016-07-08 23:01  dbscandbscandbscan.vcxproj.filters

     文件        164  2016-09-21 15:50  dbscandbscandbscan.vcxproj.user

     文件       1820  2016-09-21 17:08  dbscandbscanDebugcl.command.1.tlog

     文件      22016  2016-09-21 17:08  dbscandbscanDebugCL.read.1.tlog

     文件       1032  2016-09-21 17:08  dbscandbscanDebugCL.write.1.tlog

     文件     427688  2016-11-15 10:22  dbscandbscanDebugClusterAnalysis.obj

     文件      59178  2016-11-15 10:22  dbscandbscanDebugDataPoint.obj

     文件         51  2016-09-21 17:10  dbscandbscanDebugdbscan.lastbuildstate

     文件       2265  2016-11-15 16:05  dbscandbscanDebugdbscan.log

     文件     193442  2016-11-15 16:05  dbscandbscanDebugdbscan.obj

     文件       3404  2016-11-15 16:05  dbscandbscanDebugdbscan.tlogcl.command.1.tlog

     文件      34170  2016-11-15 16:05  dbscandbscanDebugdbscan.tlogCL.read.1.tlog

     文件       1466  2016-11-15 16:05  dbscandbscanDebugdbscan.tlogCL.write.1.tlog

     文件        158  2016-11-15 16:05  dbscandbscanDebugdbscan.tlogdbscan.lastbuildstate

     文件       4320  2016-11-15 16:05  dbscandbscanDebugdbscan.tloglink.command.1.tlog

     文件       7446  2016-11-15 16:05  dbscandbscanDebugdbscan.tloglink.read.1.tlog

     文件        534  2016-11-15 16:05  dbscandbscanDebugdbscan.tloglink.write.1.tlog

     文件          2  2016-09-21 17:08  dbscandbscanDebuglink-cvtres.read.1.tlog

     文件          2  2016-09-21 17:08  dbscandbscanDebuglink-cvtres.write.1.tlog

     文件          2  2016-09-21 17:08  dbscandbscanDebuglink-rc.read.1.tlog

     文件          2  2016-09-21 17:08  dbscandbscanDebuglink-rc.write.1.tlog

     文件       2994  2016-09-21 17:08  dbscandbscanDebuglink.command.1.tlog

     文件       7456  2016-09-21 17:08  dbscandbscanDebuglink.read.1.tlog

     文件        498  2016-09-21 17:08  dbscandbscanDebuglink.write.1.tlog

............此处省略19个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)