機器學習 K means聚類分析

2021-10-17 16:03:37 字數 2638 閱讀 2934

1.k-means聚類演算法原理

(1)先丟擲乙個情景問題

航空公司怎麼樣對客戶分群,區分**值客戶、無價值客戶等,對不同的客戶群體實施個性化的營銷策略,實現利潤最大化? 對於該類情景題,可使用聚類分析方法。

(2)聚類分析相關概念

在沒有給定劃分類別的情況下,根據資料的相似度進行分組的一種方法,分組的原則是組內距離最小化而組間距離最大化。

k-means演算法是典型的基於距離的非層次聚類演算法,在最小化誤差函式的基礎上將資料劃分為預定的k類別,採用距離作為相似性的評級指標,即認為兩個物件的距離越近,其相似度越大。

演算法過程: 

1、從n個樣本資料中隨機選取k個物件作為初始的聚類質心。 

2、分別計算每個樣本到各個聚類中心的距離,將物件分配到距離最近的聚類中。 

3、所有物件分配完成之後,重新計算k個聚類的質心。 

4、與前一次的k個聚類中心比較,如果發生變化,重複過程2,否則轉過程5. 

5、當質心不再發生變化時,停止聚類過程,並輸出聚類結果。 

2.k-means演算法優缺點

優點:(1)原理簡單,速度快

(2)對大資料集有比較好的伸縮性,因為分類簇數為k缺點:

(1)需要指定聚類數量k

(2)對異常值敏感,聚類前需剔除離群點

(3)對初始值敏感,一量初始值選擇不好,可能無法得到有效的聚類結果,可以多設定些不同的初始值,對比最後的運算結果,一直到結果趨於穩定來解決這一問題,也可採用k-means++演算法

3.k-menas++演算法

k-means++演算法就是對k-means隨機初始化質心的方法的優化,其基本思想就是:初始的聚類中心之間的相互距離要盡可能遠,方法如下:

(1)從輸入的資料點集合中隨機選擇乙個點作為第乙個聚類中心

(2)計算資料集中每個點與第乙個聚類中心的距離d(x)

(3)選擇乙個d(x)較大的點作為新的聚類中心,且該d(x)較大的點(需主觀判斷)作為聚類中心的概率較大

(4)重複2和3直到k個聚類中心被選出來

(5)利用這k個初始的聚類中心來執行標準的k-means演算法

1.k-means語法函式

from sklearn.cluster import kmeans

kmeans(n_clusters=8,

init='k-means++',

n_init=10,

max_iter=300,

tol=0.0001,

precompute_distances='auto',

verbose=0,

random_state=none,

copy_x=true,

n_jobs=1,

algorithm='auto'

引數的意義:

使用時很多引數已給出了預設值,一般不用去修改這些引數

2.k-means簡單案例

import numpy as np

from sklearn.cluster import kmeans

#生成乙個隨機資料,樣本大小為100, 特徵數為3

data = np.random.rand(100, 3)

#構造乙個聚類數為3的聚類器

estimator = kmeans(n_clusters=3)#構造聚類器

estimator.fit(data)#聚類

label_pred = estimator.labels_ #獲取聚類標籤

centroids = estimator.cluster_centers_ #獲取聚類中心

inertia = estimator.inertia_ # 獲取聚類準則的總和

其中:estimator初始化kmeans聚類;

estimator.fit聚類內容擬合;

estimator.label_聚類標籤,這是一種方式,還有一種是predict;

estimator.cluster_centers_聚類中心均值向量矩陣

estimator.inertia_代表聚類中心均值向量的總和

3.k-means案例2

from sklearn.cluster import kmeans

import numpy as np

data = np.random.rand(100, 3)

km_cluster = kmeans(n_clusters=3, max_iter=300, n_init=40, init='k-means++')

#返回各自文字的所被分配到的類索引

result = km_cluster.fit_predict(data)

print("predicting result: ", result)

km_cluster是kmeans初始化,其中用init的初始值選擇演算法用』k-means++』;

km_cluster.fit_predict相當於km_cluster.fit()+km_cluster.predict()合併,一次性得到聚類**之後的標籤;

km_cluster.labels_ 與 km_cluster.predict(data)這是兩種聚類結果標籤輸出的方式,結果貌似都一樣。都需要先km_cluster.fit(data),然後再呼叫。

k means聚類分析

k means演算法是machine learning領域內比較常用的演算法之一。首先從n個資料物件任意選擇 k 個物件作為初始聚類中心 而對於所剩下其它物件,則根據它們與這些聚類中心的相似度 距離 分別將它們分配給與其最相似的 聚類中心所代表的 聚類 然 後再計算每個所獲新聚類的聚類中心 該聚類中...

K means聚類分析

主成分分析 pca pca n components 0.9 data pca.fit transform cross 降維x data 500 x.shape 對類別預設為4 km kmeans n clusters 4 km.fit x predict km.predict x 顯示聚類結果 p...

K Means 聚類分析學習筆記

在之前分享的鏈家二手房資料分析的練習中用到了 k means 聚類分析方法,所以就順道一起複習一下 k means 的基礎知識好了。k means 聚類分析可將樣本分為若干個集群,它的核心思想就是使某集群的資料點與其對應的中心之間的距離最小。所以 k means 聚類分析通常會假設已知集群的中心或者...