最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python機器學習之Kmeans基礎算法

 更新時間:2021年04月27日 08:27:55   作者:zjh6888  
這篇文章主要介紹了Python機器學習之Kmeans基礎算法,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有非常好的幫助,需要的朋友可以參考下

一、K-means基礎算法簡介

k-means算法是一種聚類算法,所謂聚類,即根據(jù)相似性原則,將具有較高相似度的數(shù)據(jù)對象劃分至同一類簇,將具有較高相異度的數(shù)據(jù)對象劃分至不同類簇。聚類與分類最大的區(qū)別在于,聚類過程為無監(jiān)督過程,即待處理數(shù)據(jù)對象沒有任何先驗知識,而分類過程為有監(jiān)督過程,即存在有先驗知識的訓練數(shù)據(jù)集。

二、算法過程

K-means中心思想:事先確定常數(shù)K,常數(shù)K意味著最終的聚類(或者叫簇)類別數(shù),首先隨機選定初始點為質心,并通過計算每一個樣本與質心之間的相似度(這里為歐式距離),將樣本點歸到最相似的類中,接著,重新計算每個類的質心(即為類中心),重復這樣的過程,直到質心不再改變,最終就確定了每個樣本所屬的類別以及每個類的質心。由于每次都要計算所有的樣本與每一個質心之間的相似度,故在大規(guī)模的數(shù)據(jù)集上,K-Means算法的收斂速度比較慢。

1.聚類算法

是一種典型的無監(jiān)督學習算法,主要用于將相似的樣本自動歸到一個類別中。
聚類算法與分類算法最大的區(qū)別是:聚類算法是無監(jiān)督的學習算法,而分類算法屬于監(jiān)督的學習
算法,分類是知道結果的。
在聚類算法中根據(jù)樣本之間的相似性,將樣本劃分到不同的類別中,對于不同的相似度計算方法,會得到不同的聚類結果,常用的相似度計算方法有歐式距離法。

2.聚類

物理或抽象對象的集合分成由類似的對象組成的多個類的過程被稱為聚類。由聚類所生成的簇是一組數(shù)據(jù)對象的集合,這些對象與同一個簇中的對象彼此相似,與其他簇中的對象相異。

3.簇

本算法中可以理解為,把數(shù)據(jù)集聚類成 k 類,即 k 個簇。

4.質心

指各個類別的中心位置,即簇中心。

5.距離公式

常用的有:歐幾里得距離(歐氏距離)、曼哈頓距離、閔可夫斯基距離等。

三、文字步驟

1.給定一個待處理的數(shù)據(jù)集

2.選擇簇的個數(shù)k(kmeans算法傳遞超參數(shù)的時候,只需設置最大的K值)

3.任意產(chǎn)生k個簇,生成K個簇的中心,記 K 個簇的中心分別為 c 1 , c 2 , . . . , c k c1,c2,...,ck c1,c2,...,ck;每個簇的樣本數(shù)量為 N 1 , N 2 , . . . , N 3 N1,N2,...,N3 N1,N2,...,N3。

4.通過歐幾里得距離公式計算各點到各質心的距離,把每個點劃分給與其距離最近的質心,從而初步把數(shù)據(jù)集分為了 K 類點。

5.更新質心:通過下面的公式來更新每個質心。就是,新的質心的值等于當前該質心所屬簇的所有點的平均值。 c j = 1 N j ∑ i = 1 N j x i , y i c_{j}=\frac{1}{N_{j}}\sum_{i=1}^{N{j}}x_{i},y_{i} cj​=Nj​1​i=1∑Nj​xi​,yi​

6.重復以上步驟直到滿足收斂要求。(通常就是確定的中心點不再改變。)

四、圖形展示

在這里插入圖片描述

按照上述步驟我們可以更好地理解分類過程;

五、代碼實現(xiàn)

x 軸數(shù)據(jù)],[存儲 y 軸數(shù)據(jù)]]
for i in range(m):
    if i < m/3: 
        data[0].append(uniform(1,5))#隨機設定
        data[1].append(uniform(1,5))
    elif i < 2*m/3:
        data[0].append(uniform(6,10))
        data[1].append(uniform(1,5))
    else:
        data[0].append(uniform(3,8))
        data[1].append(uniform(5,10))
#將創(chuàng)建的數(shù)據(jù)集畫成散點圖
plt.scatter(data[0],data[1])
plt.xlim(0,11)
plt.ylim(0,11)
plt.show()

#定義歐幾里得距離
def distEuclid(x1,y1,x2,y2):
    d = sqrt((x1-x2)**2+(y1-y2)**2)
    return d

cent0 = [uniform(2,9),uniform(2,9)] #定義 K=3 個質心,隨機賦值
cent1 = [uniform(2,9),uniform(2,9)] #[x,y]
cent2 = [uniform(2,9),uniform(2,9)]
mark = [] #標記列表
dist = [[],[],[]]#各質心到所有點的距離列表
#核心
for n in range(50):
    #計算各質心到所有點的距離
    for i in range(m):
        dist[0].append(distEuclid(cent0[0],cent0[1],data[0][i],data[1][i]))
        dist[1].append(distEuclid(cent1[0],cent1[1],data[0][i],data[1][i]))
        dist[2].append(distEuclid(cent2[0],cent2[1],data[0][i],data[1][i]))
    #對數(shù)據(jù)進行整理
    sum0_x = sum0_y = sum1_x = sum1_y = sum2_x = sum2_y = 0
    number0 = number1 = number2 = 0
    for i in range(m):
        if dist[0][i]<dist[1][i] and dist[0][i]<dist[2][i]:
            mark.append(0)
            sum0_x += data[0][i]
            sum0_y += data[1][i]
            number0 += 1
        elif dist[1][i]<dist[0][i] and dist[1][i]<dist[2][i]:
            mark.append(1)
            sum1_x += data[0][i]
            sum1_y += data[1][i]
            number1 += 1
        elif dist[2][i]<dist[0][i] and dist[2][i]<dist[1][i]:
            mark.append(2)
            sum2_x += data[0][i]
            sum2_y += data[1][i]
            number2 += 1    
    #更新質心
    cent0 = [sum0_x/number0,sum0_y/number0]
    cent1 = [sum1_x/number1,sum1_y/number1]
    cent2 = [sum2_x/number2,sum2_y/number2]

