簡單易學的機器學習演算法 K Means演算法

2021-08-15 04:03:30 字數 2950 閱讀 2350

聚類演算法是一種典型的無監督學習演算法,主要用於將相似的樣本自動歸到乙個類別中。聚類演算法與分類演算法最大的區別是:聚類演算法是無監督的學習演算法,而分類演算法屬於監督的學習演算法。

在聚類演算法中根據樣本之間的相似性,將樣本劃分到不同的類別中,對於不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算方法有歐式距離法。

基本k-means

演算法的思想很簡單,事先確定常數

k,常數

k意味著最終的聚類類別數,首先隨機選定初始點為質心,並通過計算每乙個樣本與質心之間的相似度(這裡為歐式距離),將樣本點歸到最相似的類中,接著,重新計算每個類的質心(即為類中心),重複這樣的過程,知道質心不再改變,最終就確定了每個樣本所屬的類別以及每個類的質心。由於每次都要計算所有的樣本與每乙個質心之間的相似度,故在大規模的資料集上,

k-means

演算法的收斂速度比較慢。

輸出最終的質心以及每個類

對資料集進行測試

原始資料集

matlab**

主程式[plain]view plain

copy

%% input the data  

a = load('testset.txt');  

%% 計算質心  

centroids = kmeans(a, 4);  

隨機選取質心

[plain]view plain

copy

%% 取得隨機中心  

function [ centroids ] = randcent( dataset, k )  

[m,n] = size(dataset);%取得列數  

centroids = zeros(k, n);  

for j = 1:n  

minj = min(dataset(:,j));  

rangej = max(dataset(:,j))-min(dataset(:,j));  

centroids(:,j) = minj+rand(k,1)*rangej;%產生區間上的隨機數  

end  

end  

計算相似性

[plain]view plain

copy

function [ dist ] = distence( veca, vecb )  

dist = (veca-vecb)*(veca-vecb)';%這裡取歐式距離的平方  

end  

kmeans的主程式

[plain]view plain

copy

%% kmeans的核心程式,不斷迭代求解聚類中心  

function [ centroids ] = kmeans( dataset, k )  

[m,n] = size(dataset);  

%初始化聚類中心  

centroids = randcent(dataset, k);  

subcenter = zeros(m,2);%做乙個m*2的矩陣,第一列儲存類別,第二列儲存距離  

change = 1;%判斷是否改變  

while change == 1  

change = 0;  

%對每一組資料計算距離  

for i = 1:m  

mindist = inf;  

minindex = 0;  

for j = 1:k  

dist= distence(dataset(i,:), centroids(j,:));  

if dist 

mindist = dist;  

minindex = j;  

end  

end  

if subcenter(i,1) ~= minindex  

change = 1;  

subcenter(i,:)=[minindex, mindist];  

end          

end  

%對k類重新就算聚類中心  

for j = 1:k  

sum = zeros(1,n);  

r = 0;%數量  

for i = 1:m  

if subcenter(i,1) == j  

sum = sum + dataset(i,:);  

r = r+1;  

end  

end  

centroids(j,:) = sum./r;  

end  

end  

%% 完成作圖  

最終的聚類結果

簡單易學的機器學習演算法 極限學習機 ELM

極限學習機 extreme learning machine elm,是由黃廣斌提出來的求解單隱層神經網路的演算法。elm最大的特點是對於傳統的神經網路,尤其是單隱層前饋神經網路 slfns 在保證學習精度的前提下比傳統的學習演算法速度更快。elm是一種新型的快速學習演算法,對於單隱層神經網路,el...

簡單易學的git教程

學習難度有點大,一些理論比較難理解 集中式 分布式 建立乙個空目錄 在空目錄中執行git init命令 新建 修改或者刪除乙個檔案readme.txt 新建或者修改檔案時使用git add readme.txt 命令將檔案新增到暫存區 刪除檔案時使用git rm readme.txt將刪除修改新增到...

機器學習簡單演算法整理

今天整理了一下簡單的機器學習演算法。打算按照這個提綱學習 實現,不一定按順序,但希望自己每學習乙個都能了解透徹。打算寒假前就仔細研究這塊了。一 regression 回歸 二 基於例項的方法 三 regularazation 正則化方法 四 決策 decison 樹學習 五 bayesian 貝葉斯...