• 技术文章 >Python技术 >Python基础教程

    python聚类算法是什么

    小妮浅浅小妮浅浅2021-09-03 10:33:13原创4278

    说明

    1、聚类常用于数据探索或挖掘前期,在没有先验经验的背景下进行探索性分析。

    也适用于样本量大的数据预处理。

    2、常用的聚类算法分为基于划分、层次、密度、网格、统计、模型等类型的算法。典型算法包括K均值(经典聚类算法)、DBSCAN、两步聚类等。

    聚类分析可以解决的问题包括:数据集可以分为几类,每个类别有多少样本,不同类别中每个变量的强弱关系,不同类别的典型特征是什么。

    聚类算法之K均值实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    import numpy as np

    import matplotlib.pyplot as plt

      

    # 两点距离

    def distance(e1, e2):

        return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2)

      

    # 集合中心

    def means(arr):

        return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])

      

    # arr中距离a最远的元素,用于初始化聚类中心

    def farthest(k_arr, arr):

        f = [0, 0]

        max_d = 0

        for e in arr:

            d = 0

            for i in range(k_arr.__len__()):

                d = d + np.sqrt(distance(k_arr[i], e))

            if d > max_d:

                max_d = d

                f = e

        return f

      

    # arr中距离a最近的元素,用于聚类

    def closest(a, arr):

        c = arr[1]

        min_d = distance(a, arr[1])

        arr = arr[1:]

        for e in arr:

            d = distance(a, e)

            if d < min_d:

                min_d = d

                c = e

        return c

      

      

    if __name__=="__main__":

        ## 生成二维随机坐标,手上有数据集的朋友注意,理解arr改起来就很容易了

        ## arr是一个数组,每个元素都是一个二元组,代表着一个坐标

        ## arr形如:[ (x1, y1), (x2, y2), (x3, y3) ... ]

        arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :]

      

        ## 初始化聚类中心和聚类容器

        m = 5

        r = np.random.randint(arr.__len__() - 1)

        k_arr = np.array([arr[r]])

        cla_arr = [[]]

        for i in range(m-1):

            k = farthest(k_arr, arr)

            k_arr = np.concatenate([k_arr, np.array([k])])

            cla_arr.append([])

      

        ## 迭代聚类

        n = 20

        cla_temp = cla_arr

        for i in range(n):    # 迭代n次

            for e in arr:    # 把集合里每一个元素聚到最近的类

                ki = 0        # 假定距离第一个中心最近

                min_d = distance(e, k_arr[ki])

                for j in range(1, k_arr.__len__()):

                    if distance(e, k_arr[j]) < min_d:    # 找到更近的聚类中心

                        min_d = distance(e, k_arr[j])

                        ki = j

                cla_temp[ki].append(e)

            # 迭代更新聚类中心

            for k in range(k_arr.__len__()):

                if n - 1 == i:

                    break

                k_arr[k] = means(cla_temp[k])

                cla_temp[k] = []

      

        ## 可视化展示

        col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']

        for i in range(m):

            plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])

            plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])

        plt.show()

    以上就是python聚类算法的介绍,希望对大家有所帮助。更多Python学习指路:python基础教程

    本文教程操作环境:windows7系统、Python 3.9.1,DELL G3电脑。

    专题推荐:python聚类算法
    上一篇:python threading线程同步如何实现 下一篇:python聚类算法如何选择

    相关文章推荐

    • python中Sobel算子是什么• python中Sobel算子如何使用• python中Laplacian算子如何使用• python中Laplacian算子是什么• python输入函数input的使用• python控制语句的两大分类• python编写程序的常见错误• python用户如何自定义异常• python thread模块创建线程• python threading实现线程的过程• python threading线程同步如何实现

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网