mahout探索之旅 kmeans演算法(上)

2021-06-29 02:26:03 字數 2136 閱讀 8960

k-means演算法是聚類演算法,k在在這裡指的是分類的型別數(根據經驗指出會出現幾個類別),所以在開始設定的時候非常關鍵,演算法的原理是首先假定k個分類點,然後根據歐式距離計算分類,然後去同分類的均值作為新的聚簇中心,迴圈操作直到收斂。演算法的關鍵在k個值的選取上,如果均值選得恰當將有利於演算法的快速收斂。

kmeans演算法的執行過程的偽**可概括為如下:

kmeans演算法時間複雜度:o(tkmn),其中t為迭代次數,k為簇數目;

kmeans演算法空間複雜度:o((m+k)n),m為記錄數,n為維數;

k-means演算法是最為經典的基於劃分的聚類方法,是十大經典資料探勘演算法之一。k-means演算法的基本思想是:以空間中k個點為中心進行聚類,對最靠近他們的物件歸類。通過迭代的方法,逐次更新各聚類中心的值,直至得到最好的聚類結果。

常用的距離度量方法包括:歐幾里得距離和余弦相似度。兩者都是評定個體間差異的大小的。歐幾里得距離度量會受指標不同單位刻度的影響,所以一般需要先進行標準化,同時距離越大,個體間差異越大;空間向量余弦夾角的相似度度量不會受指標刻度的影響,余弦值落於區間[-1,1],值越大,差異越小。但是針對具體應用,什麼情況下使用歐氏距離,什麼情況下使用余弦相似度?

從幾何意義上來說,n維向量空間的一條線段作為底邊和原點組成的三角形,其頂角大小是不確定的。也就是說對於兩條空間向量,即使兩點距離一定,他們的夾角余弦值也可以隨意變化。感性的認識,當兩使用者評分趨勢一致時,但是評分值差距很大,余弦相似度傾向給出更優解。舉個極端的例子,兩使用者只對兩件商品評分,向量分別為(3,3)和(5,5),這兩位使用者的認知其實是一樣的,但是歐式距離給出的解顯然沒有余弦值合理。

一般是目標函式達到最優或者達到最大的迭代次數即可終止。對於不同的距離度量,目標函式往往不同。當採用歐式距離時,目標函式一般為最小化物件到其簇質心的距離的平方和,如下:

當採用余弦相似度時,目標函式一般為最大化物件到其簇質心的余弦相似度和,如下:

該演算法的最大優勢在於簡潔和快速。演算法的關鍵在於初始中心的選擇和距離公式。

kmenas演算法試圖找到使平均誤差準則函式最小的簇。當潛在的簇形狀是凸面的,簇與簇之間區別較明顯,且簇大小相近時,其聚類結果較理想。前面提到,該演算法時間複雜度為o(tkmn),與樣本數量線性相關,所以,對於處理大資料集合,該演算法非常高效,且伸縮性較好。但該演算法除了要事先確定簇數k和對初始聚類中心敏感外,經常以區域性最優結束,同時對「雜訊」和孤立點敏感,並且該方法不適於發現非凸面形狀的簇或大小差別很大的簇。

或許對上述描述,有人還是對kmeans演算法不太理解,下面通過形象化的圖形來加深理解。假設研究的資料點不是很多,小到還是可以用二維座標來表示(如下圖,大概有兩個類)。

取k=2,現隨機取兩個點(點1,點2),計算所有的點到點1、2的距離,形成c圖(紅色屬於點1的類,藍色屬於點2的類),計算各類的平均值(中心點)(如d圖);以d圖中的兩個x點為k均值點,進行第二次迭代,再進行上述同樣的距離計算過程,直至圖f結束。演算法結束的條件是簇質心的距離的平方和最小(一般迭代次數大於k值)。

由kmeans演算法特點知道,演算法對雜訊和孤立點很敏感,需要作平滑去噪處理,把不必要的點去除;在作資料探勘時難以確定k值,因此canopy演算法比該演算法更有用武之地。可以先使用canopy找出最佳k值,然後kmeans聚類。kmeans演算法可用於聚類劃分,如淨化網路論壇,使用者的行為劃分尋找水軍的共同特徵;電子商務客商的消費行為,進而結合推薦系統投遞廣告。

public void kmeansclustering() ,x=,y=",

(i + 1), temp.getx(), temp.gety()));

system.out.println("----------");

system.out.println("結果值收斂");

// classpoints.size()=類數目

for (int i = 0; i < classpoints.size(); i++) ,x=,y=",

(i + 1), temp.getx(), temp.gety()));

mahout探索之旅 CART分類回歸演算法

cart 演算法原理與理解 cart演算法的全稱是分類回歸樹演算法,分類即劃分離散變數 回歸劃分連續變數。他與c4.5很相似,但是乙個二元分類,採用的是類似於熵的gini指數作為分類決策,形成決策樹之後還要進行剪枝,我自己在實現整個演算法的時候採用的是代價複雜度演算法。gini 指數主要是度量資料劃...

Second Life 軟體探索之旅

主題 日期 second life 客戶機,第 2 部分 深入研究文件 second life 客戶機的開發者文件採用了 wiki。在 second life 軟體探索之旅的第 2 階段,我們將檢視該文件,並使用它對客戶機進行一些修改。2007年5月31日 second life 客戶機,第 3 部...

Identity Core探索之旅 五

authorization,意為授權,當使用者登入後,使用者已經有了自己的身份資訊 我是誰 但是使用者也分層級,有普通使用者,vip使用者甚至管理員,我們現在要求只能管理員可以登入,怎麼做呢?很簡單,先了解下怎麼配置authorization。先在service中配置authorization se...