?? isodata.h
字號:
// ISODATA.h
#pragma once
#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include "Sort.h"
/******************************************************************
// class name: ISODATA
// description: ISODATA類,該類為實(shí)現(xiàn)ISODATA算法的主要類
算法的流程按照教材所給出的步驟進(jìn)行,主要流程執(zhí)行函數(shù)為:
int ISODATA::Process();
// limitation: 算法中流程在執(zhí)行時使用了 goto 命令,難以替換為while或for的循環(huán)。
******************************************************************/
class ISODATA
{
// 參數(shù)
int c; // 預(yù)期的類數(shù);
int Nc; // 初始聚類中心個數(shù)(可以不等于c);
int theta_n; // 每一類中允許的最少模式數(shù)目(若少于此數(shù),就不能單獨(dú)成為一類);
double theta_s; // 類內(nèi)各分量分布的標(biāo)準(zhǔn)差上限(大于此數(shù)就分裂);
double theta_D; // 兩類中心間的最小距離下限(若小于此數(shù),這兩類應(yīng)合并);
int L; // 在每次迭代中可以合并的類的最多對數(shù);
int I; // 允許的最多迭代次數(shù);
Sort w[MAXNUM]; // 類
Pattern x[MAXNUM]; // 模式
double _d; // 總體平均距離
int Ip; // 迭代次數(shù)
double D[MAXNUM][MAXNUM]; // 各類對中心間的距離
public:
ISODATA();
~ISODATA();
// 設(shè)置樣本
int SetupPattern(Pattern * x);
// ISODATA算法流程
int Process();
private:
// step1: 設(shè)定聚類分析控制參數(shù)
void SetupParameter();
// 3)選定初始聚類中心
// step2: 按最小距離原則將模式集(xi)中每個模式分到某一類中
void Clustering();
// step3: 依據(jù)theta_n判斷合并。如果類wj中樣本數(shù)nj<theta_n,則取消該類的中心zj,Nc = Nc - 1;轉(zhuǎn)至 step2.
bool CombinBytheta_n();
// step4: 計算分類后的參數(shù):各類中心、類內(nèi)平均距離及總體平均距離。
void CalParameter();
// step6: 計算各類類內(nèi)距離的標(biāo)準(zhǔn)差矢量
void CalSigma();
// step7: 求出每一聚類類內(nèi)距離標(biāo)準(zhǔn)差矢量sigma中的最大分量sigma_max
void CalMaxSigma();
// step8: 判斷分裂
bool Split();
// step9: 計算各類對中心間的距離
void CalCenterDis();
// step10: 依據(jù)theta_D判斷合并
bool CombinBytheta_D();
// 輸出當(dāng)前模式分類情況
void PrintSort();
};
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -