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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

K-means方法及其應用

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

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

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

?

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

?

2.K-means的應用

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

2.實驗目的:
  通過聚類,了解1999年各個省份的消費水平在國內的情況。
3.技術路線:sklearn.cluster.Kmeans

4.數據實例展示:
1999年全國31個省份城鎮居民家庭平均每人全年消費性支出數據,如下所示:

? ? ? ? ? ? ? ? ? ? ?

5.實驗過程:
  1.使用算法:K-means聚類算法
  2.實現過程:
    1.建立工程,導入sklearn相關包
      import numpy as np
      from sklearn.cluster import KMeans
    2.加載數據,創建K-means算法實例,并進行訓練,獲得標簽:

? ? ? ? ? ? ?? ? ? ?

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

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

def loadData(filePath):fr = open(filePath,'r+') #r+:讀寫方式打開一個文本文件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()函數中的readlines()方法一次性讀取整個文件,類似于.read()

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

? ? ? ?retData 用于存儲城市的各項消費信息

? ? ? ?返回值:返回城市名稱以及該城市的各項消費信息

?

  展示的時候:

      

  ?3.輸出標簽,查看結果? ? ? ? ??

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

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

? ? ? ? ?

?當n_clusters=3或者n_clusters=4的時候的聚類情況如下所示:

? ? ? ? ?

從這些結果中我們可以看出,消費水平相近的城市聚集在一個類中,而北京、上海、廣東很穩定的一直聚集在了同一個類中!

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

3.拓展 && 改進

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

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

?

?

? ? ??

?

轉載于:https://www.cnblogs.com/python-machine/p/6941371.html

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。