Python Kmeans K均值分类

                                 Python Kmeans K均值分类

1 声明

本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。

2 Kmeans简介

相关概念见下:

Kmeans是无监督分类算法,即不需要target即y参与的分类方法。该算法的核心思想是将数据按照特征分成k(超参数)组,每组包含大致相同的方差。执行过程见下:

1 随机找k个位置作为中心

2 针对每个样本

 a) 计算每个样本与中心点的距离。

 b) 将当前样本分配到最近中心点的群集。

3 中心点移动到它们各自集群的平均值(即中心)。

4 重复步骤2、3直至样本的群集关系不变

3 KMeans代码示例

# 加载包
from sklearn import datasets
import matplotlib.pyplot as plt

from sklearn.cluster import KMeans
# 加载IRIS数据集
iris = datasets.load_iris()
# 指定特征和目标变量
X = iris.data[:, :2]
y = iris.target
plt.scatter(X[:,0], X[:,1], c=y, cmap='gist_rainbow')
plt.xlabel('Sepa1 Length')
plt.ylabel('Sepal Width')
# 创建KMeans K均值
kmean = KMeans(n_clusters = 3, random_state=1)
kmean.fit(X)
KMeans(algorithm='auto',
       copy_x=True,
       init='k-means++',
       max_iter=300,
       n_clusters=3,
       n_init=10,
       n_jobs=None,
       precompute_distances='auto',
       random_state=1,
       tol=0.0001, # 簇最小距离
       verbose=0)


new_labels = kmean.labels_
# 预测与簇的对比
fig, axes = plt.subplots(1, 2, figsize=(12,7))
axes[0].scatter(X[:, 0], X[:, 1], c=y, cmap='gist_rainbow', edgecolor='k', s=150)
axes[1].scatter(X[:, 0], X[:, 1], c=new_labels, cmap='jet', edgecolor='k', s=150)
axes[0].set_xlabel('Sepal length')
axes[0].set_ylabel('Sepal width')
axes[1].set_xlabel('Sepal length')
axes[1].set_ylabel('Sepal width')
axes[0].set_title('Original')
axes[1].set_title('Predicted')

plt.show()

Python Kmeans K均值分类_第1张图片

Python Kmeans K均值分类_第2张图片

4 总结

注意点:

    1 k均值聚类假设样本或者观测是凸集。

    2 所有特征都在统一的量纲上,即无量纲。

    3 样本或者观测的分布是大致相同的。

优点:

    1 比较容易、运行较快

    2 新样本拟合效果较好

    3 收敛有保证

    4 适应于大数据集的缩放

缺点:

   1 K值得确定较难,一般根据经验

   2 离群值较难解释

  3 对样本值得依赖性较强

  4 聚类复杂程度取决于样本的大小和密度

你可能感兴趣的:(机器学习,kmeans算法,K均值,机器学习)