设为首页 加入收藏

TOP

Chameleon两阶段聚类算法(三)
2015-11-21 01:44:36 来源: 作者: 【 】 浏览:1
Tags:Chameleon 阶段 算法
s) { System.out.print(MessageFormat.format("({0}, {1}) ", p.x, p.y)); } System.out.println(); i++; } } /** * 创建聚簇 */ public void buildCluster() { // 第一阶段形成小聚簇 connectedGraph(); searchSmallCluster(); System.out.println("第一阶段形成的小簇集合:"); printClusters(initClusters); // 第二阶段根据RI和RC的值合并小聚簇形成最终结果聚簇 combineSubClusters(); System.out.println("最终的聚簇集合:"); printClusters(resultClusters); } }
调用类Client.java:

?

?

package DataMining_Chameleon;

/**
 * Chameleon(变色龙)两阶段聚类算法
 * @author lyq
 *
 */
public class Client {
	public static void main(String[] args){
		String filePath = "C:\\Users\\lyq\\Desktop\\icon\\graphData.txt";
		//k-近邻的k设置
		int k = 1;
		//度量函数阈值
		double minMetric = 0.1;
		
		ChameleonTool tool = new ChameleonTool(filePath, k, minMetric);
		tool.buildCluster();
	}
}

?

算法输出如下:

?

第一阶段形成的小簇集合:
聚簇1:(2, 2) (3, 1) (3, 4) (5, 3) 
聚簇2:(3, 14) (10, 14) (11, 13) 
聚簇3:(8, 3) (10, 4) 
聚簇4:(8, 6) (9, 8) (10, 7) (12, 8) (10, 10) 
聚簇5:(12, 15) (14, 15) 
聚簇6:(14, 7) (15, 8) (14, 9) 
最终的聚簇集合:
聚簇1:(2, 2) (3, 1) (3, 4) (5, 3) (8, 3) (10, 4) 
聚簇2:(3, 14) (10, 14) (11, 13) (12, 15) (14, 15) 
聚簇3:(8, 6) (9, 8) (10, 7) (12, 8) (10, 10) (14, 7) (15, 8) (14, 9) 

?

图形展示情况如下:

首先是第一阶段形成小簇集的结果:

\

然后是第二阶段合并的结果:

\

与结果相对应,请读者细细比较。

算法总结

在算法的实现过程中遇到一个比较大的困惑点在于2个簇近和并的时候,合并边的选取,我是直接采用的是最近的2对顶点进行连接,显然这是不合理的,当簇与簇规模比较大的时候,这个连接边需要变多,我有想过做一个计算函数,帮我计算估计要连接几条边。这里再提几点变色龙算法的优缺点,首先是这个算法将互连性和近似性都考虑了进来,其次他能发现高质量的任意形状的簇,问题有,第一与KNN算法一样,这个k的取值永远是一个痛,时间复杂度高,有可能会达到O(n*n)的程度,细心的博友一定能观察到我好多地方用到了双次循环的操作了。

首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇JDBC调用存储函数存储过程 下一篇数据行转列实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: