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