Kmedoids算法Java实现(可处理噪声)

本文介绍了如何使用Java实现Kmedoids算法,并针对包含正常数据和噪声数据的场景进行操作。通过运算,将不同簇的数据分别保存到txt文件,异常点则单独存储。最终,使用MATLAB进行可视化展示,提供了100个正常点和10个异常点的运行示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用随机数产生原始数据,包括正常数据和噪声数据。运算后将不同簇的数据放入不同的txt文件中,异常点单独存放于一个文件,然后用matlab画图。100个正常点,10个异常点的运行结果如图:

Kmedoids.java

import java.io.*;
import java.util.*;
public class Kmedoids {
	int k;							//dimensionality
	int len;
	double threshold=6;				//distinguish the normal and noise points 
//	double[] ceneru;
//	double[][] dismatrix;
//	double	undis;				
//	double[] crita;				
//	int repeat;				
	
	int node;						//the number of normal points
	int noinode;					//the number of noise points
	DataObject[] center;			//center point
	ArrayList<DataObject> data;		//store all the points
	public Kmedoids(int k,int len,int node,int noinode) throws IOException{
		this.k=k;
		this.node=node;
		this.noinode=noinode;
		this.len=len;
		center=new DataObject[k];
		Random random=new Random(System.currentTimeMillis());
		data=new DataSource(node,noinode,len).getObjects();
		int[] equal=new int[k];
		for(int i=0;i<k;){
			int j=0;
			int t=random.nextInt(node+noinode);
			for(;j<=i;j++){	
				if(t==equal[j]){
					break;
				}
				else{
					continue;
				}
			}//for...j
			if(j>i){
				DataObject tmp=data.get(t);
				equal[i]=t;
				center[i++]=tmp;
			}
		}//for...i		
	}
	//initialize all points,classify all of them into different centers based on distance
	private void initCenter(){
		Iterator<DataObject> iter=data.iterator();
		while(iter.hasNext()){
			int number1=0;
			int number2=0;
			DataObject point=iter.next();
			double max
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值