亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 利用Python如何實現K-means聚類算法

利用Python如何實現K-means聚類算法

熱門標簽:ai電銷機器人源碼 西藏房產智能外呼系統要多少錢 湛江智能外呼系統廠家 宿遷星美防封電銷卡 長沙高頻外呼系統原理是什么 ai電話機器人哪里好 地圖標注審核表 百度地圖標注沒有了 外呼并發線路

前言

K-Means 是一種非常簡單的聚類算法(聚類算法都屬于無監督學習)。給定固定數量的聚類和輸入數據集,該算法試圖將數據劃分為聚類,使得聚類內部具有較高的相似性,聚類與聚類之間具有較低的相似性。

算法原理

1. 初始化聚類中心,或者在輸入數據范圍內隨機選擇,或者使用一些現有的訓練樣本(推薦)

2. 直到收斂

  • 將每個數據點分配到最近的聚類。點與聚類中心之間的距離是通過歐幾里德距離測量得到的。
  • 通過將聚類中心的當前估計值設置為屬于該聚類的所有實例的平均值,來更新它們的當前估計值。

目標函數

聚類算法的目標函數試圖找到聚類中心,以便數據將劃分到相應的聚類中,并使得數據與其最接近的聚類中心之間的距離盡可能小。

給定一組數據X1,...,Xn和一個正數k,找到k個聚類中心C1,...,Ck并最小化目標函數:

其中是質心,計算表達式為

上圖a表達了初始的數據集,假設k=2。在圖b中,我們隨機選擇了兩個k類所對應的類別質心,即圖中的紅色質心和藍色質心,然后分別求樣本中所有點到這兩個質心的距離,并標記每個樣本的類別為和該樣本距離最小的質心的類別,如圖c所示,經過計算樣本和紅色質心和藍色質心的距離,我們得到了所有樣本點的第一輪迭代后的類別。此時我們對我們當前標記為紅色和藍色的點分別求其新的質心,如圖4所示,新的紅色質心和藍色質心的位置已經發生了變動。圖e和圖f重復了我們在圖c和圖d的過程,即將所有點的類別標記為距離最近的質心的類別并求新的質心。最終我們得到的兩個類別如圖f。當然在實際K-Mean算法中,我們一般會多次運行圖c和圖d,才能達到最終的比較優的類別。

算法流程

注意點:

  1. 對于K-Means算法,首先要注意的是k值的選擇,一般來說,我們會根據對數據的先驗經驗選擇一個合適的k值,如果沒有什么先驗知識,則可以通過交叉驗證選擇一個合適的k值
  2. 在確定了k的個數后,我們需要選擇k個初始化的質心,就像上圖b中的隨機質心。由于我們是啟發式方法,k個初始化的質心的位置選擇對最后的聚類結果和運行時間都有很大的影響,因此需要選擇合適的k個質心,最好這些質心不能太近。

流程:

輸入是樣本集D={x1,x2,...xm},聚類的簇樹k,最大迭代次數N

輸出是簇劃分C={C1,C2,...Ck}

    1) 從數據集D中隨機選擇k個樣本作為初始的k個質心向量: {μ1,μ2,...,μk}

    2)對于n=1,2,...,N

      a) 將簇劃分C初始化為Ct=∅  t=1,2...k

      b) 對于i=1,2...m,計算樣本xi和各個質心向量μj(j=1,2,...k)的距離:,將xixi標記最小的為所對應的類別。此時更新

      c) 對于j=1,2,...,k,對Cj中所有的樣本點重新計算新的質心

      e) 如果所有的k個質心向量都沒有發生變化,則轉到步驟3)

    3) 輸出簇劃分C={C1,C2,...Ck}

 Python實現

