成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

K-means在Python中的實(shí)現(xiàn)

nanfeiyan / 505人閱讀

摘要:算法的關(guān)鍵在于初始中心的選擇和距離公式。并行設(shè)置的實(shí)現(xiàn)算法,有其中表示用方式實(shí)現(xiàn)雖然有很多參數(shù),但是都已經(jīng)給出了默認(rèn)值。

K-means算法簡(jiǎn)介

K-means是機(jī)器學(xué)習(xí)中一個(gè)比較常用的算法,屬于無(wú)監(jiān)督學(xué)習(xí)算法,其常被用于數(shù)據(jù)的聚類(lèi),只需為它指定簇的數(shù)量即可自動(dòng)將數(shù)據(jù)聚合到多類(lèi)中,相同簇中的數(shù)據(jù)相似度較高,不同簇中數(shù)據(jù)相似度較低。

K-menas的優(yōu)缺點(diǎn):

優(yōu)點(diǎn):

原理簡(jiǎn)單

速度快

對(duì)大數(shù)據(jù)集有比較好的伸縮性

缺點(diǎn):

需要指定聚類(lèi) 數(shù)量K

對(duì)異常值敏感

對(duì)初始值敏感

K-means的聚類(lèi)過(guò)程

其聚類(lèi)過(guò)程類(lèi)似于梯度下降算法,建立代價(jià)函數(shù)并通過(guò)迭代使得代價(jià)函數(shù)值越來(lái)越小

適當(dāng)選擇c個(gè)類(lèi)的初始中心;

在第k次迭代中,對(duì)任意一個(gè)樣本,求其到c個(gè)中心的距離,將該樣本歸到距離最短的中心所在的類(lèi);

利用均值等方法更新該類(lèi)的中心值;

對(duì)于所有的c個(gè)聚類(lèi)中心,如果利用(2)(3)的迭代法更新后,值保持不變,則迭代結(jié)束,否則繼續(xù)迭代。

該算法的最大優(yōu)勢(shì)在于簡(jiǎn)潔和快速。算法的關(guān)鍵在于初始中心的選擇和距離公式。

K-means 實(shí)例展示

python中km的一些參數(shù):

sklearn.cluster.KMeans(
    n_clusters=8,
    init="k-means++", 
    n_init=10, 
    max_iter=300, 
    tol=0.0001, 
    precompute_distances="auto", 
    verbose=0, 
    random_state=None, 
    copy_x=True, 
    n_jobs=1, 
    algorithm="auto"
    )
n_clusters: 簇的個(gè)數(shù),即你想聚成幾類(lèi)
init: 初始簇中心的獲取方法
n_init: 獲取初始簇中心的更迭次數(shù),為了彌補(bǔ)初始質(zhì)心的影響,算法默認(rèn)會(huì)初始10個(gè)質(zhì)心,實(shí)現(xiàn)算法,然后返回最好的結(jié)果。
max_iter: 最大迭代次數(shù)(因?yàn)閗means算法的實(shí)現(xiàn)需要迭代)
tol: 容忍度,即kmeans運(yùn)行準(zhǔn)則收斂的條件
precompute_distances:是否需要提前計(jì)算距離,這個(gè)參數(shù)會(huì)在空間和時(shí)間之間做權(quán)衡,如果是True 會(huì)把整個(gè)距離矩陣都放到內(nèi)存中,auto 會(huì)默認(rèn)在數(shù)據(jù)樣本大于featurs*samples 的數(shù)量大于12e6 的時(shí)候False,False 時(shí)核心實(shí)現(xiàn)的方法是利用Cpython 來(lái)實(shí)現(xiàn)的
verbose: 冗長(zhǎng)模式(不太懂是啥意思,反正一般不去改默認(rèn)值)
random_state: 隨機(jī)生成簇中心的狀態(tài)條件。
copy_x: 對(duì)是否修改數(shù)據(jù)的一個(gè)標(biāo)記,如果True,即復(fù)制了就不會(huì)修改數(shù)據(jù)。bool 在scikit-learn 很多接口中都會(huì)有這個(gè)參數(shù)的,就是是否對(duì)輸入數(shù)據(jù)繼續(xù)copy 操作,以便不修改用戶(hù)的輸入數(shù)據(jù)。這個(gè)要理解Python 的內(nèi)存機(jī)制才會(huì)比較清楚。
n_jobs: 并行設(shè)置
algorithm: kmeans的實(shí)現(xiàn)算法,有:’auto’, ‘full’, ‘elkan’, 其中 ‘full’表示用EM方式實(shí)現(xiàn)
雖然有很多參數(shù),但是都已經(jīng)給出了默認(rèn)值。所以我們一般不需要去傳入這些參數(shù),參數(shù)的??梢愿鶕?jù)實(shí)際需要來(lái)調(diào)用。

下面展示一個(gè)代碼例子

from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np

