亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? isodata.cpp

?? 用C語言實現了ISODATA算法,包括ISODATA.vcproj
?? CPP
字號:
// ISODATA.cpp

#include "stdafx.h"
#include "ISODATA.h"
#include "Sort.h"

using namespace std;

// class ISODATA

extern int N;
extern int dim;

ISODATA::ISODATA()
{
	c = 2;	// 預期的類數;
	Nc = 1;	// 初始聚類中心個數(可以不等于c);
	theta_n = 2;	// 每一類中允許的最少模式數目(若少于此數,就不能單獨成為一類);
	theta_s = 1;	// 類內各分量分布的標準差上限(大于此數就分裂);
	theta_D = 4;	// 兩類中心間的最小距離下限(若小于此數,這兩類應合并);
	L = 1;	// 在每次迭代中可以合并的類的最多對數;
	I = 4;	// 允許的最多迭代次數;

	_d = 100;			// 總體平均距離
	Ip = 0;				// 迭代次數
	
	double D[MAXNUM][MAXNUM];	// 各類對中心間的距離

	for(int i=0;i<MAXNUM;i++)
		for(int j=0;j<MAXNUM;j++)
			D[i][j] = MAXDOUBLE;
}

ISODATA::~ISODATA()
{
}

// 設置參數
int ISODATA::SetupPattern(Pattern * pattern)
{
	for(int i=0;i<N;i++)
		x[i] = pattern[i];

	return N;
}

// 算法實現步驟
int ISODATA::Process()
{
	bool changed = true;
	// 1.預置

	// 2)將待分類的模式特征矢量x1,x2,...,xn讀入;
	// SetupPattern();

	
	// 3)選定初始聚類中心,可從待分類的模式特征矢量集{xi}中任選Nc個模式特征矢量作為初始聚類中心zj(j=1,2,...,Nc).
	InitCenter();

step1:
	// 1)設定聚類分析控制參數:
	SetupParameter();

step2:
	// 2.按最小距離原則將模式集(xi)中每個模式分到某一類中
	changed = false;
	Clustering();
	if(Ip == 0)
		cout << endl << "------------- 選取初始聚類中心 ---------------" << endl;
	else
		cout << endl << "-------------第" << Ip << "次迭代-------------" << endl;
	PrintSort();

step3:
	// 3.依據theta_n判斷合并。如果類wj中樣本數nj<theta_n,則取消該類的中心zj,Nc = Nc - 1;轉至 2.
	if(CombinBytheta_n())
		goto step2;
step4:
	// 計算分類后的參數:各類中心、類內平均距離及總體平均距離。
	CalParameter();

step5:
	// 依據Ip, Nc 判斷停止\分裂或合并。
	if(Ip == I)
	{
		theta_D = 0;
		goto step9;
	}
	else if(Nc <= c/2)
		goto step6;
	else if(Nc >= 2*c)
		goto step9;
	else if(Ip%2 == 1)	//Nc> c/2 && Nc < 2*c
		goto step6;
	else
		goto step9;

step6:
	// 計算各類類內距離的標準差矢量
	CalSigma();

step7:
	// 求出每一聚類類內距離標準差矢量sigma中的最大分量sigma_max
	// CalMaxSigma();	// 由于在Sort類中已進行計算,這里不做任何處理

step8:
	// 判斷分裂
	if(Split())
	{
		changed = true;
		Ip++;
		goto step2;
	}

step9:
	// 計算各類對中心間的距離
	CalCenterDis();

step10:
	// 依據theta_D判斷合并
	if(CombinBytheta_D())
		changed = true;

step11:
	// 判斷循環還是退出
	if(Ip >= I)
	{
		cout << endl << endl << "==========經過" << Ip << "次迭代,達到迭代次數===========" << endl;
		goto over;
	}
	else if(changed == false)
	{
		Ip++;
		cout << endl << endl << "==========經過" << Ip << "次迭代,算法收斂===========" << endl;
		goto over;
	}
	else
	{
		Ip++;

		char ch;
		cout << "本次迭代完成,是否需要改變參數(Y/N)?: ";
		cin >> ch;
		if(ch == 'y' || ch == 'Y')
			goto step1;
		else 
			goto step2;
	}

over:	
	PrintSort();
	return Ip;
}

