㈠ 怎麼用c語言計算平均數
1、新建一個求數組內所有元素的平均值項目。
㈡ 在matlab中做模糊C均值聚類(fcm)演算法如何體現初始隸屬度
它的程序裡面是用rand函數隨機初始化了一個矩陣N*c,然後對這個隨機矩陣進行歸一化,即滿足一行(也可能是列記不清楚了),反正是讓它滿足隸屬度的每個樣本屬於所有類隸屬度為1的條件。用這個矩陣進行初始化,計算新的中心 新的隸屬度 新的中心。。。。 知道滿足閾值。matlab裡面自己有函數一招就能找到
㈢ 急!!!在線等!C語言平均值問題 下面是我編的程序 為什麼求不出平均值
因為某種原因,本人共考過2次筆試,3次上機。其中筆試在70左右,3次上機均為滿分,
看著大批的同學在為三級發愁不知道如何准備和應考。我想我應該把經驗和學習的方法寫下
來,這些方法保證你能過三級。但是不保證你能獲得高分並學到知識,所以請各位計算機系
與愛好電腦的高手或自認為是高手的同志們就此打住。OK!
以網路技術為例(其他三門的方法相似),我把方法總結為:細看書,做筆記,多復習。
第一階段:看網路技術教材,詳細地做筆記(20天).
第一邊看書你要看得特別仔細,把所有你認為重要的地方全抄到筆記本上,包括重要的
表格和插圖。第一次看不懂的地方可以跳過去等過兩天再回頭看一遍。每天看新的知識之前
都將前兩天看的再復習一遍,強化記憶。
我把全書的重要程度劃分了一下:第一,七,八章 了解(看看做做筆記就行了);
第二,四章 理解(看懂主要的知識點);第三,五,六章 掌握(看懂所有的知識點);
其中又以以下章節為重點:2.2 進程 2.3 存儲管理 2.4 文件管理 2.5 設備管理
(我當時這一節的題都掛了) 3.5 雙絞線 VS 同軸電纜 3.6 OSI VS TCP/IP 4.3 乙太網
4.5 組網技術 4.8 網路互連 5.3 IP協議 6.4 加密技術 其中有些內容必須理解並掌握,
要是不理解,背也要背下來。如:OSI協議和TCP/IP協議的各層的名字,各種傳輸介質和各種
乙太網的參數等。
另外所有教材上沒有的內容不用看,因為考試出的題沒有一道是書本之外的。
===> 要點一:堅持就是勝利,每天堅持看2個小時,至少能看15頁。
===> 要點二:該抄就抄,好記性不如壞筆頭。
===> 要點三:注意課後作業題,那可能就是原題。
這一階段完成後,應該能夠理解大部分的知識點。還要能夠很快的在書中找到某個知識
點的位置。
第二階段:復習重點章節(5天)
這一次復習的重點在那些需要理解和掌握的內容上,如果你看懂了,合上書想一遍,看
不懂就多看兩遍,有些重點一定要記住。而且要把筆記本大聲地讀上兩遍,達到更加熟練。
===> 要點一:看懂不一定會記住,一定要在腦海中形成印象,合上書能寫下來。
===> 要點二:名詞術語要注意。
===> 要點三:縮略語。凡是在書上出現過兩遍的,一定要記下中英文解釋。
例如:CDMA/CD,MFLOPS等。
第三階段:復習不重要的章節和作題(5天)
有人也許要問,既然不重要還復習它干什麼。錯!出題人不能用重點湊成一百分要適當的
加點其他內容。於是只有在這些不重要的章節裡面出了,這些題大概佔20分左右。得分的方法
是將所有不太重要的章節再看一遍,越是你認為不可能出的,越要把它抄下來,記一記。而且
要特別注意數字,如ATM的傳輸速率,單模光纖所使用的光的波長等。(上次最嘔吐的的一道
題是,信號從發送站經過衛星到接收站的傳輸延遲的典型值是多少?我按照同步地球衛星到地
球的距離,光的傳輸速度,算到百毫秒的量級,但是算不出具體的值,於是猜了一個250ms。
答案居然是540ms。暈倒~!)
還有就是模擬題的問題,我認為現在市面上的模擬題都太差了,考的全沒有,不考的全有
了,說實話還不如我出的呢。所以題不用多做,只要把書看好就行,最後幾天可以做幾套,熟
悉一下題型,掌握一下時間就夠了,多做全是浪費。
以上方法我一個同學上次照著我說的做了,結果筆試考分比我還高。所以不管你聰明不聰
明,只要你照我說的做了,一定能通過。
一句話:要是不過你拿我是問。
上機部分現在只有一到c語言編程題,非常簡單。但我認為最重要的是能夠編譯程序和調試
程序,也就是說,一道題你能在紙上寫下來還不夠,一定要能夠在機器上運行出結果才行,因為
編譯系統及機器的不同,有的對的程序也可能產生大量的錯誤。只要你能把錯誤找出來就差不多
能過了。
因此我把方法總結為:多思考,多上機,捉蟲子。(以譚浩強的《c語言設計》第二版為例)
第一階段:看書,做筆記。(15天)
有人說那本書那麼厚,15天能看完嗎?錯!誰說讓你們看完了,你要是只是想過三級。只用
看前140頁就足夠了。也就是,第一章,了解,第二,三章理解,第五,六,七章掌握,第八,
第十章隨便看一下就行了。因為c上機只要求你填一個函數,所以函數那一章不用看太仔細,只
要知道函數是干什麼用的,它們之間是如何調用的就行了。至於指針,所有的考題全都能用數組
做出來,用指針只不過是簡單一點,容易出錯一點而已,我是強烈建議不用指針。第九章和第十
一章以後一概不用看。
===> 要點一:勤記,把所有重要的東西都記在筆記本上。如轉義字元的定義等。
===> 要點二:每天上機調試兩個程序(可以是例題或作業題)
===> 要點三:堅持,再堅持。
第二階段:做課後作業題並上機調試。(10天)
現在書你已看完,練習題也可能做出了一些。現在就是要把前幾章特別是五六七三章的課後
題一定要自己思考一下,做出來後再上機調試,是在做不出來,就看看答案,看懂後,再在機器
上調試一下也行。
重要例題:例 4.10 4.12 5.4 5.5 5.6 5.7 5.8 6.6 6.8 6.10 7.2 7.2 7.8 7.9
重要習題:4.5 4.9 5.5 5.7 5.8 6.1~6.10 7.1~7.14
===> 要點一:做題時使用N-S流程圖。
===> 要點二:每道題不管多麼簡單,一定要調試直到正確為止。如習題2.4(2)我有幾個同
學都是能編出來,但是怎麼都運行不正確。
===> 要點三:每天上機作五道題以上,最好在TC2.0環境下。
第三階段:繼續調試重要程序,看一本書(5天)
繼續調試程序直到熟練,然後看一本書,書名我先不說,可能許多同學都知道。但我不贊成
看這本書,而且我勸你到最後幾天再看,挑出一部分典型的題看一下,自己做做,看是否正確,
熟悉一下題型,不要完全依賴那本書。那樣可能因為一點小錯誤你找不出來就掛了。我們班的女
生們第一次因為這個原因掛的可不是少數。
還是那句話:要是你上機不過找我是問。
········,計算機等級考試最令人難忘。筆者斗膽在這里賣弄一下過去兩年(准確的說是一年半)里通過全國計算機等級考試二到四級的經歷,以自己的感受泡製一份全國計算機等級考試全攻略,希望對後來的朋友們尤其是剛剛邁入大學校門的師弟師妹們有所幫助。
考證路上,有兩點需要特別注意。一是一次只能報考一個等級(包括筆試和上機)的考試。一個級別中有不同類別,考生只能選擇其中一類。另外,考試單科合格者,成績只保留到下一個考試周期。所以不想找麻煩的話就要認真准備,爭取一次OK,否則會對信心造成打擊。
一級考試
對於一級考試,其實沒什麼好說的,大部分人不必報考這一級別,既浪費金錢又浪費生命。因而筆者強烈建議不要考這一級別。如果你不得不參加這一級別考試的話,筆者在表示同情之餘建議你在熟悉常用軟體之餘研究一下WPS,在以後的全國計算機等級考試(一級)中 ,WPS將成為一門單獨的考試科目。
二級考試
二級考試是大部分人都必須參加的。二級考試的內容包括基礎知識和程序設計兩大部分。 基礎知識主要包括電腦基本知識,DOS基本知識和基本操作,WINDOWS的基本概念與操作。關於這部分知識有點水準的輔導書就會有詳細的介紹,只要把書好好看看就沒什麼問題。DOS中的文件、目錄、路徑的概念及使用是必考部分,要留意。(相關閱讀:如何應付新大綱二級考試的公共基礎知識)
二級考試的重中之重是程序部分。要對語言的基礎知識熟練掌握,尤其要留意基礎概念和基本方法(選擇法、冒泡法等),要能看懂書上給的程序。一般來說,如果能獨立做出大部分課後題就一切OK了。對語言的工夫應該下在平時,多想,多練,多上機。自己考慮作一些小程序會有很大幫助的(別人崇敬的目光就會讓你覺得很有價值)。二級DOS類考試的上機考試包括三個部分的內容,即DOS操作題,程序修改題和程序編制題。如果你的C語言有一定水準的話,較難的部分就是程序修改題了,畢竟了解陌生人的思路是一件比較難的事。因此平時要多讀一些程序,自己編程時注意要盡量符合規范,否則很容易吃虧。當然多上機練習是取得好成績的不二法門。關於輔導書大連理工出版社和南開出版社的都相當不錯。
三級考試
三級是一個比較麻煩的等級。它共有四個類別,可以大致分兩種。 三級PC上機是考匯編程序,其他三個類別考C程序。如果不是對自己特別有信心的話一般不要報考PC技術。畢竟學習匯編語言也是不小的負擔 ,而且對報考四級沒什麼幫助(四級不考匯編!)。對於其他三種主要看自己的興趣了。相對來說資料庫要難一點(對數學系的除外)。三級的四個類別各有側重,比較麻煩的是對於四級來說都太片面了,所以幫助不大。因此基礎比較好的,直考四級也是可以考慮的。(相關閱讀:通過計算機等級考試三級網路的經驗)
筆試部分是三級的難點,所要記憶的內容比二級增加很多。要注意對基本理論和基礎概念的掌握,有利於知識網路的形成,減少記憶負擔。
由於三級剛剛改革不久,各個出版社出版的輔導書都很難貼近考試。這種情況下多看書就成了最好的選擇。從近兩次考試的情況看,出題也很接近課本(尤其是網路技術,有部分教材原話)。三級上機考試難度比二級提高並不大,較復雜的部分如文件讀寫,函數調用等通常題目已給出,因而所考的依然是比較基本和典型的演算法。
四級考試
四級是最後一級,也是知識最復雜的一級。報考四級是需要一點信心和勇氣的,你報考四級後身邊幾乎不可避免的出現一片質疑聲(當我報四級時老師竟然告訴我本校從來沒人通過),這時候一定要相信自己。(相關閱讀:幫你全面了解全國計算級等級考試-四級)
四級通過的人數的確是非常少(相對三級),但要看到四級報考人數也是最少的。四級知識量是巨大的(看看那厚厚的教材就知道了),難點主要是離散數學和計算機英語。對於離散數學,如果有機會旁聽一下計算機專業的核心課程《離散數學》會很有幫助的。要記住一定要作一定數量的習題!僅僅通過識記是無法提高水平的。
計算機英語沒有想像中的困難,常用的單詞只有幾百個,只要把近5、6年的試題中英語題過一遍就差不多了。手頭最好有一本專業詞典,大部分單詞在文曲星上查不到 。相對來說英語題比較簡單,只要單詞認識就OK了。
筆試中比較新鮮的是論述題。建議買一本歷年試題及參考答案(每年國家考試中心都出版),仔細研究一下,掌握答題方法。比較幸運的是論述題通常有四道,可以選擇自己最有把握的。由於四級考試已經舉行多年,各出版社出的輔導書都比較扣題。筆者強烈推薦大連理工出版社出版的《全國計算機等級考試題典(四級)》。這本書貼近考試,解答詳盡,對順利過級會有很大幫助!一定要做歷年試題(5年以內),確實是有一定復現率的!
四級上機考試和三級差不多,只有一道編程題,注意別緊張,一定要存檔,否則會變為0分。當時跟我一個考場的同學就有人因為慌亂忘記存檔,造成下午的考試沒有通過。(相關閱讀:全國計算機四級考試經驗談)
結束語:最後,不管面對任何考試都需要對自己要信心,相信即使只有一個人通過,那個人也一定是自己!這時你就成功一半了。預祝每一位考生能夠在9月的考試中取得理想的成績!
計算機考試備忘錄
首先是報考時間問題。雖說大學有四年,但是如果你要考研究生的話(大部分人都會考的),從大三下學期就該開始准備了,所以留給等級考試的時間其實只有兩年半而已(四次機會)。因此,如果你是大一的新生,應該考慮報考明年四月的考試。因為全國計算機等級考試是面對非專業人士的,所以難度並不太高(當然也不很容易,否則聽我嘮叨什麼)。如果你的學校沒有一級必考之類的變態規定話,就應該堅決跳過一級從二級開考(時間寶貴,不應該為沒意義的事浪費半年時光)。平心而論,二級知識非常基礎,只要認真准備(你有整整一個寒假的時間准備)過關是很容易的(即使你的計算機基礎很差)。
雖然三級證書一樣可以拿到學位證,並且越級考試也是被許可的,但筆者不提倡直接報考三級(即使你的計算機基礎很好)。直接過三級雖然是一件很酷的事,但這要擔相當的風險,一旦失誤(這是很可能的事,畢竟三級是有一定難度的),你就不得不與剛通過二級的同學一起考試。除非你的神經有下水管道那麼粗,不然會有很大壓力,而且對信心的打擊不容忽視。如果你對自己的計算機水平很有自信的話,二級證書到手後跳過三級直考四級倒是可以考慮的,那樣風險和效率比較均衡。
另一個比較重要的問題是計算機語言的選擇問題。筆者強烈推薦學習C語言。C語言不但本身邏輯清楚,實用性強而且擴展性很強,方便以後學習C++,C#等語言。如果你有獅子一樣的雄心,更應該選擇C語言,要注意到四級和高級程序員考試都要求C語言!
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@計算機三級考試馬上就要到了,然而很多朋友對計算機上機考試卻仍舊十分茫然,
參加這次考試的人有很大一部分是上次機試沒有通過的朋友,甚至還有一些考了兩次機試都沒有通過的……
這其中不乏一些C語言學的很不錯的高手,大部分人到現在都不明白為什麼自己親手編的程序卻是0分……
究竟是什麼原因呢?不就是那100道題目嗎?翻來覆去的看也沒有發現自己的程序有什麼錯誤啊,看資料,用模擬盤模擬也是滿分啊,可為什麼正式考試就是0分呢?
於是很多人甚至把通過上機考試當成一件*運氣的事了,甚至有的朋友對上機考試感到十分恐懼
然而這其中真正的原因……
大家不妨和我一起看一下考試中心命題組的正確答案~
順便提醒一下大家在考試的時候要注意的問題,希望對大家有所幫助。
第一條:審題要仔細!正式考試的時候會遇到很多面熟的題目,這些題目有的似乎和
平常資料中看到的一樣,然而,千萬不要見到面熟的題目而沾沾自喜,因為有很多的
「陷阱」會使你審題的時候就出錯~!
我們看一道所有人都做過的的 「數字題目」 。
考試中心命題組第23題:
已知在文件in.dat中存有N個實數,(N<200),函數readdat()是讀取這N個實數並存入數組xx中。
請編制函數CalValue(),其功能要求:
1、求出這N個實數的整數部分平均值aver;
2、分別求出這N個實數中其整數部分值小於平均值ever的數的整數部分值之和sumint與小數部分之和sumdec
最後調用函數WriteDat()把所求的結果輸出到文件OUT8.dat中。
這一題看起來很眼熟,然而你仔細看~!
1、aver是整數部分的平均值~!不是普通的哦!
2、整數部分值小於平均值ever的數的整數部分值之和sumint與小數部分之和sumdec!!
呼~,原來這么復雜~!稍不留心就錯了~,結果就想當然的……0分
考試中心命題組第4題
函數ReadDat()實現從文件ENG.IN中讀取一篇英文文章存入到字元
串數組xx中;請編制函數ComWord()分別計算出10個不區分大小寫
的英文單詞的首字母(b,c,f,s,n,r,u,e,o,p)的頻數並依次存入
整型數組yy[0]至yy[9]中,最後調用函數WriteDat( )把結果yy
輸出到文件PS1.OUT中。
這題也很眼熟,然而你仔細看~!
英文單詞的首字母,呵呵,不是平常的字母的個數,是作為單詞的首字母的個數啊,暈~
上面兩道題目並沒有在其他資料上見過,考試的時候也不一定會出,
這里僅僅是給大家提個醒兒,正式考試一定要仔細審題,嚴格按照題目的要求去做,
不要受以前做過的題目的影響。
第二條:一定要考慮除零、溢出、類型轉換、精度等細節問題~!!
雖然我們在平時學C語言的時候老師都提醒過,可是真正到了編程序的時候,
卻沒有幾個人會考慮。這些細節問題似乎並不直接影響題目的輸出結果,
然而,因為溢出和類型轉換錯誤而造成考試得不到滿分的可是大有人在啊!
我們看下面一道最害人的題目~!!,很多朋友考了這道題目都沒有過。
下面來看看你為什麼是0分~!
考試中心命題組64題:
請編制函數encryptChar(),按給定的替代關系對數組xx中的所有字元進行替代,
仍存入數組xx的對應的位置上,最後調用函數WriteDat()把結果xx輸出到文件PS8.DAT中。
替代關系:f(p)=p*11 mod 256 (p是數組中某一個字元的ASCII值,f(p)是計算後新字元的ASCII值),
如果原字元小於等於32或大於130,則該字元不變,否則將f(p)所對應的字元進行替代。
這道題目所有的人都做過,但幾乎就沒有人做對,包括南開無憂在內~!
原因就在於這一句!
無憂:int f; f=(xx[i][k]*11)%256;
南開:char *pf; *pf=*pf*11%256;
表面看來,好象兩個都對,
請你在TC下運行一下下面的代碼,看一下結果你就知道了是怎麼回事了……:
main()
{
char nk='E',*nkp,wuyou='E';
int wy;
nkp=&nk;
*nkp=*nkp*11%256;
wy=wuyou*11%256;
printf("%c %c %c %c\n",nk,*nkp,wuyou,wy);
printf("%d %d %d %d\n",nk,*nkp,wuyou,wy);
}
看到結果了么?是不是很吃驚啊?
≈ ≈ E ≈
-9 -9 69 247
大家看到了,南開的結果是負數,連原來的變數nk都變成了負數,這顯然錯了。
無憂的聰明一點,知道int比char大,定義了個int,對了。
南開錯誤原因就是在TC2.0中char型變數只有一個位元組,根本容納不下'E'*11,
所以產生了溢出,上次考這道題目沒過的同學是不是有所啟發呢?
這里給出考試中心命題組的答案:
void encryptChar(){
int i,k,ch;
for(i=0;i<maxline;i++)
for(k=0;k<strlen(xx[i]);k++){
ch=xx[i][k];
ch=(ch*11)%256;
if(!(ch<=32||ch>=130))xx[i][k]=ch;
}
}
似乎一個例子不能說明什麼,那就把上面的數字題目的答案給大家看看:
考試中心命題組23題答案:
int i;
long val;
float dec;
for(i=0;i<N;i++){
val=(long)xx[i];
aver+=xx[i]-val;
}
aver/=(double)N;
for(i=0;i<N;i++){
val=(long)xx[i];
dec=xx[i]-val;
if(dec>aver){
sumint+=val;
sumdec+=(xx[i]-val);
}
}
看到了吧,首先,val的定義,不是我們習慣的int,而是能容納更大數的 long ,
這樣在求和的時候就不會溢出,無憂和南開的答案沒有吧~
再看,算aver平均值的細節,不是我們平常習慣的aver/=N,更不是無憂的1.0* sum/N,
而是aver/=(double)N,所以大家在考試的時候要時刻注意你的變數類型,特別是在一些求平均值的題目中,千萬要注意,用sum/n的時候,sum的類型一定不要用整形。
第三條:不要使用快捷鍵!!很多人在使用TC的時候習慣於用F9,CTRL+F9或者其他的熱鍵,
首先F9隻是編譯了,並沒有運行程序,考試一定要運行一下你的程序才會有輸出文件,
否則一定是0分。
熱鍵在考試的時候是很危險的,因為UCDOS的熱鍵和TC的沖突,CTRL+F9變成了全形半形轉換,
如果不小心按了,會導致你的程序有中文字元,編譯的時候出錯,而且很難查找排除錯誤~!
所以建議大家在考試的時候使用ALT+紅色字母 來調出菜單進行編譯調試等步驟,建議步驟為:
寫完代碼後用ALT+F,S存檔,然後ALT+C,M編譯,然後ALT+R,R運行,這樣就萬無一失了。
第四條:不要載入任何輸入法
上機考試用的DOS環境內存十分有限,如果你載入了任何一個輸入法,都有可能造成編譯程序的時候出現out of memory 內存不足的情況,到那時就麻煩了。
程序只要寫的對就可以,不要畫蛇添足的加註釋,沒有人看的~!
第五條:不要提前交卷!考場一般使用NOVELL網路,有的時候存在網路狀況不好而連接失敗等問題,
這時,如果你已經提前交卷的話就不太好了。另外也可以防止別人有意無意的改動你的程序。
第六條:考試時候的一些技巧。
1、進入TC以後如果想查看題干要求,不用退出TC,直接用F12就可以顯示出來。
2、用F12顯示題目之後可以通過CTRL+BACKSPACE把題目定在屏幕上。
3、編譯運行之後,可以通過type out.dat或edit out.dat或tc out.dat查看輸出文件。
(千萬不要改動!不然影響考試結果。如果不小心改動,再重新編譯運行一次你的程序就可以了)
4、如果考試的時候不小心改動了代碼的主函數或其他部分,可以進入考生目錄下的warn隱藏目錄,
把里邊的備份文件復制到考生目錄。步驟:
在考生目錄下輸入cd warn
輸入 *.c ..輸入cd ..
就可以了
5、如果調試的時候不小心死循環了,可以通過CTRL+C或CTRL+BREAK來終止,如果連按多次都沒反應,
不要慌,立即找監考老師說明情況,可以重新啟動機器繼續答原題,你的程序還在,時間也是繼續剛才的。
所以這也提醒大家,運行程序之前一定要先存檔。
㈣ k均值聚類演算法、c均值聚類演算法、模糊的c均值聚類演算法的區別
k均值聚類:---------一種硬聚類演算法,隸屬度只有兩個取值0或1,提出的基本根據是「類內誤差平方和最小化」准則;
模糊的c均值聚類演算法:-------- 一種模糊聚類演算法,是k均值聚類演算法的推廣形式,隸屬度取值為[0 1]區間內的任何一個數,提出的基本根據是「類內加權誤差平方和最小化」准則;
這兩個方法都是迭代求取最終的聚類劃分,即聚類中心與隸屬度值。兩者都不能保證找到問題的最優解,都有可能收斂到局部極值,模糊c均值甚至可能是鞍點。
至於c均值似乎沒有這么叫的,至少從我看到文獻來看是沒有。不必糾結於名稱。如果你看的是某本模式識別的書,可能它想表達的意思就是k均值。
實際上k-means這個單詞最先是好像在1965年的一篇文獻提出來的,後來很多人把這種聚類叫做k均值。但是實際上十多年前就有了類似的演算法,但是名字不一樣,k均值的歷史相當的復雜,在若干不同的領域都被單獨提出。追尋演算法的名稱與歷史沒什麼意義,明白具體的實現方法就好了。
㈤ c語言中計算平均值的方法
#include <cstdlib>
#include "stdio.h"
#define N 10
double fun(double x[],double *y)
{
int i,j;
double av;
av=0;
for(i=0;i<N;i++)
av=av+x[i]/N;
for(i=j=0;i<N;i++)
if(x[i]>av)
y[j++]=x[i];
else
y[j++]=-1;
return av;
}
void main()
{
int i;
double x[N],y[N];
for(i=0;i<N;i++)
{
x[i]=rand()%50;
printf("%4.0f",x[i]);
}
printf("\n");
printf("\nThe average is:%f\n",fun(x,y));
for(i=0;y[i]>=0;i++)
printf("%5.1f",y[i]);
printf("\n");
}
㈥ 模糊C均值聚類演算法(FCM)
【嵌牛導讀】FCM演算法是一種基於劃分的聚類演算法,它的思想就是使得被劃分到同一簇的對象之間相似度最大,而不同簇之間的相似度最小。模糊C均值演算法是普通C均值演算法的改進,普通C均值演算法對於數據的劃分是硬性的,而FCM則是一種柔性的模糊劃分。
【嵌牛提問】FCM有什麼用?
【嵌牛鼻子】模糊C均值聚類演算法
【嵌牛正文】
聚類分析是多元統計分析的一種,也是無監督模式識別的一個重要分支,在模式分類、圖像處理和模糊規則處理等眾多領域中獲得最廣泛的應用。它把一個沒有類別標記的樣本按照某種准則劃分為若乾子集,使相似的樣本盡可能歸於一類,而把不相似的樣本劃分到不同的類中。硬聚類把每個待識別的對象嚴格的劃分某類中,具有非此即彼的性質,而模糊聚類建立了樣本對類別的不確定描述,更能客觀的反應客觀世界,從而成為聚類分析的主流。
模糊聚類演算法是一種基於函數最優方法的聚類演算法,使用微積分計算技術求最優代價函數,在基於概率演算法的聚類方法中將使用概率密度函數,為此要假定合適的模型,模糊聚類演算法的向量可以同時屬於多個聚類,從而擺脫上述問題。 模糊聚類分析演算法大致可分為三類:
1)分類數不定,根據不同要求對事物進行動態聚類,此類方法是基於模糊等價矩陣聚類的,稱為模糊等價矩陣動態聚類分析法。
2)分類數給定,尋找出對事物的最佳分析方案,此類方法是基於目標函數聚類的,稱為模糊C 均值聚類。
3)在攝動有意義的情況下,根據模糊相似矩陣聚類,此類方法稱為基於攝動的模糊聚類分析法。
我所學習的是模糊C 均值聚類演算法,要學習模糊C 均值聚類演算法要先了解慮屬度的含義,隸屬度函數是表示一個對象x 隸屬於集合A 的程度的函數,通常記做μA (x),其自變數范圍是所有可能屬於集合A 的對象(即集合A 所在空間中的所有點),取值范圍是[0,1],即0<=μA (x)<=1。μA (x)=1表示x 完全隸屬於集合A ,相當於傳統集合概念上的x ∈A 。一個定義在空間X={x}上的隸屬度函數就定義了一個模糊集合A ,或者叫定義在論域X={x}上的模糊子集A 。對於有限個對象x 1,x 2,……,x n 模糊集合A 可以表示為:A ={(μA (x i ), x i ) |x i ∈X } (6.1)
有了模糊集合的概念,一個元素隸屬於模糊集合就不是硬性的了,在聚類的問題中,可以把聚類生成的簇看成模糊集合,因此,每個樣本點隸屬於簇的隸屬度就是[0,1]區間裡面的值。
FCM 演算法需要兩個參數一個是聚類數目C ,另一個是參數m 。一般來講C 要遠遠小於聚類樣本的總個數,同時要保證C>1。對於m ,它是一個控制演算法的柔性的參數,如果m 過大,則聚類效果會很次,而如果m 過小則演算法會接近HCM 聚類演算法。演算法的輸出是C 個聚類中心點向量和C*N的一個模糊劃分矩陣,這個矩陣表示的是每個樣本點屬於每個類的隸屬度。根據這個劃分矩陣按照模糊集合中的最大隸屬原則就能夠確定每個樣本點歸為哪個類。聚類中心表示的是每個類的平均特徵,可以認為是這個類的代表點。從演算法的推導過程中我們不難看出,演算法對於滿足正態分布的數據聚類效果會很好。
通過實驗和演算法的研究學習,不難發現FCM演算法的優缺點:
首先,模糊c 均值泛函Jm 仍是傳統的硬c 均值泛函J1 的自然推廣。J1 是一個應用很廣泛的聚類准則,對其在理論上的研究已經相當的完善,這就為Jm 的研究提供了良好的條件。
其次,從數學上看,Jm與Rs的希爾伯特空間結構(正交投影和均方逼近理論) 有密切的關聯,因此Jm 比其他泛函有更深厚的數學基礎。
最後,FCM 聚類演算法不僅在許多鄰域獲得了非常成功的應用,而且以該演算法為基礎,又提出基於其他原型的模糊聚類演算法,形成了一大批FCM類型的演算法,比如模糊c線( FCL) ,模糊c面(FCP) ,模糊c殼(FCS) 等聚類演算法,分別實現了對呈線狀、超平面狀和「薄殼」狀結構模式子集(或聚類) 的檢測。
模糊c均值演算法因設計簡單,解決問題范圍廣,易於應用計算機實現等特點受到了越來越多人的關注,並應用於各個領域。但是,自身仍存在的諸多問題,例如強烈依賴初始化數據的好壞和容易陷入局部鞍點等,仍然需要進一步的研究。