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