// 3)選定初始聚類中心
void ISODATA::InitCenter()
{
	srand( (unsigned)time( NULL ) );
	int num = N;
	int no[MAXNUM];

	for(int i=0;i<N;i++)
		no[i] = i;

	for(int j=0;j<Nc;j++)
	{		
		int k = rand()%num;
		w[j].z = x[no[k]];
		w[j].z.n = 0;
		for(int l=k;l<num;l++)
			no[l] = no[l+1];
		num--;
	}
}

// step1:	設定聚類分析控制參數
void ISODATA::SetupParameter()
{
	cout << "設定聚類分析控制參數:" << endl;
	cout << "預期的類數 c:";
	cin >> c;
	cout << "初始聚類中心個數(可以不等于c)Nc:";
	cin >> Nc;
	cout << "每一類中允許的最少模式數目(若少于此數,就不能單獨成為一類)theta_n:";
	cin >> theta_n;
	cout << "類內各分量分布的標準差上限(大于此數就分裂)theta_s:";
	cin >> theta_s;
	cout << "兩類中心間的最小距離下限(若小于此數,這兩類應合并)theta_D:";
	cin >> theta_D;
	cout << "在每次迭代中可以合并的類的最多對數 L:";
	cin >> L;
	cout << "允許的最多迭代次數 I:";
	cin >> I;
}

// step2:	按最小距離原則將模式集(xi)中每個模式分到某一類中
void ISODATA::Clustering()
{
	double temp = 0.0, min = MAXDOUBLE;
	int l = 0;

	for(int j=0;j<Nc;j++)
	{
		w[j].n = 0;
		w[j].z.n = 0;
	}

	for(int i=0;i<N;i++)
	{
		min = MAXDOUBLE;
		l=0;

		for(int j=0;j<Nc;j++)
		{
			temp = Pattern::Distance(x[i], w[j].z);
			if(min > temp)
			{
				min = temp;
				l = j;
			}
		}
		w[l].Insert(x[i]);
	}
}

// step3:	依據theta_n判斷合并。如果類wj中樣本數nj<theta_n,則取消該類的中心zj,Nc = Nc - 1;轉至 step2.
bool ISODATA::CombinBytheta_n()
{
	int j=0;
	do
	{
		if(w[j].n < theta_n)
		{
			for(int k=j;k<Nc;k++)
				//w[k] = w[k+1];
				w[k].z = w[k+1].z;
			Nc--;
			// 循環中跳出!?
			return true;
		}
		j++;
	}while(j < Nc);

	return false;
}

// step4:	計算分類后的參數:各類中心、類內平均距離及總體平均距離。
void ISODATA::CalParameter()
{
	_d = 0.0;

	for(int j=0;j<Nc;j++)
	{
		w[j].CalCenter();		
		_d += w[j].n * w[j].Cal_D();
	}
	_d /= N;
}

// step6:	計算各類類內距離的標準差矢量
void ISODATA::CalSigma()
{
	for(int j=0;j<Nc;j++)
		w[j].CalSigma();
}

// step7:	求出每一聚類類內距離標準差矢量sigma中的最大分量sigma_max
void ISODATA::CalMaxSigma()
{
	// 由于在Sort類中已進行計算,這里不做任何處理
}

// step8:	判斷分裂
bool ISODATA::Split()
{
	for(int j=0;j<Nc;j++)
	{
		if( ( (w[j]._d>_d) && (w[j].n>2*(theta_n+1)) ) || (Nc <= c/2) )
		{
			int i = w[j].max;
			double sigma = w[j].sigma_max;

			for(int l=Nc;l>j;l--)
				w[l].z = w[l-1].z;

			w[j].z.x[i] -= K*sigma;
			w[j+1].z.x[i] += K*sigma;

			Nc++;
			return true;
		}
	}

	return false;
}

// step9:	計算各類對中心間的距離
void ISODATA::CalCenterDis()
{
	for(int i=0;i<Nc-1;i++)
		for(int j=i+1;j<Nc;j++)
			D[i][j] = Pattern::Distance(w[i].z, w[j].z);
}

