• 大小: 2.05MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-12
  • 语言: C/C++
  • 标签: 密度聚类  

资源简介

采用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] << ‘\t‘;
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  dbscan\dbscan\ClusterAnalysis.cpp

     文件        932  2016-07-08 23:07  dbscan\dbscan\ClusterAnalysis.h

     文件       1348  2016-07-07 21:26  dbscan\dbscan\DataPoint.cpp

     文件       1296  2016-07-07 21:24  dbscan\dbscan\DataPoint.h

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

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

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

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

     文件       1820  2016-09-21 17:08  dbscan\dbscan\Debug\cl.command.1.tlog

     文件      22016  2016-09-21 17:08  dbscan\dbscan\Debug\CL.read.1.tlog

     文件       1032  2016-09-21 17:08  dbscan\dbscan\Debug\CL.write.1.tlog

     文件     427688  2016-11-15 10:22  dbscan\dbscan\Debug\ClusterAnalysis.obj

     文件      59178  2016-11-15 10:22  dbscan\dbscan\Debug\DataPoint.obj

     文件         51  2016-09-21 17:10  dbscan\dbscan\Debug\dbscan.lastbuildstate

     文件       2265  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.log

     文件     193442  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.obj

     文件       3404  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\cl.command.1.tlog

     文件      34170  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\CL.read.1.tlog

     文件       1466  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\CL.write.1.tlog

     文件        158  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\dbscan.lastbuildstate

     文件       4320  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\link.command.1.tlog

     文件       7446  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\link.read.1.tlog

     文件        534  2016-11-15 16:05  dbscan\dbscan\Debug\dbscan.tlog\link.write.1.tlog

     文件          2  2016-09-21 17:08  dbscan\dbscan\Debug\link-cvtres.read.1.tlog

     文件          2  2016-09-21 17:08  dbscan\dbscan\Debug\link-cvtres.write.1.tlog

     文件          2  2016-09-21 17:08  dbscan\dbscan\Debug\link-rc.read.1.tlog

     文件          2  2016-09-21 17:08  dbscan\dbscan\Debug\link-rc.write.1.tlog

     文件       2994  2016-09-21 17:08  dbscan\dbscan\Debug\link.command.1.tlog

     文件       7456  2016-09-21 17:08  dbscan\dbscan\Debug\link.read.1.tlog

     文件        498  2016-09-21 17:08  dbscan\dbscan\Debug\link.write.1.tlog

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

评论

共有 条评论

相关资源