目錄
一.K-means算法的原理和工作流程
1.算法原理
2.工作流程
二.K-means中常用的距離度量方法
1.歐幾里得距離(歐氏距離)
2.曼哈頓距離
3.切比雪夫距離
三.K-means算法中K值的選擇
1.手肘法
2. 輪廓系數(shù)
? ? ? ? 手肘法和輪廓系數(shù)的實現(xiàn)
四.初始點的選擇
1.隨機選擇
2.最遠距離?? ? ??
3.層次聚類或canopy預(yù)處理
五.陷入質(zhì)心的循環(huán)停不下來怎么辦
1.原因
2.怎么辦?
六.K-means算法與KNN算法的共同點與區(qū)別
1.區(qū)別
2.共同點
七.K-means算法的優(yōu)缺點
1.K-means算法的優(yōu)點
2.K-means算法的缺點
八.根據(jù)K-means算法的缺點,有哪些改進的算法
1.K-means++
2.ISODATA
3.Kernel K-means
九.如何對K-means進行算法調(diào)優(yōu)
十.K-means算法實現(xiàn)
一.K-means算法的原理和工作流程
1.算法原理
????????K-means算法是基于原型的,根據(jù)距離劃分組的無監(jiān)督聚類算法,對于給定的樣本集,按照樣本間的距離大小,將樣本劃分為K個簇,使得簇內(nèi)的點盡量緊密相連,而簇間的點距離盡量大。
2.工作流程
????????step1:隨機選取K個點作為聚類中心,即k個類中心向量
????????step2:分別計算其他樣本點到各個類中心向量的距離,并將其劃分到距離最近的類
????????step3:更新各個類的中心向量
? ? ? ? step4:判斷新的類中心向量是否發(fā)生改變,若發(fā)生改變則轉(zhuǎn)到step2,若類中心向量不再發(fā)生變化,停止并輸出聚類結(jié)果
二.K-means中常用的距離度量方法
1.歐幾里得距離(歐氏距離)
????????
? ? ? ? 衡量多維空間中的兩點間距離,也是最常用的距離度量方法。
2.曼哈頓距離
? ? ??
? ? ? ? ?曼哈頓距離也叫出租車距離,用來標明兩個點在標準坐標系上的絕對軸距總和。
3.切比雪夫距離
????????
三.K-means算法中K值的選擇
? ? ? ? 思考:如果我們的數(shù)據(jù)是關(guān)于色彩RGB數(shù)據(jù),我們可以直接設(shè)置K為3對圖片的參數(shù)進行聚類分析,這是在我們已知數(shù)據(jù)基本信息的前提下采取的策略。但是,如果我們并不知道數(shù)據(jù)的基本信息,怎么分類,分成幾類就是我們不得不思考的問題,這時,我們更希望能夠從數(shù)據(jù)的角度出發(fā),判斷這一組數(shù)據(jù)希望自己分成幾類,即K為幾時分類效果最好。
1.手肘法
? ? ? ? 1.簡單描述手肘法
????????手肘法是最常用的確定K-means算法K值的方法,所用到的衡量標準是SSE(sum of the squared errors,誤差平方和)??
? ? ? ? 主要思想:當k小于真實聚類數(shù)時,隨著k的增大,會大幅提高類間聚合程度,SSE會大幅下降,當k達到真實聚類數(shù)時,隨著k的增加,類間的聚合程度不會大幅提高,SSE的下降幅度也不會很大,所以k/SSE的折線圖看起來像一個手肘,我們選取肘部的k值進行運算。
????????????????
2. 輪廓系數(shù)
? ? ? ? 1.簡單描述輪廓系數(shù)
? ? ? ? ? ? ? ? 使用輪廓系數(shù)時,先假設(shè)已經(jīng)將樣本集分成了k個簇,針對每個點,計算其輪廓系數(shù)
? ? ? ? ? ? ? ? 輪廓系數(shù)公式:
????????????????????????
? ? ? ? ? ? ? ? 其中a(i)是樣本點x(i)對同簇其他樣本點的平均距離,稱為凝聚度;b(i)是樣本點x(i)到最近簇所有樣本的平均距離,稱為分離度。
? ? ? ? ? ? ? ? 最近簇定義如下:
????????????????????????
?????????????????就是用Xi到某個簇所有樣本平均距離作為衡量該點到該簇的距離后,選擇離Xi最近的一個簇作為最近簇。
? ? ? ? ? ? ? ? 求出所有點的輪廓系數(shù)再求平均值就得出了平均輪廓系數(shù),平均輪廓系數(shù)的取值在[-1,1],顯然,由輪廓系數(shù)公式可以觀察出,凝聚度越小,分離度越大,分類效果越好,平均輪廓系數(shù)也越大,所以,取平均輪廓系數(shù)最大的點的k值時,分類效果越好
? ? ? ? 手肘法和輪廓系數(shù)的實現(xiàn)
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
data=pd.read_excel(r'C:\Users\21091\Downloads\wine.xlsx')
scores=[] #存放輪廓系數(shù)
distortions=[]#簇內(nèi)誤差平方和 SSE
for i in range(2,10):
Kmeans_model=KMeans(n_clusters=i)
predict_=Kmeans_model.fit_predict(data)
scores.append( silhouette_score(data,predict_))
distortions.append(Kmeans_model.inertia_)
print("輪廓系數(shù):",scores)
print("簇內(nèi)誤差平方和:",distortions)
#SSE 手肘法
plt.plot(range(2,10),distortions,marker='x')
plt.xlabel('Number of clusters')
plt.ylabel('Distortion')
plt.title('distortions')
plt.show()
#輪廓系數(shù)法
plt.plot(range(2,10),scores,marker='x')
plt.xlabel('Number of clusters')
plt.ylabel('scores')
plt.title('scores')
plt.show()
運行結(jié)果
????????????????????????
四.初始點的選擇
1.隨機選擇
? ? ? ? ? ?顧名思義,隨機選取k個點作為初始點
2.最遠距離?? ? ??
? ? ? ? 先選取1個點作為聚類中心,遍歷其余所有樣本點,選擇距離最遠的樣本點作為第二個聚類中心,計算這兩個點的中心向量,再次遍歷樣本點,找到最遠的點作為第三個聚類中心,迭代直至找到k個點。
3.層次聚類或canopy預(yù)處理
? ? ? ? 先得到k個簇,再從每個簇中選擇一個點,該點可以是中心點,也可以是離中心點最近的點。
五.陷入質(zhì)心的循環(huán)停不下來怎么辦
1.原因
? ? ? ? 可能樣本數(shù)據(jù)本身不收斂
2.怎么辦?
? ? ? ? 1.進行迭代次數(shù)設(shè)置
? ? ? ? 2.設(shè)定收斂判斷距離
六.K-means算法與KNN算法的共同點與區(qū)別
1.區(qū)別
? ? ? ? 1.K-means算法是聚類算法,無監(jiān)督學習;KNN算法是分類算法,監(jiān)督學習
? ? ? ? 2.K-means算法與KNN算法中的K值含義不同
? ? ? ? ? ? ? ? K-means算法是將樣本聚類成K個類;KNN算法是將輸入數(shù)據(jù)的特征與樣本集中數(shù)據(jù)的特征進行比較,取最相似的K個數(shù)據(jù),若其中X類數(shù)據(jù)占大部分,則將這個輸入數(shù)據(jù)劃分為X類。
? ? ? ? 3.K-means算法有明顯的前期訓練過程,KNN算法沒有。
2.共同點
? ? ? ? 都用到了NN(Nears Neighbor)算法 ,即根據(jù)一個點,在樣本集中找到離它最近的點。
七.K-means算法的優(yōu)缺點
1.K-means算法的優(yōu)點
? ? ? ?(1)原理簡單,容易實現(xiàn)
???????(2)可解釋度較強
2.K-means算法的缺點
????????(1)K值很難確定
????????(2)局部最優(yōu)
????????(3)對噪音和異常點敏感
????????(4)需樣本存在均值(限定數(shù)據(jù)種類)
????????(5)聚類效果依賴于聚類中心的初始化
????????(6)對于非凸數(shù)據(jù)集或類別規(guī)模差異太大的數(shù)據(jù)效果不好
八.根據(jù)K-means算法的缺點,有哪些改進的算法
1.K-means++
? ? ? ? ? ? ? 利用距離越遠越好的策略選取初始點
2.ISODATA
? ? ? ? ? ? ? ? 當屬于某個類的樣本點過少時,把這個類去掉;當屬于某個類的樣本點過多且分散時,將這個類分為兩個類
3.Kernel K-means
? ? ? ? ? ? ? ? 參照支持向量機中核函數(shù)的定義,將所有樣本映射到另外一個特征空間中再進行聚類,有可能改善聚類效果。
九.如何對K-means進行算法調(diào)優(yōu)
1.數(shù)據(jù)歸一化和離散點處理
2.合理選擇k值
3.使用核方法
十.K-means算法實現(xiàn)
? ? ? ? ? 煩請移步我的另一篇博客:文章來源:http://www.zghlxwxcb.cn/news/detail-595211.html
????????https://blog.csdn.net/weixin_46336091/article/details/123881505文章來源地址http://www.zghlxwxcb.cn/news/detail-595211.html
到了這里,關(guān)于K-means算法(知識點梳理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!