中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

如何使用 Keras 實(shí)現(xiàn)無監(jiān)督聚類

2018-06-23    來源:

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用
原標(biāo)題 A、Word2Vec?—?a baby step in Deep Learning but a giant leap towards Natural Language Processing,作者為機(jī)器學(xué)習(xí)工程師 Suvro Banerjee

原文鏈接:https://medium.com/@chengweizhang2012/how-to-do-unsupervised-clustering-with-keras-9e1284448437

由于深度學(xué)習(xí)算法在表達(dá)非線性表征上的卓越能力,它非常適合完成輸入到有標(biāo)簽的數(shù)據(jù)集輸出的映射。這種任務(wù)叫做分類。它需要有人對數(shù)據(jù)進(jìn)行標(biāo)注。無論是對 X 光圖像還是對新聞報道的主題進(jìn)行標(biāo)注,在數(shù)據(jù)集增大的時候,依靠人類進(jìn)行干預(yù)的做法都是費(fèi)時費(fèi)力的。

聚類分析,或者稱作聚類是一種無監(jiān)督的機(jī)器學(xué)習(xí)技術(shù)。它不需要有標(biāo)簽的數(shù)據(jù)集。它可以根據(jù)數(shù)據(jù)成員的相似性對它們進(jìn)行分組。

你為什么需要關(guān)注它呢?讓我來講講幾個理由。

 

 

聚類的應(yīng)用

推薦系統(tǒng),通過學(xué)習(xí)用戶的購買歷史,聚類模型可以根據(jù)相似性對用戶進(jìn)行區(qū)分。它可以幫助你找到志趣相投的用戶,以及相關(guān)商品。

在生物學(xué)上,序列聚類算法試圖將相關(guān)的生物序列進(jìn)行分組。它根據(jù)氨基酸含量對蛋白進(jìn)行聚類。

圖像和視頻聚類分析根據(jù)相似性對它們進(jìn)行分組。

在醫(yī)療數(shù)據(jù)庫中,對每個病人來說,真正有價值的測試(比如葡萄糖,膽固醇)都是不同的。首先對病人進(jìn)行聚類分析可以幫助我們對真正有價值的特征進(jìn)行分類,從而減少特征分散。它可以增加分類任務(wù)的準(zhǔn)確性,比如在癌癥病人生存預(yù)測上。

在一般用途上,它可以生成一個數(shù)據(jù)的匯總信息用于分類,模式發(fā)現(xiàn),假設(shè)生成,以及測試。

無論如何,對于數(shù)據(jù)科學(xué)家來說,聚類都是非常有價值的工具。

如何才是好的聚類

一個好的聚類方法應(yīng)該生成高質(zhì)量的分類,它有如下特點(diǎn):

群組內(nèi)部的高相似性:群組內(nèi)的緊密聚合

群組之間的低相似性:群組之間各不相同

為 K-Means 算法設(shè)置一個基線

傳統(tǒng)的 K-Means 算法速度快,并且可以廣泛應(yīng)用于解決各種問題。但是,它的距離度量受限于原始的數(shù)據(jù)空間。因此在輸入數(shù)據(jù)維度較高時,它的效率就會降低,比如說圖像集。

讓我們來訓(xùn)練一個 K-Means 模型對 MNIST 手寫字體進(jìn)行聚類分析到 10 個群組中。

 

 

評估得到 K-Means 聚類算法的準(zhǔn)確度在 53.2%。后面我們會將它與深度嵌入聚類模型進(jìn)行比較。

一個自動編碼器,通過前訓(xùn)練,學(xué)習(xí)無標(biāo)簽數(shù)據(jù)集初始壓縮后的表征。

建立在編碼器之上的聚類層將輸出送給一個群組。基于當(dāng)前評估得到的 K-Means 聚類中心,聚類層完成權(quán)重值的初始化。

訓(xùn)練聚類模型,同時改善聚類層和編碼器。

在找源代碼嗎?到我的 Github 上看看。

前訓(xùn)練自動編碼器

自動編碼器是一個數(shù)據(jù)壓縮算法。它由編碼器和解碼器兩個主要部分構(gòu)成。編碼器的工作是將輸入數(shù)據(jù)壓縮成較低維度的特征。比如,一個 28x28 的 MNIST 圖像總共有 784 個像素。編碼器可以將它壓縮成 10 個浮點(diǎn)數(shù)組成的數(shù)組。我們將這些浮點(diǎn)數(shù)作為圖像的特征。另一方面,解碼器將壓縮后的特征作為輸入,通過它重建出與原始圖像盡可能相近似的圖像。實(shí)際上,自動編碼器是一個無監(jiān)督學(xué)習(xí)算法。在訓(xùn)練過程中,它只需要圖像本身,而不需要標(biāo)簽。

 

 

自動編碼器

自動編碼器是一個全連接對稱模型。之所以是對稱的,是因?yàn)閳D像的壓縮和解壓過程是一組完全相反的對應(yīng)過程。

 

 

全連接自動編碼器

我們將會對自動編碼器進(jìn)行 300 輪訓(xùn)練,并保存下模型權(quán)重值。

autoencoder.fit(x, x, batch_size=256, epochs=300) #, callbacks=cb)
autoencoder.save_weights('./results/ae_weights.h5')

聚類模型

通過訓(xùn)練自動編碼器,我們已經(jīng)使編碼器學(xué)會了將每幅圖像壓縮成 10 個浮點(diǎn)數(shù)。你可能會想,因?yàn)檩斎刖S度減少到 10, K-Means 算法應(yīng)該可以以此開始聚類?是的,我們將會使用 K-Means 算法生成聚類中心。它是 10 維特征向量空間的 10 個群組的中心。但是我們還要建立我們的自定義聚類層,將輸入特征轉(zhuǎn)化為群組標(biāo)簽概率。

