真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

K-means算法怎么在Python中應(yīng)用

這篇文章將為大家詳細(xì)講解有關(guān)K-means算法怎么在Python中應(yīng)用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。

站在用戶的角度思考問題,與客戶深入溝通,找到靈川網(wǎng)站設(shè)計(jì)與靈川網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋靈川地區(qū)。

python是什么意思

Python是一種跨平臺(tái)的、具有解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語言,其最初的設(shè)計(jì)是用于編寫自動(dòng)化腳本,隨著版本的不斷更新和新功能的添加,常用于用于開發(fā)獨(dú)立的項(xiàng)目和大型項(xiàng)目。

1、調(diào)用以下庫

import numpy as np   #用于抽樣和生成隨機(jī)數(shù)
from sklearn.cluster import KMeans   #sklearn自帶的Kmeans算法, 用于嚴(yán)重本文算法結(jié)果是否正確
import matplotlib.pyplot as plt     #結(jié)果可視化
import sys   #需要用到sys.exit()函數(shù)

若不需要驗(yàn)證聚類結(jié)果是否可以不使用Sklearn庫。

2、生成用于訓(xùn)練的隨機(jī)數(shù)據(jù)

np.set_printoptions(suppress=True)    #令numpy的結(jié)果不以科學(xué)計(jì)數(shù)法的方式輸出
Data = np.array([[1.0, 2.0], [1.5, 1.8], [3, 4], [6, 8], [8, 8], [1, 0.6],
                 [9, 11], [7, 10]])  #你也可以通過抽樣的方式來更快的獲得測試數(shù)據(jù)

3、定義用于選擇隨機(jī)初始點(diǎn)和簇?cái)?shù)(k)的函數(shù)

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

在上面的代碼中,為了限定初始點(diǎn)(x,y)的位置不會(huì)超出樣本點(diǎn)的范圍,因此均勻抽樣的上下限是指訓(xùn)練數(shù)據(jù)(a,b)和(c,d)的最小橫距。

4、定義可視化函數(shù), 繪制測試數(shù)據(jù)散點(diǎn)圖

def vision(data, cell):
    plt.figure(figsize=(12,6))
    ax1 = plt.subplot(121)
    ax1.scatter(Data[:, 0], Data[:, 1])   #原始數(shù)據(jù)散點(diǎn)圖
    ax1.scatter(point[:, 0], point[:, 0])    #同時(shí)將隨機(jī)選取的初始點(diǎn)表示出來
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("scatter of " + "rural" + " data")
    ax2 = plt.subplot(122)
    ax2.scatter(Data[:, 0], Data[:, 1])    #原始數(shù)據(jù)散點(diǎn)圖
    ax2.scatter(data[:, 0], data[:, 1])     #經(jīng)過迭代后最終確定的聚類點(diǎn)
    plt.xlabel("x")
    plt.ylabel("y")
    plt.title("scatter of " + cell + " data")
    plt.show()

聚類結(jié)果的可視化對于判斷聚類結(jié)果的準(zhǔn)確性至關(guān)重要。

5、定義迭代過程, 通過不斷計(jì)算各個(gè)樣本對聚類點(diǎn)的歐式聚類, 來不斷更新聚類點(diǎn)

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("初始化錯(cuò)誤")
        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

注意, 上段代碼中加入了一個(gè)if語句

    if len(A) == len(Data) or len(B) == len(Data):
        print("初始化錯(cuò)誤")
        sys.exit(0)

關(guān)于K-means算法怎么在Python中應(yīng)用就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


文章題目:K-means算法怎么在Python中應(yīng)用
URL標(biāo)題:http://weahome.cn/article/ipogsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部