資源簡介
采用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?<“總數據量:?“?< 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?< of1?< }
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\li
?????文件???????7446??2016-11-15?16:05??dbscan\dbscan\Debug\dbscan.tlog\li
?????文件????????534??2016-11-15?16:05??dbscan\dbscan\Debug\dbscan.tlog\li
?????文件??????????2??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件??????????2??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件??????????2??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件??????????2??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件???????2994??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件???????7456??2016-09-21?17:08??dbscan\dbscan\Debug\li
?????文件????????498??2016-09-21?17:08??dbscan\dbscan\Debug\li
............此處省略19個文件信息
評論
共有 條評論