k-means
kmeans 是一個聚類演算法,當給一堆資料做 K 個分類時,kmeans 演算法能根據群中心點與資料點的距離一步一步的疊代算出最適合的分群聚落,主要目的就是最小化下面的error。其中公式i代表所設定的K群中的其中一群,公式j代表所有點中的某一點,因此用白話文解釋為算出群落中的中心點與那個族群的所有點的距離加總,第二個加總符號表示每一群都做距離加總然後把它全部加起來。
Total error:
算法原理:
接下來講解步驟原理,步驟只有三個,剛開始先亂數決定每個群的中心點,再來將每個資料點根據選定出的群中心點做匹配的動作,之後根據新選定的群更新成新的中心點,一直重複上面兩個步驟直到收斂,底下是圖解說明,圖片來自圖的下方部落格連結。
https://dotblogs.com.tw/dragon229/2013/02/04/89919
應用:
下面將利用sklearn提供的kmeans工具對Iris Data進行分類的動作
Iris Datasets
Iris 是集合了三種花的資料(Setosa, Versicolour, and Virginica),總共記錄了150筆,每一筆紀錄四個資訊,分別是花萼的長、花萼的寬、花瓣的長、花瓣的寬以及所屬的分類(用0~2表示)。
from sklearn import cluster, datasets
iris = datasets.load_iris()
iris_X = iris.data
print (iris_X.shape) # (150,4)
http://scikit-learn.org/stable/auto_examples/datasets/plot_iris_dataset.html
main function
cluster.KMeans(n_clusters=3,
init='k-means++',
n_init=10,
max_iter=300,
tol=0.0001,
n_jobs=1, ).fit(iris_X)
參數
- n_clusters:群集數量
- init:初始中心方法
- n_init:獲取初始中心的疊代次數
- tol : tolerance 即收斂的條件
- n_jobs: 工作的數量(平行運算用),-1為全力用CPU跑
程式碼實現:
from sklearn import cluster
kmeans_fit = cluster.KMeans(n_clusters=3,
init='k-means++',
n_init=10,
max_iter=300,
tol=0.0001,
n_jobs=1, ).fit(iris_X)
# 印出分群結果
cluster_labels = kmeans_fit.labels_
print("cluster_labels\n",cluster_labels)
# 印出中心點
cluster_centers = kmeans_fit.cluster_centers_
print ("cluster_centers\n",cluster_centers)
# 印出總error error = kmeans_fit.inertia_
print ("error\n",error)
# 印出品種看看
iris_y = iris.target
print("actuall target\n",iris_y)
參考資料:
https://blog.csdn.net/hrsstudy/article/details/71173305
https://github.com/PaulChongPeng/darknet/blob/master/tools/k_means_yolo.py
http://ccckmit.wikidot.com/ai:kmeans
https://blog.csdn.net/sinat_26917383/article/details/70240628
留言列表