導航:首頁 > 源碼編譯 > c均值演算法

c均值演算法

發布時間:2023-01-03 04:27:04

㈠ c演算法 求平均值問題(遞歸)

*n就是乘以n的意思啊
設這組數字是 4 5 2 4 7 88(共6 個)
一開始f->link 肯定不是NULL了,所以一直往下遞歸,直到最後一個元素時,f->link 等於了NULL,n也就變為了1,return回去的就是最後一個元素88了,而返還回去的值給了 倒數第二個遞歸,即sum=88*1,n++(n變為了2),然後返還(88*1+7)/2(即最後兩項的平均值),然後再sum=【(88*1+7)/2】*2(最後兩項的和),n++(n等於了3),返還(88*1+2+4)/3(即最後3項的平均值).......依次類推到鏈首部,就這樣了

希望你能理解

㈡ 模糊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均值演算法因設計簡單,解決問題范圍廣,易於應用計算機實現等特點受到了越來越多人的關注,並應用於各個領域。但是,自身仍存在的諸多問題,例如強烈依賴初始化數據的好壞和容易陷入局部鞍點等,仍然需要進一步的研究。

㈢ 用C語言計算一個數組內的所有數的平均值

printf("%f",d/10)這行代碼的輸出控制有誤,因為d定義的是int型,d/10還是int型,應該使用%d,而不是%f,%f是單精度浮點型數據。

格式說明由「%」和格式字元組成,如%d%f等。它的作用是將輸出的數據轉換為指定的格式輸出。格式說明總是由「%」字元開始的。不同類型的數據用不同的格式字元。

格式字元有d,o,x,u,c,s,f,e,g等。

1.%d整型輸出,%ld長整型輸出,

2.%o以八進制數形式輸出整數,

3.%x以十六進制數形式輸出整數,

4.%u以十進制數輸出unsigned型數據(無符號數)。

5.%c用來輸出一個字元,

改過之後運行結果:

(3)c均值演算法擴展閱讀:

需要說明的是:

1、一個C語言源程序可以由一個或多個源文件組成。

2、每個源文件可由一個或多個函數組成。

3、一個源程序不論由多少個文件組成,都有一個且只能有一個main函數,即主函數。是整個程序的入口。

4、源程序中可以有預處理命令(包括include 命令,ifdef、ifndef命令、define命令),預處理命令通常應放在源文件或源程序的最前面。

5、每一個說明,每一個語句都必須以分號結尾。但預處理命令,函數頭和花括弧「}」之後不能加分號。結構體、聯合體、枚舉型的聲明的「}」後要加「 ;」。

6、標識符,關鍵字之間必須至少加一個空格以示間隔。若已有明顯的間隔符,也可不再加空格來間隔。

網路-c語言

㈣ 模式識別中,C均值演算法的初始聚類中心點的選取會影響聚類情況的變化

會對結果有影響,包括聚類的種類都對聚類的結果有影響

㈤ 模糊c均值演算法matlab程序

function [center, U, obj_fcn] = FCMClust(data, cluster_n, options)
% FCMClust.m 採用模糊C均值對數據集data聚為cluster_n類
%
% 用法:
% 1. [center,U,obj_fcn] = FCMClust(Data,N_cluster,options);
% 2. [center,U,obj_fcn] = FCMClust(Data,N_cluster);
%
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% N_cluster ---- 標量,表示聚合中心數目,即類別數
% options ---- 4x1矩陣,其中
% options(1): 隸屬度矩陣U的指數,>1 (預設值: 2.0)
% options(2): 最大迭代次數 (預設值: 100)
% options(3): 隸屬度最小變化量,迭代終止條件 (預設值: 1e-5)
% options(4): 每次迭代是否輸出信息標志 (預設值: 1)
% 輸出:
% center ---- 聚類中心
% U ---- 隸屬度矩陣
% obj_fcn ---- 目標函數值
% Example:
% data = rand(100,2);
% [center,U,obj_fcn] = FCMClust(data,2);
% plot(data(:,1), data(:,2),'o');
% hold on;
% maxU = max(U);
% index1 = find(U(1,:) == maxU);
% index2 = find(U(2,:) == maxU);
% line(data(index1,1),data(index1,2),'marker','*','color','g');
% line(data(index2,1),data(index2,2),'marker','*','color','r');
% plot([center([1 2],1)],[center([1 2],2)],'*','color','k')
% hold off;

if nargin ~= 2 & nargin ~= 3, %判斷輸入參數個數只能是2個或3個
error('Too many or too few input arguments!');
end