# 生成10*3的矩陣
data = np.random.rand(10,3)
print data
# 聚類(lèi)為4類(lèi)
estimator=KMeans(n_clusters=4)
# fit_predict表示擬合+預(yù)測(cè),也可以分開(kāi)寫(xiě)
res=estimator.fit_predict(data)
# 預(yù)測(cè)類(lèi)別標(biāo)簽結(jié)果
lable_pred=estimator.labels_
# 各個(gè)類(lèi)別的聚類(lèi)中心值
centroids=estimator.cluster_centers_
# 聚類(lèi)中心均值向量的總和
inertia=estimator.inertia_

print lable_pred
print centroids
print inertia

代碼執(zhí)行結(jié)果
[0 2 1 0 2 2 0 3 2 0]

[[ 0.3028348   0.25183096  0.62493622]
 [ 0.88481287  0.70891813  0.79463764]
 [ 0.66821961  0.54817207  0.30197415]
 [ 0.11629904  0.85684903  0.7088385 ]]
 
0.570794546829

為了更直觀的描述,這次在圖上做一個(gè)展示,由于圖像上繪制二維比較直觀,所以數(shù)據(jù)調(diào)整到了二維,選取100個(gè)點(diǎn)繪制,聚類(lèi)類(lèi)別為3類(lèi)

from sklearn.cluster import KMeans
from sklearn.externals import joblib
from sklearn import cluster
import numpy as np
import matplotlib.pyplot as plt

data = np.random.rand(100,2)
estimator=KMeans(n_clusters=3)
res=estimator.fit_predict(data)
lable_pred=estimator.labels_
centroids=estimator.cluster_centers_
inertia=estimator.inertia_
#print res
print lable_pred
print centroids
print inertia

for i in range(len(data)):
    if int(lable_pred[i])==0:
        plt.scatter(data[i][0],data[i][1],color="red")
    if int(lable_pred[i])==1:
        plt.scatter(data[i][0],data[i][1],color="black")
    if int(lable_pred[i])==2:
        plt.scatter(data[i][0],data[i][1],color="blue")
plt.show()

可以看到聚類(lèi)效果還是不錯(cuò)的,對(duì)k-means的聚類(lèi)效率進(jìn)行了一個(gè)測(cè)試,將維度擴(kuò)寬到50維

數(shù)據(jù)規(guī)模 消耗時(shí)間 數(shù)據(jù)維度
10000條 4s 50維
100000條 30s 50維
1000000條 4"13s 50維

對(duì)于百萬(wàn)級(jí)的數(shù)據(jù),擬合時(shí)間還是能夠接受的,可見(jiàn)效率還是不錯(cuò),對(duì)模型的保存與其它的機(jī)器學(xué)習(xí)算法模型保存類(lèi)似

from sklearn.externals import joblib
joblib.dump(km,"model/km_model.m")

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/40784.html

相關(guān)文章

  • Python數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí),快速掌握聚類(lèi)算法和關(guān)聯(lián)分析

    摘要:摘要前文數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門(mén)實(shí)戰(zhàn)與大家分享了分類(lèi)算法,在本文中將為大家介紹聚類(lèi)算法和關(guān)聯(lián)分析問(wèn)題。比如,聚類(lèi)算法可以實(shí)現(xiàn)公司客戶(hù)價(jià)值自動(dòng)劃分,網(wǎng)頁(yè)自動(dòng)歸類(lèi)等。 摘要:前文數(shù)據(jù)挖掘與機(jī)器學(xué)習(xí)技術(shù)入門(mén)實(shí)戰(zhàn)與大家分享了分類(lèi)算法,在本文中將為大家介紹聚類(lèi)算法和關(guān)聯(lián)分析問(wèn)題。分類(lèi)算法與聚類(lèi)到底有何區(qū)別?聚類(lèi)方法應(yīng)在怎樣的場(chǎng)景下使用?如何使用關(guān)聯(lián)分析算法解決個(gè)性化推薦問(wèn)題?本文就為大家揭曉答...

    Anchorer 評(píng)論0 收藏0
  • 機(jī)器學(xué)習(xí)算法基礎(chǔ)(使用Python代碼)

    摘要:機(jī)器學(xué)習(xí)算法類(lèi)型從廣義上講,有種類(lèi)型的機(jī)器學(xué)習(xí)算法。強(qiáng)化學(xué)習(xí)的例子馬爾可夫決策過(guò)程常用機(jī)器學(xué)習(xí)算法列表以下是常用機(jī)器學(xué)習(xí)算法的列表。我提供了對(duì)各種機(jī)器學(xué)習(xí)算法的高級(jí)理解以及運(yùn)行它們的代碼。決策樹(shù)是一種監(jiān)督學(xué)習(xí)算法,主要用于分類(lèi)問(wèn)題。 showImg(https://segmentfault.com/img/remote/1460000019086462); 介紹 谷歌的自動(dòng)駕駛汽車(chē)和機(jī)...

    BenCHou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<