// step10:	依據theta_D判斷合并
bool ISODATA::CombinBytheta_D()
{
	int i, j, k, l;	// 循環變量
	int num = 0;
	bool b = false;

	// 較小的類對中心
	struct
	{
		double d;
		int i;
		int j;
	}Dmin[MAXNUM];

	for(i=0;i<L;i++)
	{
		Dmin[i].d = 0.0;
		Dmin[i].i = -1;
		Dmin[i].j = -1;
	}

	// 將D[i][j]與theta_D比較,并將小于theta_D的那些D[i][j]按遞增次序排列,取前L個,Dmin[0]<Dmin[1]<Dmin[2]...
	for(i=0;i<Nc-1;i++)
		for(j=i+1;j<Nc;j++)
			if(D[i][j] < theta_D)
				for(k=0;k<L;k++)
					if(D[i][j] < Dmin[k].d)
					{
						for(l=L-1;l>k;l--)
							Dmin[l] = Dmin[l-1];
						Dmin[k].d = D[i][j];
						Dmin[k].i = i;
						Dmin[k].j = j;
						break;
					}

	// 從最小的Dmin開始,將相應的兩類合并。
	for(i=0;i<L;i++)
		if(Dmin[i].i > -1 && Dmin[i].j > -1)
			// 合并兩類
			if( w[Dmin[i].i].Combin(w[Dmin[i].j]) )
				b = true;

	// 去掉已取消的類心
	for(j=0;j<Nc;j++)
		if(w[j].z.n == -2)
		{
			for(k=j;k<Nc;k++)
				w[k].z = w[k+1].z;
			Nc--;
		}

	return b;
}

// step11:	判斷循環還是退出

