国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

K-Means(K-均值)聚類算法理論和實戰(zhàn)

這篇具有很好參考價值的文章主要介紹了K-Means(K-均值)聚類算法理論和實戰(zhàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

K-Means 算法

K-Means 術語

K 值如何確定

K-Means 場景

美國總統(tǒng)大選搖爭取擺選民

電商平臺用戶分層

給亞洲球隊做聚類

?編輯

其他場景

K-Means 工作流程

K-Means 開發(fā)流程

K-Means的底層代碼實現

K-Means 的評價標準


K-Means 算法

對于 n 個樣本點來說,根據距離公式(如歐式距離)去計?算它們的遠近,距離越近越相似。按照這樣的規(guī)則,我們把它們劃分到 K 個類別中,讓每個類別中的樣本點都是最相似的。

K-Means 是一種聚類算法,它屬于無監(jiān)督學習的范疇。與分類不同,聚類不依賴于預先標注的標簽,而是嘗試將數據集分成由相似對象組成的多個組或“簇”

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

優(yōu)點:

屬于無監(jiān)督學習,無須準備訓練集
原理簡單,實現起來較為容易
結果可解釋性較好

缺點:

需手動設置k值。 在算法開始預測之前,我們需要手動設置k值,即估計數據大概的類別個數,不合理的k值會使結果缺乏解釋性
可能收斂到局部最小值, 在大規(guī)模數據集上收斂較慢
對于異常點、離群點敏感
使用數據類型 : 數值型數據

K-Means 術語

: 所有數據的點集合,簇中的對象是相似的。

質心: 簇中所有點的中心(計算所有點的均值而來).

SSE: Sum of Sqared Error(誤差平方和), 它被用來評估模型的好壞,SSE 值越小,表示越接近它們的質心. 聚類效果越好。由于對誤差取了平方,因此更加注重那些遠離中心的點(一般為邊界點或離群點)。

K 值如何確定

K-means 的算法原理我們就解釋完了,但還有一個問題沒有解決,那就是我們怎么知道數據?
需要分成幾個類別,也就是怎么確定 K 值呢?K 值的確定,一般來說要取決于個人的經驗和感覺,沒有一個統(tǒng)一的標準。所以,要確定 K 值?是一項比較費時費力的事情,最差的辦法是去循環(huán)嘗試每一個 K 值。然后,在不同的 K 值情?況下,通過每一個待測樣本點到質心的距離之和,來計算平均距離。

K-Means 場景

美國總統(tǒng)大選搖爭取擺選民

kmeans,如前所述,用于數據集內種類屬性不明晰,希望能夠通過數據挖掘出或自動歸類出有相似特點的對象的場景。其商業(yè)界的應用場景一般為挖掘出具有相似特點的潛在客戶群體以便公司能夠重點研究、對癥下藥。

例如,在2000年和2004年的美國總統(tǒng)大選中,候選人的得票數比較接近或者說非常接近。任一候選人得到的普選票數的最大百分比為50.7%而最小百分比為47.9% 如果1%的選民將手中的選票投向另外的候選人,那么選舉結果就會截然不同。 實際上,如果妥善加以引導與吸引,少部分選民就會轉換立場。盡管這類選舉者占的比例較低,但當候選人的選票接近時,這些人的立場無疑會對選舉結果產生非常大的影響。如何找出這類選民,以及如何在有限的預算下采取措施來吸引他們? 答案就是聚類(Clustering)。

那么,具體如何實施呢?首先,收集用戶的信息,可以同時收集用戶滿意或不滿意的信息,這是因為任何對用戶重要的內容都可能影響用戶的投票結果。然后,將這些信息輸入到某個聚類算法中。接著,對聚類結果中的每一個簇(最好選擇最大簇 ), 精心構造能夠吸引該簇選民的消息。最后, 開展競選活動并觀察上述做法是否有效。

另一個例子就是產品部門的市場調研了。為了更好的了解自己的用戶,產品部門可以采用聚類的方法得到不同特征的用戶群體,然后針對不同的用戶群體可以對癥下藥,為他們提供更加精準有效的服務。

電商平臺用戶分層

電商平臺的運營工作經常需要對用戶進行分層,針對不同層次的用戶采取不同的運營策略,這個過程也叫做精細化運營。

就我知道的情況來說,運營同學經常會按照自己的經驗,比如按照用戶的下單次數,或者按照?
用戶的消費金額,通過制定的一些分類規(guī)則給用戶進行分層,如下表格,我們就可以得到三種?
不同價值的用戶。

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

這種劃分的方法簡單來看是沒有大問題的,但是并不科學。為什么這么說呢?這主要有兩方面原因。

一方面,只用單一的“下單次數”來衡量用戶的價值度并不合理,因為用戶下單的品類價格不同,很可能會出現的情況是,用戶 A 多次下單的金額給平臺帶來的累計 GMV(網站的成交金額) ,還不如用戶 B 的一次下單帶來的多。因此,只通過“下單次數”來衡量用戶價值就不合理。因為一般來說,我們會結合下單次數、消費金額、活躍程度等等很多的指標進行綜合分析。

另一方面,就算我們可以用單一的“下單次數”進行劃分用戶,但是不同人劃分的標準不一樣,“下單次數”的閾值需要根據數據分析求出來,直接用 10 和 50 就不合理。這兩方面原因,就會導致我們分析出來的用戶對平臺的貢獻度差別特別大。因此,我們需要用一種科學的、通用的劃分方法去做用戶分群

RFM 作為用戶價值劃分的經典模型,就可以解決這種分群的問題,RFM 是客戶分析及衡量客戶價值的重要模型之一。其中 ,R 表示最近一次消費(Recency),F 表示消費頻率?(Frequency),M 表示消費金額(Monetary)。

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

我們可以將每個維度分為高低兩種情況,如 R 的高低、F 的高低,以及 M 的高低,構建出一?個三維的坐標系。

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

然后,我們通過用戶歷史數據(如訂單數據、瀏覽日志),統(tǒng)計出每個用戶的 RFM 數據USERPIN:用戶唯一 ID;?

R:最后一次消費日期距現在的時間,例如最后消費時間到現在距離 5 天,則 R 就是 5;?
F:消費頻率,例如待統(tǒng)計的一段時間內用戶消費了 20 次,則 F 就是 20;
M:消費金額,例如待統(tǒng)計的一段時間內用戶累計消費了 1000 元錢,則 M 就是 1000?

這樣,我們就有了 8000 個樣本數據,每個樣本數據包含三個特征,分別為 R、F,M,然后根據前面 RFM 分為 8 個用戶群體,則意味著 K 值為 8。

最后,我們將數據代入到 K-means 算法,K-means 將按照本節(jié)課講解的計算邏輯進行計算,最終將 8000 個樣本數據聚類成 8 個用戶群體。這個時候,運營同學就可以根據新生成的RFM 用戶分群進行針對性的營銷策略了。

給亞洲球隊做聚類

其中 2019 年國際足聯(lián)的世界排名,2015 年亞洲杯排名均為實際排名。2018 年世界杯中,?很多球隊沒有進入到決賽圈,所以只有進入到決賽圈的球隊才有實際的排名。如果是亞洲區(qū)預?選賽 12 強的球隊,排名會設置為 40。如果沒有進入亞洲區(qū)預選賽 12 強,球隊排名會設置為50。

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

針對上面的排名,我們首先需要做的是數據規(guī)范化。你可以把這些值劃分到[0,1]或者按照均值為 0,方差為 1 的正態(tài)分布進行規(guī)范化。具體數據規(guī)范化的步驟可以看下 13 篇,也就是數據變換那一篇。我先把數值都規(guī)范化到[0,1]的空間中,得到了以下的數值表:

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

計算每個隊伍分別到中國、日本、韓國的歐氏距離,然后根據距離遠近來劃分。我們看到大部分的隊,會和中國隊聚?類到一起。這里我整理了距離的計算過程,比如中國和中國的歐氏距離為 0,中國和日本的歐氏距離為 0.732003。如果按照中國、日本、韓國為 3 個分類的中心點,歐氏距離的計算結果如下表所示:?

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

然后我們再重新計算這三個類的中心點,如何計算呢?最簡單的方式就是取平均值,然后根據新的中心點按照距離遠近重新分配球隊的分類,再根據球隊的分類更新中心點的位置。計算過程這里不展開,最后一直迭代(重復上述的計算過程:計算中心點和劃分分類)到分類不再發(fā)生變化,可以得到以下的分類結果:

K-Means(K-均值)聚類算法理論和實戰(zhàn),機器學習,聚類,算法,kmeans

所以我們能看出來第一梯隊有日本、韓國、伊朗、沙特、澳洲;第二梯隊有中國、伊拉克、阿聯(lián)酋、烏茲別克斯坦;第三梯隊有卡塔爾、泰國、越南、阿曼、巴林、朝鮮、印尼、敘利亞、約旦、科威特和巴勒斯坦。

# coding: utf-8
from sklearn.cluster import KMeans
from sklearn import preprocessing
import pandas as pd
# 輸入數據
data = pd.read_csv('data.csv', encoding='gbk')
train_x = data[["2019年國際排名","2018世界杯","2015亞洲杯"]]
df = pd.DataFrame(train_x)


# 我們能看到在 K-Means 類創(chuàng)建的過程中,有一些主要的參數:
# n_clusters: 即 K 值,一般需要多試一些 K 值來保證更好的聚類效果。你可以隨機設置一些
# K 值,然后選擇聚類效果最好的作為最終的 K 值;

# max_iter: 最大迭代次數,如果聚類很難收斂的話,設置最大迭代次數可以讓我們及時得
# 到反饋結果,否則程序運行時間會非常長;

# n_init:初始化中心點的運算次數,默認是 10。程序是否能快速收斂和中心點的選擇關系
# 非常大,所以在中心點選擇上多花一些時間,來爭取整體時間上的快速收斂還是非常值得
# 的。由于每一次中心點都是隨機生成的,這樣得到的結果就有好有壞,非常不確定,所以要
# 運行 n_init 次, 取其中最好的作為初始的中心點。如果 K 值比較大的時候,你可以適當增大 n_init 這個值;


# init: 即初始值選擇的方式,默認是采用優(yōu)化過的 k-means++ 方式,你也可以自己指定
# 中心點,或者采用 random 完全隨機的方式。自己設置中心點一般是對于個性化的數據進 
# 行設置,很少采用。random 的方式則是完全隨機的方式,一般推薦采用優(yōu)化過的 k- means++ 方式;

# algorithm:k-means 的實現算法,有“auto” “full”“elkan”三種。一般來說建議直 
# 接用默認的"auto"。簡單說下這三個取值的區(qū)別,如果你選擇"full"采用的是傳統(tǒng)的 K- 
# Means 算法,“auto”會根據數據的特點自動選擇是選擇“full”還是“elkan”。我們一 
# 般選擇默認的取值,即“auto” 。

kmeans = KMeans(n_clusters=3)
# 規(guī)范化到[0,1]空間
min_max_scaler=preprocessing.MinMaxScaler()
train_x=min_max_scaler.fit_transform(train_x)
# kmeans算法
kmeans.fit(train_x)
predict_y = kmeans.predict(train_x)
# 合并聚類結果,插入到原數據中
result = pd.concat((data,pd.DataFrame(predict_y)),axis=1)
result.rename({0:u'聚類'},axis=1,inplace=True)
print(result)

其他場景

K-means 算?法可以應用場景還有很多,常見的有文本聚類、售前輔助、風險監(jiān)測等等。下面,我們一一來說。

文本聚類:根據文檔內容或主題對文檔進行聚類。有些 APP 或小程序做的事兒,就是從網絡中爬取文章,然后通過 K-means 算法對文本進行聚類,結構化后最終展示給自己的用戶。

售前輔助:根據用戶的通話、短信和在線留言等信息,結合用戶個人資料,幫助公司在售前對客戶做更多的預測。

風險監(jiān)測:在金融風控場景中,在沒有先驗知識的情況下,通過無監(jiān)督方法對用戶行為做異常檢測。


?

K-Means 工作流程

第一步,隨機選取任意 K 個數據點作為初始質心;
第二步,分別計算數據集中每一個數據點與每一個質心的距離,數據點距離哪個質心最近,就屬于哪個聚類;
第三步,在每一個聚類內,分別計算每個數據點到質心的距離,取均值作為下一輪迭代的質心;
第四步,如果新質心和老質心之間的距離不再變化或小于某一個閾值,計算結束。

K-Means 開發(fā)流程

收集數據: 使用任意方法
準備數據: 需要數值型數據類計算距離, 也可以將標稱型數據映射為二值型數據再用于距離計算
分析數據: 使用任意方法
訓練算法: 不適用于無監(jiān)督學習,即無監(jiān)督學習不需要訓練步驟
測試算法: 應用聚類算法、觀察結果.可以使用量化的誤差指標如誤差平方和(后面會介紹)來評價算法的結果.
使用算法: 可以用于所希望的任何應用.通常情況下, 簇質心可以代表整個簇的數據來做出決策.

K-Means的底層代碼實現

# 計算兩個向量的歐氏距離?
def distEclud(vecA,vecB):
  return sqrt(sum(power(vecA-vecB,2))


# 傳入的數據時numpy的矩陣格式 
def randCent(dataMat, k):
  n = shape(dataMat)[1] 
  centroids = mat(zeros((k,n))) 
  for j in range(n):
    minJ = min(dataMat[:,j]) # 找出矩陣dataMat第j列最小值
    rangeJ = float(max(dataMat[:,j]) - minJ) #計算第j列最大值和最小值的差 
    #賦予一個隨機質心,它的值在整個數據集的邊界之內
    centroids[:,j] = minJ + rangeJ * random.rand(k,1) 
    return centroids #返回一個隨機的質心矩陣


#k-均值算法
def kMeans(dataMat,k,distE = distEclud , createCent=randCent): 
    m = shape(dataMat)[0]    # 獲得行數m
    clusterAssment = mat(zeros((m,2))) # 初試化一個矩陣,用來記錄簇索引和存儲誤差 
    centroids = createCent(dataMat,k) # 隨機的得到一個質心矩陣蔟
    clusterChanged = True 
    while clusterChanged:
        clusterChanged = False
        for i in range(m):    #對每個數據點尋找最近的質心 
            minDist = inf; minIndex = -1
            for j in range(k): # 遍歷質心蔟,尋找最近的質心
                distJ1 = distE(centroids[j,:],dataMat[i,:]) #計算數據點和質心的歐式距離 
                if distJ1 < minDist:
                    minDist = distJ1; minIndex = j 
            if clusterAssment[i,0] != minIndex:
                clusterChanged = True
                clusterAssment[i,:] = minIndex,minDist**2 
         print centroids
         for cent in range(k):    #更新質心的位置
            ptsInClust = dataMat[nonzero(clusterAssment[:,0].A==cent)[0]] 
            centroids[cent,:] = mean(ptsInClust, axis=0)
    return centroids, clusterAssment

K-Means 的評價標準

k-means算法因為手動選取k值和初始化隨機質心的緣故,每一次的結果不會完全一樣,而且由于手動選取k值,我們需要知道我們選取的k值是否合理,聚類效果好不好,那么如何來評價某一次的聚類效果呢?也許將它們畫在圖上直接觀察是最好的辦法,但現實是,我們的數據不會僅僅只有兩個特征,一般來說都有十幾個特征,而觀察十幾維的空間對我們來說是一個無法完成的任務。因此,我們需要一個公式來幫助我們判斷聚類的性能,這個公式就是SSE (Sum of Squared Error, 誤差平方和 ),它其實就是每一個點到其簇內質心的距離的平方值的總和,這個數值對應kmeans函數中clusterAssment矩陣的第一列之和。 SSE值越小表示數據點越接近于它們的質心,聚類效果也越好。 因為對誤差取了平方,因此更加重視那些遠離中心的點。一種肯定可以降低SSE值的方法是增加簇的個數,但這違背了聚類的目標。聚類的目標是在保持簇數目不變的情況下提高簇的質量。文章來源地址http://www.zghlxwxcb.cn/news/detail-682410.html

到了這里,關于K-Means(K-均值)聚類算法理論和實戰(zhàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • MATLAB實現k-means算法(k-均值)對無標簽數據進行聚類,并通過肘部法則確定聚類類別

    MATLAB實現k-means算法(k-均值)對無標簽數據進行聚類,并通過肘部法則確定聚類類別

    應一個小伙伴的要求介紹了一下K均值聚類算法。本人也不是很專業(yè),這是之前自學的,如果有錯,大家可以提出來,共同進步嘛。 ??聚類屬于非監(jiān)督學習,K均值聚類是最基礎常用的聚類算法。它的基本思想是,通過迭代尋找K個簇(Cluster)的一種劃分方案,使得聚類結果

    2023年04月26日
    瀏覽(27)
  • 機器學習之K-Means(k均值)算法

    機器學習之K-Means(k均值)算法

    K-Means算法又稱K均值算法,屬于聚類(clustering)算法的一種,是應用最廣泛的聚類算法之一。所謂聚類,即根據相似性原則,將具有較高相似度的數據對象劃分至同一類簇,將具有較高相異度的數據對象劃分至不同類簇。聚類與分類最大的區(qū)別在于,聚類過程為無監(jiān)督過程,

    2024年02月03日
    瀏覽(22)
  • 機器學習之K-means聚類算法

    機器學習之K-means聚類算法

    目錄 K-means聚類算法 算法流程 優(yōu)點 缺點 隨機點聚類 人臉聚類 旋轉物體聚類 K-means聚類算法是一種無監(jiān)督的學習方法,通過對樣本數據進行分組來發(fā)現數據內在的結構。K-means的基本思想是將n個實例分成k個簇,使得同一簇內數據相似度高而不同簇之間數據相似度低。 K-means的

    2024年02月11日
    瀏覽(28)
  • 機器學習第十一課--K-Means聚類

    機器學習第十一課--K-Means聚類

    K-Means算法是最經典的聚類算法,幾乎所有的聚類分析場景,你都可以使用K-Means,而且在營銷場景上,它就是\\\"King\\\",所以不管從事數據分析師甚至是AI工程師,不知道K-Means是”不可原諒“的一件事情。在面試中,面試官也經常問關于K-Means的問題。雖然算法簡單,但也有一些需

    2024年02月07日
    瀏覽(26)
  • python機器學習——聚類評估方法 & K-Means聚類 & 神經網絡模型基礎

    python機器學習——聚類評估方法 & K-Means聚類 & 神經網絡模型基礎

    1、隨機設置K個特征空間內的點作為初始的聚類中心 2、對于其他每個點計算到K個中心的距離,未知的點選擇最近的一個聚類中心點作為標記類別 3、接著對著標記的聚類中心之后,重新計算出每個聚類的新中心點(平均值) 4、如果計算得出的新中心點與原中心點一樣,那么

    2024年02月12日
    瀏覽(21)
  • python k-means聚類算法 物流分配預測實戰(zhàn)(超詳細,附源碼)

    python k-means聚類算法 物流分配預測實戰(zhàn)(超詳細,附源碼)

    數據集和地圖可以點贊關注收藏后評論區(qū)留下QQ郵箱或者私信博主要 聚類是一類機器學習基礎算法的總稱。 聚類的核心計算過程是將數據對象集合按相似程度劃分成多個類,劃分得到的每個類稱為聚類的簇 聚類不等于分類,其主要區(qū)別在于聚類所面對的目標類別是未知的

    2024年02月02日
    瀏覽(54)
  • python 實現k-means聚類算法 銀行客戶分組畫像實戰(zhàn)(超詳細,附源碼)

    python 實現k-means聚類算法 銀行客戶分組畫像實戰(zhàn)(超詳細,附源碼)

    想要數據集請點贊關注收藏后評論區(qū)留言留下QQ郵箱 k-means具體是什么這里就不再贅述,詳情可以參見我這篇博客 k-means 問題描述:銀行對客戶信息進行采集,獲得了200位客戶的數據,客戶特征包括以下四個1:社保號碼 2:姓名? 3:年齡 4:存款數量 使用k-means算法對客戶進行

    2024年02月11日
    瀏覽(130)
  • R語言APRIORI關聯(lián)規(guī)則、K-MEANS均值聚類分析中藥專利復方治療用藥規(guī)律網絡可視化...

    R語言APRIORI關聯(lián)規(guī)則、K-MEANS均值聚類分析中藥專利復方治療用藥規(guī)律網絡可視化...

    應用關聯(lián)規(guī)則、聚類方法等數據挖掘技術分析治療的中藥專利復方組方配伍規(guī)律 ( 點擊文末“閱讀原文”獲取完整 代碼數據 )。 方法檢索治療中藥專利復方,排除外用中藥及中西藥物合用的復方。最近我們被要求撰寫關于用藥規(guī)律的研究報告,包括一些圖形和統(tǒng)計輸出。

    2024年02月11日
    瀏覽(48)
  • 【機器學習】十大算法之一 “K-means”

    【機器學習】十大算法之一 “K-means”

    ? 作者主頁: 愛笑的男孩。的博客_CSDN博客-深度學習,活動,python領域博主 愛笑的男孩。擅長深度學習,活動,python,等方面的知識,愛笑的男孩。關注算法,python,計算機視覺,圖像處理,深度學習,pytorch,神經網絡,opencv領域. https://blog.csdn.net/Code_and516?type=blog 個人簡介:打工人。 持續(xù)分

    2024年02月10日
    瀏覽(18)
  • k-means聚類算法詳解

    k-means聚類算法詳解

    什么是特征向量? 用來描述樣本點的一組數據,要和我們數學中的向量區(qū)別一下,本質來說就是個數組,數組中的每個元素代表從不同角度描述樣本點的值。 K-means 是我們最常用的基于 歐式距離 的聚類算法,其認為兩個目標的距離越近,相似度越大。 聚類就是對大量末知標

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包