k-均值算法是一種無監督學習,是一種「基於原型的聚類」(prototype-based clustering)方法,給定的數據是不含標籤的
,目標是找出數據的模式特徵進行分類。如社交網絡分析,經過用戶特徵進行簇劃分,分出不一樣羣體。
(圖源網絡,侵刪)html
給定數據集
,k-均值聚類算法的代價函數(基於歐式距離的平方偏差)爲:
其中,
是訓練樣例
分配的聚類序號;
是
所屬聚類的中心點 。k-均值算法的代價函數函數的物理意義就是,訓練樣例到其所屬的聚類中心點的距離的平均值。python
k-均值算法主要包括:根據聚類中心分配樣本類別——>更新聚類中心web
一、在實際應用的過程當中,聚類結果會和咱們初始化的聚類中心相關,由於代價函數可能會收斂在一個局部最優解上,而不是全局最優解。咱們的解決方法是屢次初始化,而後選取代價函數最小的。
二、若是沒有特別的業務要求,聚類個數如何選取?咱們能夠把聚類個數做爲橫座標,代價函數做爲縱座標,找出拐點。
算法
推薦一篇博文: 聚類效果評價
主函數KMeans網絡
sklearn.cluster.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' )
參數解釋:app
代碼:dom
# -*- coding: utf-8 -*- """ Created on Wed Nov 20 18:52:21 2019 @author: 1 """ import pandas as pd import matplotlib.pyplot as plt from sklearn.cluster import KMeans df=pd.read_csv('D:\\workspace\\python\machine learning\\data\\iris.csv',sep=',') data=df.iloc[:,0:3] kmeans=KMeans(n_clusters=3) #n_clusters:number of cluster kmeans.fit(data) labels=kmeans.labels_#聚類標籤 centres=kmeans.cluster_centers_#聚類中心 #畫三維聚類結果圖 markers=['o','^','*'] colors=['r','b','y'] data['labels']=labels ax = plt.subplot(111, projection='3d') # 建立一個三維的繪圖工程 data_new,X,Y,Z=[[]]*3,[[]]*3,[[]]*3,[[]]*3 for i in range(3): data_new[i]=data.loc[data['labels']==i] X[i],Y[i],Z[i]=data_new[i].iloc[:,0],data_new[i].iloc[:,1],data_new[i].iloc[:,2] ax.scatter(X[i],Y[i],Z[i],marker=markers[i],c=colors[i])
聚類結果:
svg