// 輸出當前模式分類情況
void ISODATA::PrintSort()
{	
	cout << "共分為分為" << Nc << "類。" << endl;
	for(int i=0;i<Nc;i++)
	{
		cout << endl << "第" << i+1 << "類類心為:\t(";
		for(int j=0;j<dim-1;j++)
			cout << setw(5) << w[i].z.x[j] << ", ";
		cout << setw(5) << w[i].z.x[dim -1] << ")" << endl;

		cout << "包含的模式為:" << endl;
		for(int k=0;k<w[i].n;k++)
		{
			// Xi(12, 12, 12); 
			cout << "\tX" << w[i].x[k].n << "(";
			for(int j=0;j<dim-1;j++)
				cout << setw(5) << w[i].x[k].x[j] << ", ";
			cout << setw(5) << w[i].x[k].x[dim-1] << ");" << endl;
		}
		cout << endl;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人8x视频一区二区| 欧美在线观看你懂的| 91同城在线观看| 欧美精品自拍偷拍动漫精品| 欧美韩国一区二区| 青青青伊人色综合久久| 一本一道久久a久久精品| 欧美精品一区二区三区很污很色的 | 亚洲6080在线| 暴力调教一区二区三区| 欧美α欧美αv大片| 亚洲成人资源在线| 色婷婷av一区二区三区软件| 久久久精品黄色| 日本大胆欧美人术艺术动态 | 国产精品资源网站| 欧美一区二区女人| 亚洲国产婷婷综合在线精品| 91丨porny丨首页| 欧美激情在线一区二区三区| 毛片不卡一区二区| 欧美一区二区三区视频在线| 亚洲制服丝袜av| 91久久精品一区二区三区| 国产精品―色哟哟| 成人一区二区三区中文字幕| 久久亚洲二区三区| 久草热8精品视频在线观看| 91精品国产综合久久国产大片| 亚洲综合激情小说| 精品视频在线免费看| 亚洲午夜激情网页| 欧美日韩精品福利| 男男视频亚洲欧美| 日韩一区二区麻豆国产| 日韩经典中文字幕一区| 欧美一区二区性放荡片| 日韩中文字幕亚洲一区二区va在线 | 成人黄色av网站在线| 欧美国产精品劲爆| 99re在线精品| 亚洲午夜羞羞片| 69堂亚洲精品首页| 久久疯狂做爰流白浆xx| 久久综合成人精品亚洲另类欧美| 蜜桃一区二区三区在线观看| 精品久久久久久久久久久久包黑料| 蜜臀av性久久久久蜜臀av麻豆| 日韩视频免费直播| 丁香天五香天堂综合| 亚洲免费资源在线播放| 欧美日韩视频在线一区二区| 日韩精品一二三| 久久网这里都是精品| proumb性欧美在线观看| 亚洲一区视频在线观看视频| 91精品国产91久久久久久最新毛片| 久久99精品久久久久久| 国产精品网站在线观看| 欧洲精品一区二区| 国产一区二区三区四| 国产精品美女久久久久av爽李琼| 色妞www精品视频| 蜜桃av噜噜一区| 日本一区二区三区久久久久久久久不| 成人精品一区二区三区中文字幕 | 奇米精品一区二区三区在线观看一| 精品国产制服丝袜高跟| 99国产精品一区| 日本不卡一二三| 国产精品高清亚洲| 欧美一激情一区二区三区| 国产成人av一区二区三区在线| 亚洲激情自拍视频| 久久精品在这里| 欧美精品自拍偷拍| 97精品超碰一区二区三区| 麻豆91精品视频| 亚洲激情图片一区| 久久精品一区四区| 91精品在线观看入口| 99精品视频一区| 欧美性做爰猛烈叫床潮| 麻豆精品国产传媒mv男同| 亚洲私人影院在线观看| 欧美电影免费观看高清完整版在线 | 777久久久精品| 一本色道久久综合亚洲91| 精品午夜一区二区三区在线观看| 亚洲已满18点击进入久久| 国产日产精品一区| 日韩一级高清毛片| 欧美日本韩国一区| 91国产视频在线观看| 国产一二精品视频| 老司机精品视频线观看86| 一个色在线综合| 中文字幕国产一区| 久久综合久久久久88| 69堂精品视频| 欧美日韩视频在线一区二区| 91一区在线观看| 成人免费视频一区二区| 国产 欧美在线| 国产一区欧美二区| 美美哒免费高清在线观看视频一区二区| 亚洲欧美日韩在线| ㊣最新国产の精品bt伙计久久| 久久综合久久久久88| 日韩欧美国产1| 欧美不卡一区二区三区四区| 日韩一卡二卡三卡四卡| 欧美精品黑人性xxxx| 欧美日韩在线播放一区| 色婷婷国产精品综合在线观看| 91影院在线免费观看| 91丝袜国产在线播放| 91天堂素人约啪| 色综合久久99| 91精品办公室少妇高潮对白| 色婷婷综合五月| 欧美最新大片在线看| 欧美日韩一区二区在线视频| 91成人在线精品| 日本大香伊一区二区三区| 欧洲精品一区二区| 欧美一区二区三区性视频| 欧美电视剧在线观看完整版| 精品国产乱码久久久久久夜甘婷婷| 日韩精品一区二区三区中文不卡 | 成人小视频在线观看| 成人性生交大片免费看视频在线| 成人avav在线| 欧美在线观看视频一区二区三区| 欧美日本精品一区二区三区| 在线影视一区二区三区| 欧美日韩成人一区| 久久久综合精品| 亚洲精品视频免费看| 香蕉av福利精品导航| 精品一区二区国语对白| 国v精品久久久网| 欧美日韩一级视频| 欧美精品一区二区三区高清aⅴ | 亚洲aⅴ怡春院| 国产福利电影一区二区三区| 97aⅴ精品视频一二三区| 欧美性xxxxx极品少妇| 精品美女一区二区三区| 亚洲欧洲另类国产综合| 亚洲国产欧美在线| 国产精品一区三区| 91九色最新地址| 国产丝袜欧美中文另类| 亚洲国产三级在线| 国产福利一区二区三区视频在线 | 懂色av一区二区在线播放| 在线视频一区二区免费| www成人在线观看| 亚洲一区二区三区四区五区黄| 卡一卡二国产精品| 日本韩国欧美三级| 欧美精品一区二区久久久| 亚洲欧洲性图库| 国产精品69久久久久水密桃| 在线观看三级视频欧美| 国产日韩欧美精品一区| 日韩电影在线一区二区| 色综合久久久久| 国产精品免费视频一区| 免费观看30秒视频久久| 色综合天天在线| 国产午夜三级一区二区三| 日韩中文字幕一区二区三区| 91视频观看免费| 国产三级三级三级精品8ⅰ区| 日日夜夜精品视频天天综合网| av电影天堂一区二区在线| 日韩欧美在线观看一区二区三区| 一区二区国产视频| 白白色 亚洲乱淫| 国产人成一区二区三区影院| 日本欧美一区二区三区乱码| 色综合久久天天综合网| 国产精品丝袜在线| 国产黄色91视频| 久久蜜桃一区二区| 激情综合网av| 日韩你懂的在线观看| 青青草国产成人99久久| 欧美日韩三级视频| 亚洲一区二区在线视频| 色综合天天在线| 亚洲精品视频在线观看免费 | 国产在线观看免费一区| 91精品综合久久久久久| 亚洲国产人成综合网站| 欧美老年两性高潮| 图片区小说区区亚洲影院| 欧美日韩精品高清|