c语言iso校验算法,模式识别c语言ISODATA算法.doc
模式識別c語言ISODATA算法.doc
下載提示(請認真閱讀)1.請仔細閱讀文檔,確保文檔完整性,對于不預覽、不比對內容而直接下載帶來的問題本站不予受理。
2.下載的文檔,不會出現我們的網址水印。
3、該文檔所得收入(下載+內容+預覽)歸上傳者、原創作者;如果您是本文檔原作者,請點此認領!既往收益都歸您。
文檔包含非法信息?點此舉報后獲取現金獎勵!
下載文檔到電腦,查找使用更方便
18
積分
還剩頁未讀,繼續閱讀
關?鍵?詞:模式識別
語言
ISODATA
算法
資源描述:
c語言編寫的ISODATA程序
#include#include#include#include#include#include#define MAXNUM 100 //最大模式個數
#define MAXDIM 10 //最大模式維數
#define K 0.5 //分裂時使用的比值
#define MAXDOUBLE 1.0e20 //最大雙精度值
#define N 10 //實際模式個數
#define DIM 2 //實際模式維數
struct Pattern //模式結構體
{
int n; //模式序號
float s[MAXDIM]; //模式數據
};
struct Cluster //類結構體
{
struct Pattern z; //類中心
int n; //類中包含的模式數目
float avg_d; //模式到類心的平均距離
struct Pattern y[MAXNUM]; //模式
float sigma[MAXDIM]; //分量的標準差
int max; //用于記錄類內距離標準差矢量最大的分量下標
float sigma_max; //類內分量距離標準差最大值
};
struct Pattern InitPattern(int i,float a,float b) //對樣本模式進行初始化
{
struct Pattern temp;
temp.n=i;
temp.s[0]=a;
temp.s[1]=b;
return temp;
}
//以下為各參數聲明
int c=3; //預期的類數
int Nc=1; //初始聚類中心個數
int ON=1; //每一類中允許的最少模式數(小于此數不可單獨成類)
float OS=1; //類內分量分布的標準差上限(大于此數就分裂)
float OC=4; //兩類中心間的最小距離下限(小于此數兩類合并)
int L=1; //在每次迭代中可以合并的類的最大對數
int I=8; //最多迭代次數
struct Pattern x[N]; //全部模式
struct Cluster w[N]; //全部類
float D[MAXNUM][MAXNUM]; //各類對中心間的距離
float dis; //總體平均距離
int iter=1; //記錄迭代次數
int i,j; //循環變量
//以下為程序用到的調用函數
void Init();
void ISODATA();
void InitCenter();
void Clustering();
float Distance(struct Pattern x1,struct Pattern x2);
struct Cluster Insert(struct Pattern a,struct Cluster b);
int CheckAndUnion();
void CalParameter();
struct Pattern CalCenter(struct Cluster a);
float Cal_D(int i);
void CalSigma();
int divide();
void CalCenterDis();
int UnionByOC();
void Union(int a,int b);
void PrintCluster();
void main()
{
Init();
printf("\n****************** ISODATA 算法程序 **************************\n");
printf("本實驗使用樣本集如下:\n");
x[0]=InitPattern(0,0,0);
x[1]=InitPattern(1,3,8);
x[2]=InitPattern(2,2,2);
x[3]=InitPattern(3,1,1);
x[4]=InitPattern(4,5,3);
x[5]=InitPattern(5,4,8);
x[6]=InitPattern(6,6,3);
x[7]=InitPattern(7,5,4);
x[8]=InitPattern(8,6,4);
x[9]=InitPattern(9,7,5);
for(i=0;itemp)
{
min=temp;
l=j;
}
}
w[l]=Insert(x[i],w[l]);
}
}
float Distance(struct Pattern x1,struct Pattern x2) //計算兩個模式距離的函數
{
int i;
float temp=0.0;
for(i=0;idis)&&(w[j].n>2*(ON+1))||(Nc<=c/2))
{
i=w[j].max;
for(l=Nc;l>j;l--)
w[l].z=w[l-1].z;
w[j+1].z.s[i]-=K*sigma_temp;
w[j].z.s[i]+=K*sigma_temp;
Nc++;
return 1;
}
}
return 0;
}
void CalCenterDis() //計算各類對中心間的距離
{
int i,j;
for(i=0;ik;l--)
Dmin[l]=Dmin[l-1];
Dmin[k].d=D[i][j];
Dmin[k].i=i;
Dmin[k].j=j;
break;
}
for(i=0;i-1&&Dmin[i].j>-1)
{
Union(Dmin[i].i,Dmin[i].j);
flag=1;
}
for(j=0;j=2*c)||iter%2==0)
goto step8;
step6:
CalSigma();
step7:
if(divide())
{
iter++;
goto step2;
}
step8:
CalCenterDis();
step9:
if(UnionByOC())
changed=1;
step10:
if(iter>=I) //判斷循環還是退出
{
printf("---------------經過 %d 次迭代,達到迭代次數--------------\n",iter);
return;
}
else
{
if(changed==1)
{
char ch;
iter++;
printf("本次迭代完成,是否需要改變參數(Y/N)??:");
while(!isspace(ch=getchar()));
if(ch==y||ch==Y)
goto start;
else goto step2;
}
else
{
iter++;
goto step2;
}
}
}
展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
?
人人文庫網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:模式識別c語言ISODATA算法.doc
鏈接地址:https://www.renrendoc.com/p-40259822.html
總結
以上是生活随笔為你收集整理的c语言iso校验算法,模式识别c语言ISODATA算法.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux文件查询笔记
- 下一篇: 刷ROM必備的clockworkmod