無監(jiān)督學(xué)習(xí)
利用無標(biāo)簽的數(shù)據(jù)學(xué)習(xí)數(shù)據(jù)的分布或數(shù)據(jù)與數(shù)據(jù)之間的關(guān)系被稱作無監(jiān)督學(xué)習(xí)
有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)的最大區(qū)別在于數(shù)據(jù)是否有標(biāo)簽
無監(jiān)督學(xué)習(xí)最常應(yīng)用的場景是聚類(clustering)和降維(dimension reduction)
聚類
聚類,就是根據(jù)數(shù)據(jù)的“相似性”將數(shù)據(jù)分為多類的過程
評估倆個不同樣本之間的‘相似性’,通常使用的方法就是計算倆個樣本之間的“距離”。使用不同的方法計算樣本間的距離會關(guān)系到聚類結(jié)果的好壞。
sklearn.cluster
sklearn.cluster模塊提供的各聚類算法函數(shù)可以使用不同的數(shù)據(jù)形式最為輸入:
標(biāo)準(zhǔn)數(shù)據(jù)輸入格式:[樣本個數(shù),特征個數(shù)]定義的矩陣形式
相似性矩陣輸入格式:既由[樣本數(shù)目,樣本數(shù)目]定義的矩陣形式,矩陣中的每一個元素為兩個樣本的相似度,如DBSCAN,AffinityPropagation(近鄰傳播算法)接受這種輸入。如果以余弦相似度為例,則對角線元素全為1.矩陣中每個元素的取值范圍[0,1]
聚類vs降維
聚類和降維都是無監(jiān)督學(xué)習(xí)的典型任務(wù),任務(wù)之間存在關(guān)聯(lián),比如某些高緯數(shù)據(jù)的聚類可以通過降維處理更好的獲得,另外學(xué)界研究也表明代表性的聚類算法如k-means與降維算法如NMF之間存在等價性,在此我們就不展開討論了,有興趣的同學(xué)可以參考我們推薦的閱讀內(nèi)容。
sklearn vs 降維
降維是機(jī)器學(xué)習(xí)領(lǐng)域的一個重要研究內(nèi)容,有很多被工業(yè)界和學(xué)術(shù)界接受的典型算法,截止到目前sklearn庫提供7種降維算法。
降維過程也可以被理解為對數(shù)據(jù)集的組成成分進(jìn)行分解(decomposition)的過程,因此sklearn為降維模塊命名為decomposition,在對降維算法調(diào)用需要使用sklearn.decomposition模塊
K-means聚類算法
K-means
算法以k為參數(shù),把n個對象分成k個簇,使簇內(nèi)具有較高的相似性度,而簇間的相似度較低。
其處理過程如下:
?????????? 1.隨機(jī)選擇k個點作為初始的聚類中心;
?????????? 2.對于剩下的點,根據(jù)其與聚類中心的距離,將其歸入最近的簇
?????????? 3.對每個簇,計算所有點的均值作為新的聚類中心
??????????? 4.重復(fù)2、3直到聚類中心不再發(fā)生改變
k-means的應(yīng)用
數(shù)據(jù)介紹:
現(xiàn)有1999年全國31個省份城鎮(zhèn)居民家庭平均每人全年消費(fèi)性支出的八個主要變量數(shù)據(jù),這八個變量分別是:食品、衣著、家庭設(shè)備用品及服務(wù)、醫(yī)療保健、交通和通訊、娛樂教育文化服務(wù)、居住以及雜項商品和服務(wù)。利用已有數(shù)據(jù),對31個省份進(jìn)行聚類。
實驗?zāi)康模?/p>
?通過聚類,了解1999年各個省份的消費(fèi)水平在國內(nèi)的情況
技術(shù)路線:sklearn.cluster.Kmeans
實驗過程:K-means聚類算法
實驗過程:
1.建立工程,導(dǎo)入sklearn相關(guān)包(import numpy as np、import sklearn.cluster import KMearns)
關(guān)于一些相關(guān)包的介紹:
numpy是python語言的一個擴(kuò)充程序庫。支持高級大量的維度數(shù)組與矩陣運(yùn)算,此外也針對數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫。
使用sklearn.cluster.KMeans可以調(diào)用K-means算法進(jìn)行聚類
2.加載數(shù)據(jù),創(chuàng)建K-means算法實例,并進(jìn)行訓(xùn)練,獲得標(biāo)簽:
3.輸出標(biāo)簽,查看結(jié)果
將城市按照消費(fèi)水平n_clusters類,消費(fèi)水平相近的城市聚集在一類中
expense:聚類中心點的數(shù)值加和,也就是平均消費(fèi)水平
聚類2類:km = KMeans(n_clusters=2)
聚類3類:km = KMeans(n_clusters=3)
聚類4類:km = KMeans(n_clusters=4)
從結(jié)果看出消費(fèi)水平接近的省市聚集在了一類,例如消費(fèi)最高的“北京”“上海”“廣東”聚集在了消費(fèi)最高的類別。聚4類時,結(jié)果可以比較明顯的看出消費(fèi)層級。
DBSCAN密度聚類
DBSCAN算法是一種基于密度的聚類算法
?????????????????????? 聚類的時候不需要預(yù)先指定簇的個數(shù)
??????????????????????? 最終的族個數(shù)不定
DBSCAN算法將數(shù)據(jù)點分為三類
?????????????????????? 核心點:在半徑Eps內(nèi)含有超過MinPts數(shù)目的點
??????????????????????? 邊界點:在半徑Eps內(nèi)點的數(shù)量小于MinPts,但是落在核心點的領(lǐng)域內(nèi)
??????????????????????? 噪音點:既不是核心點也不是邊界點的點
DBSCAN算法流程:
1.將所有點標(biāo)記為核心點、邊界點或噪聲點;
2.刪除噪聲點;
3.為距離在Eps之內(nèi)的所有核心點之間賦予一條邊;
4.每組連通的核心點形成一個簇;
5.將每個邊界點指派到一個與之關(guān)聯(lián)的核心點的簇中(哪一個核心點的半徑范圍之內(nèi))
DBSCAN的應(yīng)用實例
數(shù)據(jù)介紹:
現(xiàn)有大學(xué)校園網(wǎng)的日志數(shù)據(jù),290條大學(xué)生的校園網(wǎng)使用情況數(shù)據(jù),數(shù)據(jù)包括用戶ID,設(shè)備的MAC地址,IP地址,開始上網(wǎng)時間,停止上網(wǎng)時間,上網(wǎng)時長,校園網(wǎng)套餐等。利用已有數(shù)據(jù),分析學(xué)生上網(wǎng)的模式。
實驗?zāi)康模?/p>
通過DBSCAN聚類,分析學(xué)生上網(wǎng)時間和上網(wǎng)時長的模式
1.建立工程,導(dǎo)入sklearn相關(guān)包(import numpy as np/from sklearn.cluster import DBSCAN)
?????????????????? DBSCAN主要參數(shù):
???????????????????? eps:兩個樣本被看作鄰居節(jié)點的最大距離
????????????????????? min_samples:簇的樣本數(shù)
????????????????????? metric:距離計算方式
??????????????????? 例:sklearn.cluster.DBSCAN(eps=0.5,min_samples=5,metric='euclidean')
無監(jiān)督學(xué)習(xí)--降維
PCA方法及其應(yīng)用
主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,通常用于高緯數(shù)據(jù)集的探索與可視化,還可以用作數(shù)據(jù)壓縮和預(yù)處理等。
PCA可以把具有相關(guān)性的高緯變量合成為線性無關(guān)的低維變量,稱為主成分。主要分能夠盡可能保留原始數(shù)據(jù)的信息。
在介紹PCA的原理之前需要回顧涉及到的相關(guān)術(shù)語:
方差
協(xié)方差
協(xié)方差矩陣
特征向量和特征值
sklearn中主成分分析
在sklearn庫中,可以使用sklearn.decomposition.PCA加載PCA進(jìn)行降維,主要參數(shù)有:
n_components:指定主成分的個數(shù),即降維后數(shù)據(jù)的維度
svd_solver:設(shè)置特征值分解的方法,默認(rèn)為‘a(chǎn)uto’,其他可選有‘full’,‘a(chǎn)rpack’,'randomized'。
NMF方法及實例
非負(fù)矩陣分解(NMF)
非負(fù)矩陣分解(Non-negative Matrix Factorization,NMF)是在矩陣中所有元素均為非負(fù)數(shù)約束條件之下的矩陣分解方法。
基本思想:給定一個非負(fù)矩陣V,NMF能夠找到一個非負(fù)矩陣W和一個非負(fù)矩陣H,使得矩陣W和H的乘積近似等于矩陣V中的值。
sklearn中非負(fù)矩陣分解
在sklearn庫中,可以使用sklearn.decomposition.NMF加載NMF算法,主要參數(shù)有:
n_components:用于指定分解后矩陣的單個維度k;
init:w矩陣和h矩陣的初始化方式,默認(rèn)為‘nndsvdar’
基于聚類的“圖像分割”實例編寫
圖像分割
圖像分割:利用圖像的灰度、顏色、紋理、形狀等特征,把圖像分成若干個互不重疊的區(qū)域,并使這些特征在同一區(qū)域內(nèi)呈現(xiàn)相似性,在不同的區(qū)域之間存在明顯的差異性。然后就可以將分割的圖像中具有獨(dú)特性質(zhì)的區(qū)域提取出來用于不同的研究。
圖像分割技術(shù)已在實際生活中得到廣泛的應(yīng)用。例如:在機(jī)車檢驗領(lǐng)域,可以應(yīng)用到輪轂裂紋圖像的分割,及時發(fā)現(xiàn)裂紋,保證行車安全;在生物醫(yī)學(xué)工程方面,對肝臟CT圖像進(jìn)行分割,為臨床治療和病理學(xué)研究提供幫助。
圖像分割常用方法:
1.閥值分割:對圖像灰度值進(jìn)行度量,設(shè)置不同類別的閥值,達(dá)到分割的目的。
2.邊緣分割:對圖像邊緣進(jìn)行檢測,即檢測圖像中灰度值發(fā)生跳變的地方,則為一片區(qū)域的邊緣。
3.直方圖法:對圖像的顏色建立直方圖,二直方圖的波峰波谷能夠表示一塊區(qū)域的顏色值的范圍,來達(dá)到分割的目的。
4.特定理論:基于聚類分析、小波變換等理論完成圖像分割。
實例描述
目標(biāo):利用K-means聚類算法對圖像像素點顏色進(jìn)行聚類實現(xiàn)簡單的圖像分割
輸出:同一聚類中的點使用相同顏色標(biāo)記,不同聚類顏色不同
技術(shù)路線:sklearn.cluster.KMeans
實例數(shù)據(jù)
"Kmeans實例圖片分割"實例編寫
實驗過程
使用算法:Kmeans
實現(xiàn)步驟:
1.建立工程并導(dǎo)入sklearn包
2.加載圖片并進(jìn)行預(yù)處理
3.加載Kmeans聚類算法
4.對像素點進(jìn)行聚類并輸出
實現(xiàn)步驟---1.建立工程并導(dǎo)入sklearn包
創(chuàng)建kmeans.py文件
導(dǎo)入sklearn相關(guān)包
import? numpy as np
import? PIL.Image? as image? #加載PIL包,用于加載創(chuàng)建圖片
from?? sklearn.cluster? import? KMeans? #加載Kmeans算法
實現(xiàn)步驟---2.加載圖片并進(jìn)行預(yù)處理
實現(xiàn)步驟---3.加載Kmeans聚類算法
加載Kmeans聚類算法
km = KMeans(n_clusters=3)
其中n_clusters屬性指定了聚類中心的個數(shù)為3
實現(xiàn)步驟---4.對像素點進(jìn)行聚類并輸出
實驗分析
通過設(shè)置不同的k值,能夠得到不同的聚類結(jié)果。同時,k值的不確定也是kmeans算法的一個缺點。往往為了達(dá)到好的實驗結(jié)果,需要進(jìn)行多次嘗試才能夠選取最優(yōu)的k值。而像層次聚類的算法,就無需指定k值,只要給定限制條件,就能自動地得到類別數(shù)k。
???????????