第二步:在所有樣本中隨機選擇k個點,作為中心
第三步:依次計算除這k個中心點外的每乙個點和k個中心點的距離,找出最近的距離
第四步: 將所有點劃分到各自和k個中心點最近的那個中心點的簇中去
第五步: 所有樣本被劃分為k各類別,有了k個堆資料,分別計算k個簇的中心
第六步: 生成k個新的中心點,以這k個中心重新到第三步開始執行
第七步:終止條件: 所有樣本點的分類結果不在變化或達到設定演算法的最大迭代次數
工具:jupyter notebook工具庫: sklearn
# 導包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import kmeans
# 設定圖風格
plt.style.
use(
'seaborn'
)# 設定輸出中文
plt.rcparams[
'font.sans-serif']=
['simhei'
]plt.rcparams[
'axes.unicode_minus'
]= false
#生成樣本集
# x為樣本特徵,y為樣本簇類別, 共1000個樣本,
# 每個樣本 2 個特徵,共4個簇,
# 簇中心在[-1
,-1]
,[0,
0],[
1,1]
,[2,
2],
# 簇標準差分別為[
0.4,
0.2,
0.2,
0.2]
x, y =
make_blobs
(n_samples=
1000
,n_features=2,
centers=[[
-1,-
1],[
0,0]
,[1,
1],[
2,2]
],cluster_std=
[0.4
,0.2
,0.2
,0.2
],random_state=
666)
# 生成散點圖檢視資料布局
# 繪製學習曲線,選擇合適的k值
#建立空列表,用於儲存模型的 inertia 值
l =[
]for i in range(2
,11):
#例項化kmeans物件
kmeans =
kmeans
(n_clusters = i , random_state=
666)
#訓練模型
kmeans.
fit(x)
# 將模型的inertia值儲存到列表中
l.(kmeans.inertia_)
# 使用列表值繪製學習曲線
# 第一張圖畫出折線圖
plt.
plot
(range(2
,11),l)
#第二章圖繪製出資料點
#通過學習曲線,選擇k=
4 的時候為最優
# 重新建模
kmeans =
kmeans
(n_clusters=
4,random_state=
666)
#訓練模型,並將聚類結果儲存到變數中
y_pred = kmeans.
fit_predict
(x)# 生成聚類散點圖
plt.
scatter
(x[:,0
],x[:,
1],marker=
'o',c=y_pred,cmap=
'rainbow'
)# 生成中心點
# 匯入輪廓係數
from sklearn.metrics import silhouette_score
#計算輪廓係數
silhouette_score
(x,y_pred)
#得到結果:
0.6793483930665349
# 輪廓係數: 評價聚類效果
# 取值範圍: 最高值為1,最差值為-
1# 評估:達到0.4可用,達到0.6非常好
# 0附近的值表示重疊的聚類,負值通常表示樣本已被分配到錯誤的集群。
# 建模完成
機器學習實戰之KMean
kmeans演算法步驟 1.確定聚類個數k 2.隨機選擇k個質心 3.對於所有樣本點 根據樣本點到質心的距離分類 4.分類完成後,如果所有樣本點的類別沒有變化,演算法結束 如果有變化,重新計算質心 當前類中樣本的平均值 回到步驟3 幾個問題 1.聚類個數k的確定 2.初始時質心的選取 3.容易出現區...
機器學習(7)K mean聚類
聚類屬於非監督學習,k mean是聚類中經典演算法。非監督學習即是只有樣本沒有標籤。訓練資料集 其中x i rnx i rn 和聚類數量kk 將資料劃分為kk類 演算法輸出是kk個聚類中心 1,2,k 1,2,k和每個資料點x i x i 所在的分類。步驟 1,初始化k個聚類中心 1,2,k 1,2...
sklearn機器學習 聚類演算法K Means
n init k均值演算法將在不同質心種子下執行的次數。就慣性而言,最終結果將是n init個連續執行的最佳輸出。max iter 單次執行的k均值演算法的最大迭代次數。tol 預設 1e 4,關於frobenius範數的相對容差,該範數表示兩個連續迭代的聚類中心的差異,以宣告收斂。precompu...