数学建模-K-means聚类
K-means聚类
优缺点
优点:
(1)算法简单、快速。
(2)对处理大数据集,该算法是相对高效率的。
缺点:
(1)要求用户必须事先给出要生成的簇的数目K。
(2)对初值敏感。
(3)对于孤立点数据敏感
python代码
df_data=pd.read_excel("./3倍差去异样.xls")
df_npdata=np.array(df_data)
X=df_npdata
cluster=KMeans(n_clusters=3,random_state=0)#n_clusters分类的个数
cluster=cluster.fit(X)
df_res0 = df_data[(cluster.labels_ == 0)]
df_res1 = df_data[(cluster.labels_ == 1)]
df_res2 = df_data[(cluster.labels_ == 2)]
print("类别1的数据:\n",df_res0)
print("类别2的数据:\n",df_res1)
print("类别3的数据:\n",df_res2)
K-means++
作用:
解决K-means的(2)对初值敏感。
(3)对于孤立点数据敏感问题。
算法描述
k-means++算法选择初始聚类中心的基本原则是:初始的聚类中
心之间的相互距离要尽可能的远。
算法描述如下:
(只对K-means算法“初始化K个聚类中心” 这一步进行了优化)
步骤一:随机选取一个样本作为第一个聚类中心;
步骤二:计算每个样本与当前已有聚类中心的最短距离(即与最
近一个聚类中心的距离),这个值越大,表示被选取作为聚类中
心的概率较大;最后,用轮盘法(依据概率大小来进行抽选)选
出下一个聚类中心;
步骤三:重复步骤二,直到选出K个聚类中心。选出初始点后,就
继续使用标准的K-means算法了
python代码
import numpy as np
import pandas as pd
from sklearn.cluster import KMeans
df_data=pd.read_excel("data.xlsx")
df_data=df_data.iloc[:,[1,2,3,4]]
df_npdata=np.array(df_data)
X=df_npdata
model = KMeans(n_clusters=3, init='k-means++')
cluster=model.fit(X)
df_res0 = df_data[(cluster.labels_ == 0)]
df_res1 = df_data[(cluster.labels_ == 1)]
df_res2 = df_data[(cluster.labels_ == 2)]
print("类别1的数据:\n",df_res0)
print("类别2的数据:\n",df_res1)
print("类别3的数据:\n",df_res2)

浙公网安备 33010602011771号