#畫圖
for i in range(m):
    if mark[i] == 0:
        plt.scatter(data[0][i],data[1][i],color='red')
    if mark[i] == 1:
        plt.scatter(data[0][i],data[1][i],color='blue')
    if mark[i] == 2:
        plt.scatter(data[0][i],data[1][i],color='green')     
plt.scatter(cent0[0],cent0[1],marker='*',color='red')
plt.scatter(cent1[0],cent1[1],marker='*',color='blue')
plt.scatter(cent2[0],cent2[1],marker='*',color='green')
plt.xlim(0,11)
plt.ylim(0,11)
plt.show()
在這里插入代碼片

上述代碼數(shù)據(jù)選擇是隨機生成的,每次運行結果是不同的,測試會發(fā)現(xiàn)出現(xiàn)分類不理想的效果。說明基礎算法存在很大的弊端,我們需要改進,本篇內容為基礎不做改進知識的說明。

  • 幾種較好的分類

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

  • 幾種較差的分類

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

六、小結

優(yōu)點

算法簡單易實現(xiàn);
聚類效果依賴K值選定,

缺點

需要用戶事先指定類簇個數(shù);
聚類結果對初始類簇中心的選取較為敏感;
容易陷入局部最優(yōu); 只能發(fā)現(xiàn)球形類簇;

到此這篇關于Python機器學習之Kmeans基礎算法的文章就介紹到這了,更多相關Python Kmeans基礎算法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python文件讀寫處理日常任務終極工具實例

    Python文件讀寫處理日常任務終極工具實例

    Python文件的讀寫操作時,有很多需要考慮的細節(jié),這包括文件打開方式、讀取和寫入數(shù)據(jù)的方法、異常處理等,在本文中,將深入探討Python中的文件操作,旨在提供全面的指南,幫你充分了解Python文件的讀寫
    2023-11-11
  • pip安裝tensorflow的坑的解決

    pip安裝tensorflow的坑的解決

    這篇文章主要介紹了pip安裝tensorflow的坑的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • python 利用Pyinstaller打包Web項目

    python 利用Pyinstaller打包Web項目

    這篇文章主要介紹了python 利用Pyinstaller打包Web項目,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • Python 多線程抓取圖片效率對比

    Python 多線程抓取圖片效率對比

    Python由于有全鎖局的存在,并不能利用多核優(yōu)勢。所以,如果你的多線程進程是CPU密集型的,那多線程并不能帶來效率上的提升,相反還可能會因為線程的頻繁切換,導致效率下降;如果是IO密集型,多線程進程可以利用IO阻塞等待時的空閑時間執(zhí)行其他線程,提升效率。
    2016-02-02
  • python中使用pymssql庫操作MSSQL數(shù)據(jù)庫

    python中使用pymssql庫操作MSSQL數(shù)據(jù)庫

    這篇文章主要給大家介紹了關于python中使用pymssql庫操作MSSQL數(shù)據(jù)庫的相關資料,最近在學習python,發(fā)現(xiàn)好像沒有對pymssql的詳細說明,于是乎把官方文檔學習一遍,重要部分做個歸檔,方便以后查閱,需要的朋友可以參考下
    2023-08-08
  • python實現(xiàn)郵箱發(fā)送信息

    python實現(xiàn)郵箱發(fā)送信息

    這篇文章主要為大家詳細介紹了python實現(xiàn)郵箱發(fā)送信息,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • python?中raise用法

    python?中raise用法

    這篇文章主要介紹了python?中raise用法,Python?允許我們在程序中手動設置異常,就是使用raise?語句來實現(xiàn),下面我們就來看看raise的具體用法,文章內容介紹詳細,具有一定的參考價值,需要的小伙伴可以參考一下
    2021-12-12
  • python super()函數(shù)的基本使用

    python super()函數(shù)的基本使用

    這篇文章主要介紹了python super()函數(shù)的基本使用,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python 實現(xiàn)加密過的PDF文件轉WORD格式

    Python 實現(xiàn)加密過的PDF文件轉WORD格式

    這篇文章主要介紹了Python 實現(xiàn)加密過的PDF文件轉WORD格式,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Python3.8安裝tensorflow的簡單方法步驟

    Python3.8安裝tensorflow的簡單方法步驟

    最近想要研究一下深度學習的應用,于是翻了翻了社區(qū)的tensorflow安裝教程,所以下面這篇文章主要給大家介紹了關于Python3.8安裝tensorflow的簡單方法步驟,需要的朋友可以參考下
    2022-06-06

最新評論

晋中市| 贵州省| 武功县| 延津县| 耿马| 漳州市| 库车县| 台山市| 通江县| 武穴市| 西华县| 鸡泽县| 神木县| 丹棱县| 海宁市| 马龙县| 中西区| 乾安县| 祁阳县| 玉树县| 锡林郭勒盟| 绵竹市| 岳普湖县| 巨野县| 册亨县| 城市| 慈利县| 宜章县| 南投县| 博乐市| 类乌齐县| 呼图壁县| 璧山县| 瓦房店市| 冷水江市| 东阿县| 珲春市| 德钦县| 临安市| 隆子县| 皮山县|