import numpy as np
import matplotlib.pyplot as plt
import random
from sklearn.datasets import make_blobs
np.random.seed(123)
from sklearn.cluster import KMeans
class Kmeans:
    def __init__(self,data,k):
        self.data=data
        self.k = k
    def cluster_data_Bysklearn(self):
        kmeans_model = KMeans(self.k,random_state=1)
        labels = kmeans_model.fit(self.data).labels_
        print(labels)
        return labels
 
    def kmeans(self):
        # 獲取4個隨機數
        rarray = np.random.random(size=self.k)
        # 乘以數據集大小——>數據集中隨機的4個點
        rarray = np.floor(rarray * len(self.data))
        # 轉為int
        rarray = rarray.astype(int)
        print('數據集中隨機索引', rarray)
        # 隨機取數據集中的4個點作為初始中心點
        center = data[rarray]
        # 測試比較偏、比較集中的點,效果依然完美,測試需要刪除以上代碼
        # center = np.array([[4.6,-2.5],[4.4,-1.7],[4.3,-0.7],[4.8,-1.1]])
        # 1行80列的0數組,標記每個樣本所屬的類(k[i])
        cls = np.zeros([len(self.data)], np.int)
        print('初始center=\n', center)
        run = True
        time = 0
        n = len(self.data)
        while run:
            time = time + 1
            for i in range(n):
                # 求差
                tmp = data[i] - center
                # 求平方
                tmp = np.square(tmp)
                # axis=1表示按行求和
                tmp = np.sum(tmp, axis=1)
                # 取最?。ㄗ罱┑慕o該點“染色”(標記每個樣本所屬的類(k[i]))
                cls[i] = np.argmin(tmp)
            # 如果沒有修改各分類中心點,就結束循環
            run = False
            # 計算更新每個類的中心點
            for i in range(self.k):
                # 找到屬于該類的所有樣本
                club = data[cls == i]
                # axis=0表示按列求平均值,計算出新的中心點
                newcenter = np.mean(club, axis=0)
                # 如果新舊center的差距很小,看做他們相等,否則更新之。run置true,再來一次循環
                ss = np.abs(center[i] - newcenter)
                if np.sum(ss, axis=0) > 1e-4:
                    center[i] = newcenter
                    run = True
            print('new center=\n', center)
        print('程序結束,迭代次數:', time)
        # 按類打印圖表,因為每打印一次,顏色都不一樣,所以可區分出來
        # for i in range(self.k):
        #     club = data[cls == i]
        #     self.showtable(club)
        # 打印最后的中心點
        self.showtable(center)
        #打印聚類標簽
        print(cls)
 
    def showtable(self,data):
        x = data.T[0]
        y = data.T[1]
        plt.scatter(x, y)
        plt.show()
 
if __name__ == '__main__':
    data = np.random.rand(10,2)
    K = 4
    model = Kmeans(data,K)
 
    model.kmeans()
    model.cluster_data_Bysklearn()

結果:

自寫得出的    [0 2 0 0 0 2 3 2 1 2]
調用模型的出的[0 2 0 1 0 2 3 2 3 0]

jupyter notebook實現

import numpy as np
import matplotlib.pyplot as plt
import random
from sklearn.datasets import make_blobs
 
 
%matplotlib inline
X, y = make_blobs(centers=6, n_samples=1000)
print(f'Shape of dataset: {X.shape}')
 
fig = plt.figure(figsize=(8,6))
plt.scatter(X[:,0], X[:,1], c=y)
plt.title("Dataset with 6 clusters")
plt.xlabel("First feature")
plt.ylabel("Second feature")
plt.show()

 

class KMeans():
    def __init__(self, n_clusters=6):
        self.k = n_clusters
 
    def fit(self, data):
        """
        Fits the k-means model to the given dataset
        """
        n_samples, _ = data.shape
        # initialize cluster centers
        self.centers = np.array(random.sample(list(data), self.k))
        self.initial_centers = np.copy(self.centers)
 
        # We will keep track of whether the assignment of data points
        # to the clusters has changed. If it stops changing, we are 
        # done fitting the model
        old_assigns = None
        n_iters = 0
 
        while True:
            new_assigns = [self.classify(datapoint) for datapoint in data]
 
            if new_assigns == old_assigns:
                print(f"Training finished after {n_iters} iterations!")
                return
 
            old_assigns = new_assigns
            n_iters += 1
 
            # recalculate centers
            for id_ in range(self.k):
                points_idx = np.where(np.array(new_assigns) == id_)
                datapoints = data[points_idx]
                self.centers[id_] = datapoints.mean(axis=0)
 
    def l2_distance(self, datapoint):
        dists = np.sqrt(np.sum((self.centers - datapoint)**2, axis=1))
        return dists
 
    def classify(self, datapoint):
        """
        Given a datapoint, compute the cluster closest to the
        datapoint. Return the cluster ID of that cluster.
        """
        dists = self.l2_distance(datapoint)
        return np.argmin(dists)
 
    def plot_clusters(self, data):
        plt.figure(figsize=(12,10))
        plt.title("Initial centers in black, final centers in red")
        plt.scatter(data[:, 0], data[:, 1], marker='.', c='y')
        plt.scatter(self.centers[:, 0], self.centers[:,1], c='r')
        plt.scatter(self.initial_centers[:, 0], self.initial_centers[:,1], c='k')
        plt.show()