data_n = size(data, 1); % 求出data的第一維(rows)數,即樣本個數
in_n = size(data, 2); % 求出data的第二維(columns)數,即特徵值長度
% 默認操作參數
default_options = [2; % 隸屬度矩陣U的指數
100; % 最大迭代次數
1e-5; % 隸屬度最小變化量,迭代終止條件
1]; % 每次迭代是否輸出信息標志

if nargin == 2,
options = default_options;
else %分析有options做參數時候的情況
% 如果輸入參數個數是二那麼就調用默認的option;
if length(options) < 4, %如果用戶給的opition數少於4個那麼其他用默認值;
tmp = default_options;
tmp(1:length(options)) = options;
options = tmp;
end
% 返回options中是數的值為0(如NaN),不是數時為1
nan_index = find(isnan(options)==1);
%將denfault_options中對應位置的參數賦值給options中不是數的位置.
options(nan_index) = default_options(nan_index);
if options(1) <= 1, %如果模糊矩陣的指數小於等於1
error('The exponent should be greater than 1!');
end
end
%將options 中的分量分別賦值給四個變數;
expo = options(1); % 隸屬度矩陣U的指數
max_iter = options(2); % 最大迭代次數
min_impro = options(3); % 隸屬度最小變化量,迭代終止條件
display = options(4); % 每次迭代是否輸出信息標志

obj_fcn = zeros(max_iter, 1); % 初始化輸出參數obj_fcn

U = initfcm(cluster_n, data_n); % 初始化模糊分配矩陣,使U滿足列上相加為1,
% Main loop 主要循環
for i = 1:max_iter,
%在第k步循環中改變聚類中心ceneter,和分配函數U的隸屬度值;
[U, center, obj_fcn(i)] = stepfcm(data, U, cluster_n, expo);
if display,
fprintf('FCM:Iteration count = %d, obj. fcn = %f\n', i, obj_fcn(i));
end
% 終止條件判別
if i > 1,
if abs(obj_fcn(i) - obj_fcn(i-1)) < min_impro,
break;
end,
end
end

iter_n = i; % 實際迭代次數
obj_fcn(iter_n+1:max_iter) = [];

% 子函數
function U = initfcm(cluster_n, data_n)
% 初始化fcm的隸屬度函數矩陣
% 輸入:
% cluster_n ---- 聚類中心個數
% data_n ---- 樣本點數
% 輸出:
% U ---- 初始化的隸屬度矩陣
U = rand(cluster_n, data_n);
col_sum = sum(U);
U = U./col_sum(ones(cluster_n, 1), :);

