python機器學(xué)習(xí)二(無監(jiān)督學(xué)習(xí))

無監(jiān)督學(xué)習(xí)

利用無標簽的數(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ù)是否有標簽

無監(jiān)督學(xué)習(xí)最常應(yīng)用的場景是聚類(clustering)和降維(dimension reduction)

聚類

聚類,就是根據(jù)數(shù)據(jù)的“相似性”將數(shù)據(jù)分為多類的過程

評估倆個不同樣本之間的‘相似性’,通常使用的方法就是計算倆個樣本之間的“距離”。使用不同的方法計算樣本間的距離會關(guān)系到聚類結(jié)果的好壞。

sklearn.cluster

sklearn.cluster模塊提供的各聚類算法函數(shù)可以使用不同的數(shù)據(jù)形式最為輸入:

標準數(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 降維

降維是機器學(xué)習(xí)領(lǐng)域的一個重要研究內(nèi)容,有很多被工業(yè)界和學(xué)術(shù)界接受的典型算法,截止到目前sklearn庫提供7種降維算法。

降維過程也可以被理解為對數(shù)據(jù)集的組成成分進行分解(decomposition)的過程,因此sklearn為降維模塊命名為decomposition,在對降維算法調(diào)用需要使用sklearn.decomposition模塊

K-means聚類算法

K-means
算法以k為參數(shù),把n個對象分成k個簇,使簇內(nèi)具有較高的相似性度,而簇間的相似度較低。

其處理過程如下:

?????????? 1.隨機選擇k個點作為初始的聚類中心;

?????????? 2.對于剩下的點,根據(jù)其與聚類中心的距離,將其歸入最近的簇

?????????? 3.對每個簇,計算所有點的均值作為新的聚類中心

??????????? 4.重復(fù)2、3直到聚類中心不再發(fā)生改變

k-means的應(yīng)用

數(shù)據(jù)介紹:

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

實驗?zāi)康模?/p>

?通過聚類,了解1999年各個省份的消費水平在國內(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語言的一個擴充程序庫。支持高級大量的維度數(shù)組與矩陣運算,此外也針對數(shù)組運算提供大量的數(shù)學(xué)函數(shù)庫。

使用sklearn.cluster.KMeans可以調(diào)用K-means算法進行聚類

2.加載數(shù)據(jù),創(chuàng)建K-means算法實例,并進行訓(xùn)練,獲得標簽:

3.輸出標簽,查看結(jié)果

將城市按照消費水平n_clusters類,消費水平相近的城市聚集在一類中

expense:聚類中心點的數(shù)值加和,也就是平均消費水平

聚類2類:km = KMeans(n_clusters=2)

聚類3類:km = KMeans(n_clusters=3)

聚類4類:km = KMeans(n_clusters=4)

從結(jié)果看出消費水平接近的省市聚集在了一類,例如消費最高的“北京”“上海”“廣東”聚集在了消費最高的類別。聚4類時,結(jié)果可以比較明顯的看出消費層級。


DBSCAN密度聚類

DBSCAN算法是一種基于密度的聚類算法

?????????????????????? 聚類的時候不需要預(yù)先指定簇的個數(shù)

??????????????????????? 最終的族個數(shù)不定

DBSCAN算法將數(shù)據(jù)點分為三類

?????????????????????? 核心點:在半徑Eps內(nèi)含有超過MinPts數(shù)目的點

??????????????????????? 邊界點:在半徑Eps內(nèi)點的數(shù)量小于MinPts,但是落在核心點的領(lǐng)域內(nèi)

??????????????????????? 噪音點:既不是核心點也不是邊界點的點

DBSCAN算法流程:

1.將所有點標記為核心點、邊界點或噪聲點;

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進行降維,主要參數(shù)有:

n_components:指定主成分的個數(shù),即降維后數(shù)據(jù)的維度

svd_solver:設(shè)置特征值分解的方法,默認為‘a(chǎn)uto’,其他可選有‘full’,‘a(chǎn)rpack’,'randomized'。


NMF方法及實例



非負矩陣分解(NMF)

非負矩陣分解(Non-negative Matrix Factorization,NMF)是在矩陣中所有元素均為非負數(shù)約束條件之下的矩陣分解方法。

基本思想:給定一個非負矩陣V,NMF能夠找到一個非負矩陣W和一個非負矩陣H,使得矩陣W和H的乘積近似等于矩陣V中的值。

sklearn中非負矩陣分解

在sklearn庫中,可以使用sklearn.decomposition.NMF加載NMF算法,主要參數(shù)有:

n_components:用于指定分解后矩陣的單個維度k;

init:w矩陣和h矩陣的初始化方式,默認為‘nndsvdar’


基于聚類的“圖像分割”實例編寫

圖像分割

圖像分割:利用圖像的灰度、顏色、紋理、形狀等特征,把圖像分成若干個互不重疊的區(qū)域,并使這些特征在同一區(qū)域內(nèi)呈現(xiàn)相似性,在不同的區(qū)域之間存在明顯的差異性。然后就可以將分割的圖像中具有獨特性質(zhì)的區(qū)域提取出來用于不同的研究。

圖像分割技術(shù)已在實際生活中得到廣泛的應(yīng)用。例如:在機車檢驗領(lǐng)域,可以應(yīng)用到輪轂裂紋圖像的分割,及時發(fā)現(xiàn)裂紋,保證行車安全;在生物醫(yī)學(xué)工程方面,對肝臟CT圖像進行分割,為臨床治療和病理學(xué)研究提供幫助。

圖像分割常用方法:

1.閥值分割:對圖像灰度值進行度量,設(shè)置不同類別的閥值,達到分割的目的。

2.邊緣分割:對圖像邊緣進行檢測,即檢測圖像中灰度值發(fā)生跳變的地方,則為一片區(qū)域的邊緣。

3.直方圖法:對圖像的顏色建立直方圖,二直方圖的波峰波谷能夠表示一塊區(qū)域的顏色值的范圍,來達到分割的目的。

4.特定理論:基于聚類分析、小波變換等理論完成圖像分割。

實例描述

目標:利用K-means聚類算法對圖像像素點顏色進行聚類實現(xiàn)簡單的圖像分割

輸出:同一聚類中的點使用相同顏色標記,不同聚類顏色不同

技術(shù)路線:sklearn.cluster.KMeans

實例數(shù)據(jù)


"Kmeans實例圖片分割"實例編寫

實驗過程

使用算法:Kmeans

實現(xiàn)步驟:

1.建立工程并導(dǎo)入sklearn包

2.加載圖片并進行預(yù)處理

3.加載Kmeans聚類算法

4.對像素點進行聚類并輸出

實現(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.加載圖片并進行預(yù)處理

實現(xiàn)步驟---3.加載Kmeans聚類算法

加載Kmeans聚類算法

km = KMeans(n_clusters=3)

其中n_clusters屬性指定了聚類中心的個數(shù)為3

實現(xiàn)步驟---4.對像素點進行聚類并輸出

實驗分析

通過設(shè)置不同的k值,能夠得到不同的聚類結(jié)果。同時,k值的不確定也是kmeans算法的一個缺點。往往為了達到好的實驗結(jié)果,需要進行多次嘗試才能夠選取最優(yōu)的k值。而像層次聚類的算法,就無需指定k值,只要給定限制條件,就能自動地得到類別數(shù)k。








???????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容