日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

4.无监督学习--K-means聚类

發(fā)布時(shí)間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4.无监督学习--K-means聚类 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

K-means方法及其應(yīng)用

1.K-means聚類算法簡介:

k-means算法以k為參數(shù),把n個(gè)對象分成k個(gè)簇,使簇內(nèi)具有較高的相似度,而簇間的相似度較低。主要處理過程包括:
1.隨機(jī)選擇k個(gè)點(diǎn)作為初始的聚類中心。
2.對于剩下的點(diǎn),根據(jù)其與聚類中心的距離,將其歸入最近的簇。
3.對每個(gè)簇,計(jì)算所有點(diǎn)的均值作為新的聚類中心。

4.重復(fù)2、3直到聚類中心不再發(fā)生改變。

?

舉例:對于A、B、C、D、E這5個(gè)點(diǎn),我們先隨機(jī)選擇兩個(gè)點(diǎn)作為簇中心點(diǎn),標(biāo)記為紅色和黃色,對于第一次聚類結(jié)果,我們分別計(jì)算所有的點(diǎn)到這兩個(gè)中心點(diǎn)之間的聚類,我們發(fā)現(xiàn)A、B亮點(diǎn)離紅色的點(diǎn)距離更近,、C、D、E三點(diǎn)離黃色的點(diǎn)距離更近,所以在第一次聚類過程中,這個(gè)簇被定義為:A、B為一個(gè)簇,C、D、E為一個(gè)簇,接下來,我們將A、B這個(gè)簇重新計(jì)算它的聚類中心,標(biāo)記為一個(gè)更深顏色的紅色的點(diǎn),C、D、E重新計(jì)算他們的簇中心,為一個(gè)更深顏色的黃色的點(diǎn),我們再重新計(jì)算這些所有點(diǎn)距離簇中心的距離,接下來我們可以發(fā)現(xiàn),A、B、C可以聚為一個(gè)簇,而D、E相對于黃色的簇中心距離更近,所以D、E為一個(gè)簇,因此我們再重新計(jì)算一下A、B、C這個(gè)簇的簇中心和D、E的簇中心,第5張圖我們就可以看到簇的組成已經(jīng)相對穩(wěn)定了,那么這5個(gè)點(diǎn)的聚類結(jié)果就是:A、B、C為一個(gè)簇,D、E為一個(gè)簇,紅色和黃色的點(diǎn)分別為這兩個(gè)簇的簇中心;演變過程如下:

?

2.K-means的應(yīng)用

1.數(shù)據(jù)介紹:
  現(xiàn)有1999年全國31個(gè)省份城鎮(zhèn)居民家庭平均每人全年消費(fèi)性支出的八個(gè)主要變量數(shù)據(jù),這8個(gè)變量分別是:食品、衣著、家庭設(shè)備用品及服務(wù)、醫(yī)療保健、交通和通訊、 ? ? ? ? ? ? ?娛樂教育文化服務(wù)、居住以及雜項(xiàng)商品和服務(wù)。利用已有數(shù)據(jù),對31個(gè)省份進(jìn)行聚類。

2.實(shí)驗(yàn)?zāi)康?#xff1a;
  通過聚類,了解1999年各個(gè)省份的消費(fèi)水平在國內(nèi)的情況。
3.技術(shù)路線:sklearn.cluster.Kmeans

4.數(shù)據(jù)實(shí)例展示:
1999年全國31個(gè)省份城鎮(zhèn)居民家庭平均每人全年消費(fèi)性支出數(shù)據(jù),如下所示:

? ? ? ? ? ? ? ? ? ? ?

5.實(shí)驗(yàn)過程:
  1.使用算法:K-means聚類算法
  2.實(shí)現(xiàn)過程:
    1.建立工程,導(dǎo)入sklearn相關(guān)包
      import numpy as np
      from sklearn.cluster import KMeans
    2.加載數(shù)據(jù),創(chuàng)建K-means算法實(shí)例,并進(jìn)行訓(xùn)練,獲得標(biāo)簽:

? ? ? ? ? ? ?? ? ? ?

  注意:調(diào)用K-Means方法所需參數(shù):
    1.n_clusters:用于指定聚類中心的個(gè)數(shù)
    2.init:初始聚類中心的初始化方法
    3.max_iter:最大的迭代次數(shù)
    4.一般調(diào)用時(shí)只用給出n_clusters即可,init默認(rèn)是k-means++,max_iter默認(rèn)是300。

  其它參數(shù):
    1.data:加載的數(shù)據(jù)
    2.label:聚類后各數(shù)據(jù)所屬的標(biāo)簽
    3.fit_predict():計(jì)算簇中心以及為簇分配序號
  重點(diǎn)方法解釋:
    data,cityName = loadData('city.txt') #loadData()函數(shù)是我們自己定義的,具體代碼為:

def loadData(filePath):fr = open(filePath,'r+') #r+:讀寫方式打開一個(gè)文本文件lines = fr.readlines()retData = []retCityName = []for line in lines:items = line.strip().split(",")retCityName.append(items[0])retData.append(float(items[1]))for i in range(1,len(items)):return retData,retCityName View Code

注意:loadData()函數(shù)中的readlines()方法一次性讀取整個(gè)文件,類似于.read()

? ? ? ?retCityName用于存儲城市名稱;

? ? ? ?retData 用于存儲城市的各項(xiàng)消費(fèi)信息

? ? ? ?返回值:返回城市名稱以及該城市的各項(xiàng)消費(fèi)信息

?

  展示的時(shí)候:

      

  ?3.輸出標(biāo)簽,查看結(jié)果? ? ? ? ??

    1.我們將城市按照消費(fèi)水平n_clusters分為幾個(gè)類,消費(fèi)水平相近的城市聚集在一類中。
    2.expenses:聚類中心店的數(shù)值加和,也就是平均消費(fèi)水平。

? ? ? ? ?如下展示了:當(dāng)n_clusters=2時(shí),消費(fèi)水平的聚類結(jié)果,聚成2類,我們可以看到其中一類是:北京、天津、上海、浙江、福建、廣東、重慶、西藏為一個(gè)消費(fèi)水平的;

? ? ? ? ?

?當(dāng)n_clusters=3或者n_clusters=4的時(shí)候的聚類情況如下所示:

? ? ? ? ?

從這些結(jié)果中我們可以看出,消費(fèi)水平相近的城市聚集在一個(gè)類中,而北京、上海、廣東很穩(wěn)定的一直聚集在了同一個(gè)類中!

?如下,我們簡單談一下sklearn庫中的k-means算法的拓展和改進(jìn);

3.拓展 && 改進(jìn)

計(jì)算兩條數(shù)據(jù)相似性時(shí),Sklearn的K-Means默認(rèn)用的是歐氏距離。雖然還有余弦相似度,馬氏距離等多種方法,但sklearn中的k-means算法沒有設(shè)定計(jì)算距離方法的參數(shù)。如果大家想要使用自定義計(jì)算距離的計(jì)算方法,那么我們可以更改k-means的源代碼,在這里我們建議使用scipy.spatial.distance.cdist方法。

當(dāng)設(shè)置metric="cosine"的時(shí)候,就相當(dāng)于我們要使用余弦距離了,使用形式:scipy.spatial.distance.cdist(A,B,metric="cosine")

?

?

? ? ??

?

轉(zhuǎn)載于:https://www.cnblogs.com/python-machine/p/6941371.html

總結(jié)

以上是生活随笔為你收集整理的4.无监督学习--K-means聚类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。