% 子函數
function [U_new, center, obj_fcn] = stepfcm(data, U, cluster_n, expo)
% 模糊C均值聚類時迭代的一步
% 輸入:
% data ---- nxm矩陣,表示n個樣本,每個樣本具有m的維特徵值
% U ---- 隸屬度矩陣
% cluster_n ---- 標量,表示聚合中心數目,即類別數
% expo ---- 隸屬度矩陣U的指數
% 輸出:
% U_new ---- 迭代計算出的新的隸屬度矩陣
% center ---- 迭代計算出的新的聚類中心
% obj_fcn ---- 目標函數值
mf = U.^expo; % 隸屬度矩陣進行指數運算結果
center = mf*data./((ones(size(data, 2), 1)*sum(mf'))'); % 新聚類中心(5.4)式
dist = distfcm(center, data); % 計算距離矩陣
obj_fcn = sum(sum((dist.^2).*mf)); % 計算目標函數值 (5.1)式
tmp = dist.^(-2/(expo-1));
U_new = tmp./(ones(cluster_n, 1)*sum(tmp)); % 計算新的隸屬度矩陣 (5.3)式

% 子函數
function out = distfcm(center, data)
% 計算樣本點距離聚類中心的距離
% 輸入:
% center ---- 聚類中心
% data ---- 樣本點
% 輸出:
% out ---- 距離
out = zeros(size(center, 1), size(data, 1));
for k = 1:size(center, 1), % 對每一個聚類中心
% 每一次循環求得所有樣本點到一個聚類中心的距離
out(k, :) = sqrt(sum(((data-ones(size(data,1),1)*center(k,:)).^2)',1));
end

㈥ k均值聚類演算法、c均值聚類演算法、模糊的c均值聚類演算法的區別

k均值聚類:---------一種硬聚類演算法,隸屬度只有兩個取值0或1,提出的基本根據是「類內誤差平方和最小化」准則;
模糊的c均值聚類演算法:--------
一種模糊聚類演算法,是k均值聚類演算法的推廣形式,隸屬度取值為[0
1]區間內的任何一個數,提出的基本根據是「類內加權誤差平方和最小化」准則;
這兩個方法都是迭代求取最終的聚類劃分,即聚類中心與隸屬度值。兩者都不能保證找到問題的最優解,都有可能收斂到局部極值,模糊c均值甚至可能是鞍點。
至於c均值似乎沒有這么叫的,至少從我看到文獻來看是沒有。不必糾結於名稱。如果你看的是某本模式識別的書,可能它想表達的意思就是k均值。
實際上k-means這個單詞最先是好像在1965年的一篇文獻提出來的,後來很多人把這種聚類叫做k均值。但是實際上十多年前就有了類似的演算法,但是名字不一樣,k均值的歷史相當的復雜,在若干不同的領域都被單獨提出。追尋演算法的名稱與歷史沒什麼意義,明白具體的實現方法就好了。

㈦ C語言編從鍵盤輸入十個數,計算其平均值,並將大於平均值的數輸出

源代碼如下:

#include <stdio.h>

int main()

{

int n, i;

float num[100], sum = 0.0, average;

printf("輸入元素個數: ");

scanf("%d", &n);

while (n > 100 || n <= 0)

{

printf("Error! 數字需要在1 到 100 之間。 ");

printf("再次輸入: ");

scanf("%d", &n);

}

for(i = 0; i < n; ++i)

{

printf("%d. 輸入數字: ", i+1);

scanf("%f", &num[i]);

sum += num[i];

}

average = sum / n;

printf("平均值 = %.2f", average);

return 0;

}

(7)c均值演算法擴展閱讀

C語言自定義名字的要求

1、可以使用大小寫字母、下劃線、數字,但第一個字母必須是字母或者下劃線。

2、字母區分大小寫,BASIC語言不區分大小寫。

㈧ k均值聚類演算法、c均值聚類演算法、模糊的c均值聚類演算法的區別

k均值聚類:---------一種硬聚類演算法,隸屬度只有兩個取值0或1,提出的基本根據是「類內誤差平方和最小化」准則;
模糊的c均值聚類演算法:-------- 一種模糊聚類演算法,是k均值聚類演算法的推廣形式,隸屬度取值為[0 1]區間內的任何一個數,提出的基本根據是「類內加權誤差平方和最小化」准則;
這兩個方法都是迭代求取最終的聚類劃分,即聚類中心與隸屬度值。兩者都不能保證找到問題的最優解,都有可能收斂到局部極值,模糊c均值甚至可能是鞍點。
至於c均值似乎沒有這么叫的,至少從我看到文獻來看是沒有。不必糾結於名稱。如果你看的是某本模式識別的書,可能它想表達的意思就是k均值。
實際上k-means這個單詞最先是好像在1965年的一篇文獻提出來的,後來很多人把這種聚類叫做k均值。但是實際上十多年前就有了類似的演算法,但是名字不一樣,k均值的歷史相當的復雜,在若干不同的領域都被單獨提出。追尋演算法的名稱與歷史沒什麼意義,明白具體的實現方法就好了。

㈨ k-均值聚類和c-均值聚類一樣嗎

不一樣,K均值是嚴格分類,但是C均值就是模糊C他加入了自己的評判因素,比如一個人多高才算是高,還有好壞的評判,沒有一定的標准。模糊C就算是模糊綜合評判的樣子

閱讀全文

與c均值演算法相關的資料

熱點內容
程序員會壓抑 瀏覽:680
物探編程 瀏覽:300
vuepdf預覽 瀏覽:325
迷你世界出編程軟體了 瀏覽:673
res文件夾有哪些 瀏覽:142
交通信號燈單片機課程設計 瀏覽:826
如何測試流媒體伺服器的並發能力 瀏覽:161
溯源碼有分國家認證的嗎 瀏覽:218
如何通過app查詢產檢報告 瀏覽:944
拉結爾安卓手機怎麼用 瀏覽:695
驅動級進程代理源碼 瀏覽:782
androidshape畫線 瀏覽:511
程序員想辭職被拒絕 瀏覽:101
java面試邏輯 瀏覽:749
如何下載全英文app 瀏覽:724
js函數式編程指南 瀏覽:380
為什麼安卓手機相機啟動會卡 瀏覽:341
python中t是什麼意思 瀏覽:765
移動硬碟內存加密 瀏覽:407
單片機測角度 瀏覽:864