Part8__机器学习实战学习笔记__Kmeans

Step By Step

1、原理简介
2、Code测试
3、优缺点


一、原理简介
k-均值聚类的目的是:把n个点(可以是样本的一次观察或一个实例)划分到k个聚类中,使得每个点都属于离他最近的均值(此即聚类中心)对应的聚类,以之作为聚类的标准。

Part8__机器学习实战学习笔记__Kmeans

二、Code测试
  • 2.1 Code Sample
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans

# 获取数据集
iris_data = load_iris()
iris_df = pd.DataFrame(iris_data.data, columns = iris_data.feature_names) # creating dataframe
x = iris_df.iloc[:, [0, 1, 2, 3]].values

# 初始化&训练模型
kmeans = KMeans(n_clusters=3, init = 'k-means++', max_iter = 100, n_init = 10, random_state = 0) # Applying Kmeans classifier
y_kmeans = kmeans.fit_predict(x)

# 可视化展示
print(kmeans.cluster_centers_)
plt.scatter(x[y_kmeans == 0, 0], x[y_kmeans == 0, 1],s = 100, c = 'red', label = 'Iris-setosa')   # x共有四列,这里取第一列的值作为横坐标的值,取第二列作为纵坐标的值
plt.scatter(x[y_kmeans == 1, 0], x[y_kmeans == 1, 1],s = 100, c = 'blue', label = 'Iris-versicolour')
plt.scatter(x[y_kmeans == 2, 0], x[y_kmeans == 2, 1],s = 100, c = 'green', label = 'Iris-virginica')   # Visualising the clusters - On the first two columns
plt.scatter(kmeans.cluster_centers_[:,   0], kmeans.cluster_centers_[:,1],s = 100, c = 'black', label = 'Centroids')   # plotting the centroids of the clusters
plt.legend()
plt.show()
  • 2.2 The Result

Part8__机器学习实战学习笔记__Kmeans

三、优缺点

优点

  • 算法简单,容易实现;
  • 算法速度很快;
  • 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法通常局部收敛。
  • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,且簇与簇之间区别明显时,聚类效果较好。

缺点

  • 对数据类型要求较高,适合数值型数据;
  • 可能收敛到局部最小值,在大规模数据上收敛较慢
  • 分组的数目k是一个输入参数,不合适的k可能返回较差的结果。
  • 对初值的簇心值敏感,对于不同的初始值,可能会导致不同的聚类结果;
  • 不适合于发现非凸面形状的簇,或者大小差别很大的簇。
  • 对于”噪声”和孤立点数据敏感,少量的该类数据能够对平均值产生极大影响。

更多参考

K均值算法(K-Means)

上一篇:阿里云服务网格ASM之扩展能力(3):在ASM中使用开放策略代理OPA


下一篇:【双11背后的技术】万亿级数据洪峰下的分布式消息引擎