机器学习非监督学习—k-means及案例分析
一、非監(jiān)督學(xué)習(xí)
無監(jiān)督學(xué)習(xí),顧名思義,就是不受監(jiān)督的學(xué)習(xí),一種自由的學(xué)習(xí)方式。該學(xué)習(xí)方式不需要先驗知識進(jìn)行指導(dǎo),而是不斷地自我認(rèn)知,自我鞏固,最后進(jìn)行自我歸納,在機器學(xué)習(xí)中,無監(jiān)督學(xué)習(xí)可以被簡單理解為不為訓(xùn)練集提供對應(yīng)的類別標(biāo)識(label),其與有監(jiān)督學(xué)習(xí)的對比如下:有監(jiān)督學(xué)習(xí)(Supervised Learning)下的訓(xùn)練集:
(x(1),y(1)),(x(2),y2)(x(1),y(1)),(x(2),y2)
無監(jiān)督學(xué)習(xí)(Unsupervised Learning)下的訓(xùn)練集:
(x(1)),(x(2)),(x(3))(x(1)),(x(2)),(x(3))
在有監(jiān)督學(xué)習(xí)中,我們把對樣本進(jìn)行分類的過程稱之為分類(Classification),而在無監(jiān)督學(xué)習(xí)中,我們將物體被劃分到不同集合的過程稱之為聚類(Clustering)
二、非監(jiān)督學(xué)習(xí)之k-means
K-means通常被稱為勞埃德算法,這在數(shù)據(jù)聚類中是最經(jīng)典的,也是相對容易理解的模型。算法執(zhí)行的過程分為4個階段。
- 1.首先,隨機設(shè)K個特征空間內(nèi)的點作為初始的聚類中心。
- 2.然后,對于根據(jù)每個數(shù)據(jù)的特征向量,從K個聚類中心中尋找距離最近的一個,并且把該數(shù)據(jù)標(biāo)記為這個聚類中心。
- 3.接著,在所有的數(shù)據(jù)都被標(biāo)記過聚類中心之后,根據(jù)這些數(shù)據(jù)新分配的類簇,通過取分配給每個先前質(zhì)心的所有樣本的平均值來創(chuàng)建新的質(zhì)心重,新對K個聚類中心做計算。
- 4.最后,計算舊和新質(zhì)心之間的差異,如果所有的數(shù)據(jù)點從屬的聚類中心與上一次的分配的類簇沒有變化,那么迭代就可以停止,否則回到步驟2繼續(xù)循環(huán)。
K均值等于具有小的全對稱協(xié)方差矩陣的期望最大化算法
sklearn.cluster.KMeans
class 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')""":param n_clusters:要形成的聚類數(shù)以及生成的質(zhì)心數(shù):param init:初始化方法,默認(rèn)為'k-means ++',以智能方式選擇k-均值聚類的初始聚類中心,以加速收斂;random,從初始質(zhì)心數(shù)據(jù)中隨機選擇k個觀察值(行:param n_init:int,默認(rèn)值:10使用不同質(zhì)心種子運行k-means算法的時間。最終結(jié)果將是n_init連續(xù)運行在慣性方面的最佳輸出。:param n_jobs:int用于計算的作業(yè)數(shù)量。這可以通過并行計算每個運行的n_init。如果-1使用所有CPU。如果給出1,則不使用任何并行計算代碼,這對調(diào)試很有用。對于-1以下的n_jobs,使用(n_cpus + 1 + n_jobs)。因此,對于n_jobs = -2,所有CPU都使用一個。:param random_state:隨機數(shù)種子,默認(rèn)為全局numpy隨機數(shù)生成器""" from sklearn.cluster import KMeans import numpy as np X = np.array([[1, 2], [1, 4], [1, 0],[4, 2], [4, 4], [4, 0]]) kmeans = KMeans(n_clusters=2, random_state=0)方法
fit(X,y=None)
使用X作為訓(xùn)練數(shù)據(jù)擬合模型
kmeans.fit(X)predict(X)
預(yù)測新的數(shù)據(jù)所在的類別
kmeans.predict([[0, 0], [4, 4]]) array([0, 1], dtype=int32)屬性
clustercenters
集群中心的點坐標(biāo)
kmeans.cluster_centers_ array([[ 1., 2.],[ 4., 2.]])labels_
每個點的類別
kmeans.labels_三、k-means案例分析
手寫數(shù)字?jǐn)?shù)據(jù)上K-Means聚類的演示
from sklearn.metrics import silhouette_score from sklearn.cluster import KMeansdef kmeans():"""手寫數(shù)字聚類過程:return: None"""# 加載數(shù)據(jù)ld = load_digits()print(ld.target[:20])# 聚類km = KMeans(n_clusters=810)km.fit_transform(ld.data)print(km.labels_[:20])print(silhouette_score(ld.data,km.labels_))return Noneif __name__=="__main__":kmeans()創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎
總結(jié)
以上是生活随笔為你收集整理的机器学习非监督学习—k-means及案例分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 不重启部署_一篇文章带你搞定S
- 下一篇: cron 每周一执行_详解定时任务中的