聚類演算法出現的原因:手裡沒有標籤,也就是沒有y值了,聚類是把相似的東西分為一組。
kmeans演算法輸入的引數:
要得到的簇的個數,也就是分成幾類,也就是需要指定k值
質心(不需要輸入):各個向量維度取平均值
歐幾里得距離。兩個點之間的距離。
優化的目標就是,不同的質心與同乙個點的距離,誰最近,這個店就屬於哪一類。
kmeans演算法的執行流程
1.對於兩類資料點,首先輸入分類的k為2,會隨機找到兩個點作為質心。
2 對每個樣本點計算歐幾里得距離,然後算出屬於哪一類
3 獲取第一次迭代的分類結果
4 對第一次的結果尋找新的質心,重新聚類。
5 獲得第二次的結果
6 依次不停迴圈往復,直到質心不再發生變化為止。
kmeans演算法的優劣性:
優點:簡單快速, 適合常規資料集
缺點:k值難確定,複雜度與樣本呈線性關係,很難發現任意形狀的簇。
python實現對鳶尾花資料集進行聚類
from sklearn import datasets
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import kmeans
iris=datasets.load_iris(
)iris_x=iris.data[:,
0:2]
#z只取前兩個維度
iris_x
#繪製資料分布圖
plt.scatter(iris_x[:,
0], iris_x[:,
1], c =
"green"
, marker=
'o', label=
'see'
)
plt.show(
)
結果如下:
接下來進行聚類:
estimator = kmeans(n_clusters=2)
#構造聚類器
estimator.fit(iris_x)
label_pred = estimator.labels_ #獲取聚類標籤
#繪製k-means結果
x0 = iris_x[label_pred ==0]
x1 = iris_x[label_pred ==1]
plt.scatter(x0[:,
0], x0[:,
1], c =
"red"
, marker=
'o', label=
'label0'
) plt.scatter(x1[:,
0], x1[:,
1], c =
"green"
, marker=
'*', label=
'label1'
)
plt.show(
)
聚類後結果如下
聚類的結果評估:
用輪廓係數去評估聚類的結果。
也就是說結果值越接近1,證明樣本聚類合理。
from sklearn import metrics
score=metrics.silhouette_score(iris_x,label_pred)
score
結果值為0.4 K Means聚類演算法原理
k means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。k means演算法有大量的變體,本文就從最傳統的k means演算法講起,在其基礎上講述k means的優化變體方法。包括初始化優化k means 距離計算優化elkan k means演算法和大資料情況...
K Means聚類演算法原理
k means演算法是無監督的聚類演算法,它實現起來比較簡單,聚類效果也不錯,因此應用很廣泛。k means演算法有大量的變體,本文就從最傳統的k means演算法講起,在其基礎上講述k means的優化變體方法。包括初始化優化k means 距離計算優化elkan k means演算法和大資料情況...
K Means聚類演算法 K D樹原理
10.14日誌 聚類 事先不知道資料會分為幾類,通過聚類分析將資料聚合成幾個群體。聚類不需要對資料進行訓練和學習。屬於無監督學習。裡的應用情況 k means演算法如何自動確定聚類數目k 這裡師兄寫的那個自迴圈找出k很迷啊 kd樹 k dimensional樹的簡稱 是一種分割k維資料空間的資料結構...