国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > Python基础教程 > Python中使用K-means算法

Python中使用K-means算法

头像

小妮浅浅

2021-02-21 16:16:054056浏览 · 0收藏 · 0评论

k-means是机器学习中最常用的聚类算法,关于k-means算法的数学原理、算法、伪码等已有相当丰富的文献,在此不再赘述。

1、调用以下库

import numpy as np   #用于抽样和生成随机数
from sklearn.cluster import KMeans   #sklearn自带的Kmeans算法, 用于严重本文算法结果是否正确
import matplotlib.pyplot as plt     #结果可视化
import sys   #需要用到sys.exit()函数

若不需要验证聚类结果是否可以不使用Sklearn库。

2、生成用于训练的随机数据

np.set_printoptions(suppress=True)    #令numpy的结果不以科学计数法的方式输出
Data = np.array([[1.0, 2.0], [1.5, 1.8], [3, 4], [6, 8], [8, 8], [1, 0.6],
                 [9, 11], [7, 10]])  #你也可以通过抽样的方式来更快的获得测试数据

3、定义用于选择随机初始点和簇数(k)的函数

def K_means(data, k):
    global Mean
    mean = []
    a = np.max(data[:, 0])
    b = np.min(data[:, 0])
    c = np.max(data[:, 1])
    d = np.min(data[:, 1])
    for i in range(k):
        x = np.random.uniform(a, b, 1)  
        #此处返回array
        y = np.random.uniform(c, d, 1)  #此处返回array
        mean.append([float(x), float(y)])
    Mean = np.array(mean)
    return Mean

在上面的代码中,为了限定初始点(x,y)的位置不会超出样本点的范围,因此均匀抽样的上下限是指训练数据(a,b)和(c,d)的最小横距。

4、定义可视化函数, 绘制测试数据散点图

def vision(data, cell):
    plt.figure(figsize=(12,6))
    ax1 = plt.subplot(121)
    ax1.scatter(Data[:, 0], Data[:, 1])   #原始数据散点图
    ax1.scatter(point[:, 0], point[:, 0])    #同时将随机选取的初始点表示出来
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("scatter of " + "rural" + " data")
    ax2 = plt.subplot(122)
    ax2.scatter(Data[:, 0], Data[:, 1])    #原始数据散点图
    ax2.scatter(data[:, 0], data[:, 1])     #经过迭代后最终确定的聚类点
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("scatter of " + cell + " data")
    plt.show()

聚类结果的可视化对于判断聚类结果的准确性至关重要。

5、定义迭代过程, 通过不断计算各个样本对聚类点的欧式聚类, 来不断更新聚类点

def iteration(Data, point):
    A = []
    B = []
    for i in range(len(Data)):
        d1 = np.sqrt(sum(pow(Data[i] - point[0], 2)))
        d2 = np.sqrt(sum(pow(Data[i] - point[1], 2)))
        if d1 > d2:
            A.append(list(Data[i]))
        else:
            B.append(list(Data[i]))
    if len(A) == len(Data) or len(B) == len(Data):
        print("初始化错误")
        sys.exit(0)
    new_x1 = np.mean(np.array(A)[:, 0])
    new_y1 = np.mean(np.array(A)[:, 1])
 
    new_x2 = np.mean(np.array(B)[:, 0])
    new_y2 = np.mean(np.array(B)[:, 1])
    new_point = np.array([[new_x1, new_y1], [new_x2, new_y2]])
    return new_point

注意, 上段代码中加入了一个if语句

    if len(A) == len(Data) or len(B) == len(Data):
        print("初始化错误")
        sys.exit(0)

由于初始点是随机产生的,所以这个条件语句是非常必要的,因此有可能所有的样本点都只接近一个聚类中心而远离另一个聚类中心,这样就不能形成两个聚类中心,程序将会报错,因此我们需要排除出现这种情况的可能性。一旦所有样本点都接近一个聚类中心时令程序停止。

以上就是Python中使用K-means算法,希望能对大家有所帮助!

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

人犬兽人在线观看免费完整| 国产真实乱人偷精品视频免费 | 啵啵| 法国急救宝贝2| 《法国空乘4》在线观看| 学生妹高清版免费观看电视剧 | 姐姐片多多免费高清电视剧| 少女たちよ观看免费高清电视剧 | 国产日产亚洲系列最新版本的特点 | 欧美大片免费PPT| 《厨房激战5》完整版在线观看| 黑料门-今日黑料-最新反差免费 | 《家访的老师》动漫在线观看| 《台球室的特殊待遇》| 啊灬啊灬啊灬快…深的含义 | 老公拿狗给我配| 女友躲雨被老头玩弄| 含紧一点H.边做边走| 亚洲乱熟女-区二区三区山口珠理| 宝宝水帘洞都拉丝了怎么办| 双男主MV大片| 丁香五月色情久久久久| 中字《喝醉的丈夫被结城送回家》 | 《互换人妻HD中字》| 《熟妇的荡欲》免费看| 妈妈你真棒里面的插曲叫什么| 十九岁暴躁少女CSGO免费观看| 100%透光裸妆| 欧美精品99久久久啪啪| 97在线观看免费高清电视剧大全.| 姜维| 儿子耕种母亲的田地的收获| 苍老师巅峰之作第37集| 色翁荡熄1-13老卫淑芬视频| 榜上佳婿电视剧全集免费观看高清| 老头下边又粗又大又硬| 白色变态蕾丝超薄开档连身袜| 《我的漂亮老师2》HD| 《冲动的惩罚》免费全集| 《为子献身》高清完整版在线观看| 小叔子从后面抱住我的电视剧