zoukankan      html  css  js  c++  java
  • 3.K均值算法

    4. 作业:

    1). 扑克牌手动演练k均值聚类过程:>30张牌,3类

    第一种划分:

     第二种划分:

    2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)

     代码如下:

    from sklearn.datasets import load_iris
    import numpy as np
    import random
    import matplotlib.pyplot as plt
    
    iris = load_iris()
    data = iris.data[:, 2]     # 样本的花瓣长度
    data.shape
    n = len(data)           # 样本个数
    k = 3           # 类中心的个数
    dist = np.zeros([n, k+1])       # 初始化距离矩阵,最后一列存放每一个样本的类别(归属的类)
    # 1、选中心
    center = random.sample(list(data), k)        # 初始化类中心,即选取前3个样本作为初始类中心
    centerNew = np.zeros(k)
    while True:
        for i in range(n):
            for j in range(k):
                dist[i, j] = np.sqrt((data[i] - center[j]) ** 2)    # 2、求距离
            dist[i, k] = np.argmin(dist[i, :k])             # 3、归类
    
        # 4、求新类中心
        for i in range(k):
            index = dist[:, k] == i         # 判断距离矩阵中最后一列归属为哪一类
            centerNew[i] = data[index].mean()
    
        # 5、判断结束
        if np.all((center == centerNew)):   # 判断新的类中心是否与上一轮的
            break
        else:
            center = centerNew
    print('150个样本的归类:', dist[:, k])
    plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
    plt.title('鸢尾花花瓣K-Means算法')
    plt.scatter(data, data, c=dist[:, k], cmap='rainbow')
    plt.show()

    运行效果图如下:

    3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.

    代码如下图:

     运行结果图:

    4). 鸢尾花完整数据做聚类并用散点图显示.

    代码如下图:( 需要引入的包见上一题 )

     运行结果图:

    5).想想k均值算法中以用来做什么?

    答:K均值算法能够把样本根据需要划分为具有不同特征的样本集,以这些样本集来训练出来的模型可以很好的起到预测的作用。例如:一堆有明确直径的球体,可以通过K均值算法很快的分出大、中、小球。

  • 相关阅读:
    JS和C#对Json的操作
    JS图形化插件利器组件系列 —— Gojs组件
    Android APK反编译 apktool使用教程
    UML系列图
    多线程学习 ---- 系列教程
    大型网站架构之系列
    经典算法题锦集
    基本算法系列15天速成
    居转户--相关信息
    使用C#创建Windows服务
  • 原文地址:https://www.cnblogs.com/chenhaowen-shuaishuaide/p/12712236.html
Copyright © 2011-2022 走看看