這個概率是由 t-分布計(jì)算得來。 T-分布,和t-分布鄰域嵌入算法一樣,測度了內(nèi)含點(diǎn)和中心點(diǎn)之間的相似度。正如你所猜測的那樣,聚類層的作用類似于用于聚類的K-means,并且該層的權(quán)重表示可以通過訓(xùn)練K均值來初始化的聚類質(zhì)心。

如果您是在 Keras 中創(chuàng)建自定義圖層的新手,那么您可以實(shí)施三種強(qiáng)制方法。

build(input_shape),在這里你定義圖層的權(quán)重,在我們的例子中是10-D特征空間中的10個簇,即10x10個權(quán)重變量。

call(x),層邏輯所在的地方,即從特征映射到聚類標(biāo)簽?zāi)g(shù)的地方。

compute_output_shape(input_shape),在這里指定從輸入形狀到輸出形狀的形狀轉(zhuǎn)換邏輯。

Here is the custom clustering layer code,

 

 

 

 

接下來,我們在預(yù)先訓(xùn)練的編碼器之后堆疊聚類層以形成聚類模型。 對于聚類層,我們初始化它的權(quán)重,聚類中心使用k-means對所有圖像的特征向量進(jìn)行訓(xùn)練。

 

 

 

 

聚類模型結(jié)構(gòu)

訓(xùn)練聚類模型

輔助目標(biāo)分布和KL散度損失

下一步是同時改進(jìn)聚類分配和特征表示。 為此,我們將定義一個基于質(zhì)心的目標(biāo)概率分布,并根據(jù)模型聚類結(jié)果將KL偏差最小化。

我們希望目標(biāo)分配具有以下屬性:

加強(qiáng)預(yù)測,即提高群集純度。

更加重視高可信度地分配的數(shù)據(jù)點(diǎn)。

防止大集群扭曲隱藏的特征空間。

通過首先將q(編碼特征向量)提升到第二冪然后按每個簇的頻率進(jìn)行歸一化來計(jì)算目標(biāo)分布。

 

 

有必要通過在輔助目標(biāo)分布的幫助下從高置信度分配中學(xué)習(xí)來迭代地細(xì)化群集。 在特定次數(shù)的迭代之后,更新目標(biāo)分布,并且訓(xùn)練聚類模型以最小化目標(biāo)分布與聚類輸出之間的KL散度損失。 培訓(xùn)策略可以被看作是一種自我訓(xùn)練的形式。 就像在自我訓(xùn)練中一樣,我們采用初始分類器和未標(biāo)記的數(shù)據(jù)集,然后用分類器標(biāo)記數(shù)據(jù)集以訓(xùn)練其高置信度的預(yù)測。

損失函數(shù),KL散度或Kullback-Leibler散度是衡量兩種不同分布之間行為差異的指標(biāo)。 我們希望將其最小化,以便目標(biāo)分布盡可能接近聚類輸出分布。

在以下代碼片段中,目標(biāo)分布每180次訓(xùn)練迭代更新一次。

 

 

每次更新后,您將看到聚類準(zhǔn)確度穩(wěn)步提高。

評估指標(biāo)

該度量標(biāo)準(zhǔn)表明它已達(dá)到96.2%的聚類精度,考慮到輸入是未標(biāo)記的圖像,這非常好。 讓我們仔細(xì)研究它的精確度。

該度量需要從無監(jiān)督算法和地面實(shí)況分配中獲取一個集群分配,然后找到它們之間的最佳匹配。

最好的映射可以通過在scikit學(xué)習(xí)庫中實(shí)現(xiàn)的匈牙利算法有效地計(jì)算為linear_assignment。

 

 

查看混淆矩陣更直接。

 

 

混亂矩陣

在這里,您可以手動快速匹配聚類分配,例如,聚類1與真實(shí)標(biāo)簽7或手寫數(shù)字“7”和虎鉗簽證相匹配。

下面顯示的混淆矩陣?yán)L制代碼片段。

 

 

應(yīng)用卷積自動編碼器(實(shí)驗(yàn))

由于我們正在處理圖像數(shù)據(jù)集,所以值得一試卷積自動編碼器,而不是僅使用完全連接的圖層構(gòu)建。

值得一提的是,為了重建圖像,您可以選擇去卷積層(Keras中的Conv2DTranspose)或上采樣(UpSampling2D)層以減少偽像問題。卷積自動編碼器的實(shí)驗(yàn)結(jié)果可以在我的GitHub上找到。

結(jié)論和進(jìn)一步閱讀

自動編碼器在降維和參數(shù)初始化方面發(fā)揮了重要作用,然后針對目標(biāo)分布對定制的聚類層進(jìn)行訓(xùn)練以進(jìn)一步提高精度。

進(jìn)一步閱讀

在 Keras 建立自動編碼器 - 官方Keras博客

用于聚類分析的無監(jiān)督深嵌入 - 激勵我寫這篇文章。

完整的源代碼在我的 GitHub 上,一直讀到筆記本的最后,因?yàn)槟鷷l(fā)現(xiàn)另一種可以同時減少聚類和自動編碼器丟失的另一種方法,這種方法被證明對于提高卷積聚類模型的聚類準(zhǔn)確性非常有用。

標(biāo)簽: 代碼 數(shù)據(jù)庫

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:吳恩達(dá)授課,斯坦福CS230深度學(xué)習(xí)課程資源開放

下一篇:大數(shù)據(jù)揭秘:學(xué)歷真的能改變命運(yùn)?