X = np.random.randn(10,100)
kmeans = KMeans(n_clusters=6)
kmeans.fit(X)
for data in X:
    print(kmeans.classify(data))

總結

K-Means的主要優點:

1)原理簡單,容易實現

2)可解釋度較強

K-Means的主要缺點:

1)K值很難確定

2)局部最優

3)對噪音和異常點敏感

4)需樣本存在均值(限定數據種類)

5)聚類效果依賴于聚類中心的初始化

6)對于非凸數據集或類別規模差異太大的數據效果不好

到此這篇關于利用Python如何實現K-means聚類算法的文章就介紹到這了,更多相關Python實現K-means聚類算法內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python中實現k-means聚類算法詳解
  • python實現鳶尾花三種聚類算法(K-means,AGNES,DBScan)
  • python基于K-means聚類算法的圖像分割
  • K-means聚類算法介紹與利用python實現的代碼示例
  • Python機器學習之K-Means聚類實現詳解
  • 在Python中使用K-Means聚類和PCA主成分分析進行圖像壓縮
  • Python機器學習算法之k均值聚類(k-means)
  • python實現k-means聚類算法
  • Python用K-means聚類算法進行客戶分群的實現
  • k-means 聚類算法與Python實現代碼

標簽:普洱 大同 南平 林芝 寧夏 海南 漯河 盤錦

巨人網絡通訊聲明:本文標題《利用Python如何實現K-means聚類算法》,本文關鍵詞  利用,Python,如何,實現,K-means,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《利用Python如何實現K-means聚類算法》相關的同類信息!
  • 本頁收集關于利用Python如何實現K-means聚類算法的相關信息資訊供網民參考!
  • 推薦文章
    国产成a人片在线观看视频| 91麻豆高清国产在线播放| 成人a大片高清在线观看| a级毛片免费观看网站| 青青久久精品| 精品国产一区二区三区免费 | 亚洲第一色在线| 日韩av成人| 亚洲 欧美 91| 欧美1卡一卡二卡三新区| 四虎影视久久| 午夜在线亚洲| 国产福利免费观看| 91麻豆国产级在线| 国产伦理精品| 精品视频在线观看一区二区三区| 精品视频在线看| 欧美激情一区二区三区中文字幕| 欧美日本免费| 国产美女在线观看| 欧美日本二区| 欧美激情一区二区三区在线播放 | 黄视频网站在线观看| 香蕉视频一级| 91麻豆精品国产综合久久久| 日韩专区一区| a级黄色毛片免费播放视频| 高清一级做a爱过程不卡视频| 可以免费看污视频的网站| 国产成人精品综合久久久| 麻豆系列 在线视频| 色综合久久手机在线| 免费的黄视频| 91麻豆精品国产片在线观看| 欧美激情在线精品video| 国产欧美精品午夜在线播放| 日韩一级黄色大片| 欧美1区| 国产精品自拍亚洲| 精品视频在线观看一区二区| 成人高清视频在线观看| 欧美激情伊人| 成人免费福利片在线观看| 美女免费精品高清毛片在线视 | 国产91精品一区| 美国一区二区三区| 欧美a级片免费看| 国产麻豆精品免费密入口| 国产一区二区精品| 四虎影视精品永久免费网站 | 精品国产一级毛片| 精品视频在线看| 成人免费一级纶理片| 日韩av成人| 韩国妈妈的朋友在线播放| 国产激情一区二区三区| 国产不卡高清在线观看视频| 高清一级片| 青青久久网| 日本免费看视频| 成人免费福利片在线观看| 久久国产一区二区| 韩国三级视频网站| 欧美日本免费| 久久国产精品永久免费网站| 久久精品大片| 久久精品欧美一区二区| 麻豆网站在线看| 麻豆网站在线看| 国产伦精品一区二区三区无广告 | 午夜在线影院| 成人免费高清视频| 日韩中文字幕一区| 日韩在线观看视频免费| 亚欧成人毛片一区二区三区四区 | 日韩欧美一及在线播放| 久久精品欧美一区二区| 国产精品自拍一区| 久久精品免视看国产成人2021| 麻豆网站在线看| 亚欧成人毛片一区二区三区四区 | 国产视频一区二区三区四区 | 青青久久精品| 99久久精品费精品国产一区二区| 欧美一级视频免费| 中文字幕Aⅴ资源网| 久久精品人人做人人爽97| 成人影视在线观看| 精品视频免费在线| 国产不卡在线播放| 日韩中文字幕在线播放| 国产极品白嫩美女在线观看看| 成人在免费观看视频国产| 欧美电影免费| 亚久久伊人精品青青草原2020| 韩国毛片| 久久久久久久久综合影视网| 亚洲精品影院| 国产亚洲精品成人a在线| 精品视频在线观看一区二区| 日韩在线观看视频免费| 99久久网站| 中文字幕一区二区三区 精品 | 国产91素人搭讪系列天堂| 国产不卡在线播放| 香蕉视频一级| 欧美电影免费看大全| 99热精品在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 欧美大片毛片aaa免费看| 久久国产精品永久免费网站| 日本免费看视频| 亚洲精品影院| 欧美a级片免费看| 一级片片| 日韩一级精品视频在线观看| 青青久久国产成人免费网站| 国产精品免费久久| 久久国产精品永久免费网站| 国产美女在线观看| 久久国产精品自由自在| 精品国产一区二区三区久久久狼| 免费一级片在线观看| 九九免费精品视频| 亚洲精品久久久中文字| 亚欧成人毛片一区二区三区四区 | 国产精品1024永久免费视频| 欧美α片无限看在线观看免费| 麻豆系列 在线视频| 999久久66久6只有精品| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩中文字幕在线亚洲一区 | 欧美国产日韩久久久| 深夜做爰性大片中文| 亚欧视频在线| 日本免费看视频| 欧美另类videosbestsex视频| 亚洲天堂在线播放| 香蕉视频一级| 精品久久久久久中文| 四虎影视库国产精品一区| 国产伦久视频免费观看视频| 成人高清护士在线播放| 亚洲精品久久玖玖玖玖| 日日夜夜婷婷| 欧美一级视频免费观看| 亚洲天堂在线播放| 色综合久久手机在线| 国产a视频| 久久99欧美| 日韩专区亚洲综合久久| 久久久久久久免费视频| 亚洲第一色在线| 国产亚洲男人的天堂在线观看| 精品视频在线观看一区二区| 国产国语对白一级毛片| 999久久久免费精品国产牛牛| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 精品视频在线看| 午夜激情视频在线观看 | 欧美激情一区二区三区视频 | 亚洲精品久久久中文字| 毛片高清| 美女被草网站| 成人影院久久久久久影院| 亚洲第一色在线| 欧美日本二区| 欧美一级视频免费| 欧美激情一区二区三区中文字幕| 91麻豆国产级在线| 中文字幕97| 九九精品影院| 超级乱淫伦动漫| 精品国产一区二区三区免费 | 91麻豆精品国产自产在线观看一区| 久久久成人网| 你懂的日韩| 九九久久99综合一区二区| 欧美激情一区二区三区视频 | 国产成人精品综合在线| 欧美α片无限看在线观看免费| 九九精品影院| 国产福利免费观看| 成人av在线播放| 国产视频一区二区在线播放| 你懂的日韩| 毛片电影网| 九九免费精品视频| 亚洲精品中文一区不卡| 国产成人啪精品| 韩国三级视频在线观看| 日韩中文字幕一区二区不卡| 久久成人亚洲| 欧美国产日韩在线| 青青青草影院 | 日日夜人人澡人人澡人人看免| 国产一区二区精品在线观看| 亚洲天堂免费| 日韩在线观看视频网站| 国产伦理精品|