




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第4章無監督學習4.1K均值凝聚聚類4.2凝聚聚類4.3密度聚類之DBSCAN算法4.4小結4.1K均值凝聚聚類K均值凝聚聚類進行入手,K均值凝聚聚類是聚類算法中最簡單的一個,也是聚類算法中最實用的一個,在平常運用中使用次數也比較多。Kmeans算法,顧名思義,K表示類別數,Means表示均值。Kmeans算法就是一種通過均值對數據進行分類的算法。算法的原理很簡單,對于給定的數據,按照數據之間的距離分為K個種類。讓種類間的距離相對比較小,而種類與種類之間的距離相對較遠,就是高內聚低耦合。選擇K個算法的流程如下:首先先選擇K個聚類個數.直接生成K個中心作為均值定量,或者隨機選擇K個均值定量,然后作為聚類中心。對每個點確定其聚類中心點。再計算其聚類新中心。重復以上步驟直到滿足收斂要求。(通常就是確定的中心點不再改變)。Kmeans的流程可以用以下一組圖表示。我們先設置了一個K值為三,然后我們先隨機從數據中找出三點作為三個均值定量,然后在計算所有數據各點到質心的距離,然后將是數據分配給距離最近的一類,用不同的顏色表示數據所屬各類,然后經過第一輪的迭代后從各類中可以計算新的均值定量,然后計算每個數據點到個類之間的最近距離分到該類里面,重復迭代上述步驟。最終得到了一個合適的均值定量來表示我們的類別。當然在實際運用該算法時,一般會多以迭代,才能得到理想的結果。通過下列代碼觀察Kmeans算法的聚點,并觀察決策邊界fromsklearn.datasetsimportmake_blobsimportmatplotlib.pyplotaspltblobs=make_blobs(random_state=7,centers=3)X_blobs=blobs[0]plt.scatter(X_blobs[:,0],X_blobs[:,1],c='r',edgecolors='k')fromsklearn.clusterimportKMeansimportnumpyasnpkmeans=KMeans(n_clusters=3)kmeans.fit(X_blobs)X_min,X_max=X_blobs[:,0].min()-0.5,X_blobs[:,0].max()+0.5y_min,y_max=X_blobs[:,1].min()-0.5,X_blobs[:,1].max()+0.5xx,yy=np.meshgrid(np.arange(X_min,X_max,.02),np.arange(y_min,y_max,.02))Z=kmeans.predict(np.c_[xx.ravel(),yy.ravel()])Z=Z.reshape(xx.shape)plt.figure(1)plt.clf()plt.imshow(Z,interpolation='nearest',extent=(xx.min(),xx.max(),yy.min(),yy.max()),cmap=plt.cm.summer,aspect='auto',origin='lower')plt.plot(X_blobs[:,0],X_blobs[:,1],'r.',markersize=5)centroids=kmeans.cluster_centers_plt.scatter(centroids[:,0],centroids[:,1],marker='x',s=150,linewidths=3,color='b',zorder=10)plt.xlim(X_min,X_max)plt.ylim(y_min,y_max)plt.xticks(())plt.yticks(())plt.show()看過此算法后,我們很容易與KNN算法搞混,兩者都有一個相似的過程,就是都需要找到某一個點最近的點,二者都采用了最近鄰的思想。其實兩者的差別還是挺大的,Kmeans算法是無監督學習的聚類算法,而KNN算法是監督學習的分類算法。KNN算法基本不需要訓練,只要從測試集里面根據距離計算公式找到K個點,用這K個點表示測試機集的類別即可,而Kmeans算法有明顯的訓練過程,需要反復迭代找到K個類別的最佳質心來決定數據的類別。優點:1.原理簡單、實現容易,是解決聚類問題的一種經典算法,保持可伸縮性和高效率,當數據集是密集的,它的效果較好。2.算法的可解釋性較強,只要需要調參的的參數只有分類數K。缺點1.必須事先給出K值,而且對初值敏感,對于不同的初始值,可能會導致不同結果。2.對躁聲和孤立點數據敏感。3.采用迭代方法,得到的結果只是局部最優。4.2凝聚聚類
凝聚聚類算法類,是許多基于相同原則構建的聚類算法,算法的原理如下:所謂凝聚聚類就是讓算法在一開始的時候,將每一個點作為一個類別,每一次進行算法合并兩個最近的兩類,直到滿足某個條件為止。sklearn中實現該算法的滿足條件是類別的個數,當剩下指定個數的類時,算法自動停止。這里的參數重要的是鏈接準則,他的意思是如何尋找最相近的點。sklearn庫中包含三種鏈接方式:ward:是默認選項,通過挑選兩個類來合并,類中的方差增加最小通過這中鏈接方式通常得到大小差不多相等的簇。average鏈接:將簇中所有點之間平均距離最小的兩個類合并。complete鏈接:也稱為最大鏈接,將簇中點之間最大距離最小的兩個類合并。ward適用于大多數數據集。如果類中的成員個數非常不同,那么average或complete可能效果更好。下面是對數據集采用三種鏈接準則得到的結果。程序如下:
fromsklearn.datasets.samples_generatorimportmake_blobs
fromsklearn.clusterimportAgglomerativeClustering
importnumpyasnp
importmatplotlib.pyplotasplt
fromitertoolsimportcycle##python自帶的迭代器模塊
##產生隨機數據的中心
centers=[[1,1],[-1,-1],[1,-1]]
##產生的數據個數
X,lables_true=make_blobs(n_samples=2000,centers=centers,cluster_std=0.5,random_state=22)
ac=AgglomerativeClustering(linkage='ward',n_clusters=4)
##訓練數據
ac.fit(X)
##每個數據的分類
lables=ac.labels_
##繪圖
plt.figure(1)
plt.clf()
colors=cycle('rgcy')
fork,colinzip(range(4),colors):
##根據lables中的值是否等于k,重新組成一個True、False的數組
my_members=lables==k
##X[my_members,0]取出my_members對應位置為True的值的橫坐標
plt.plot(X[my_members,0],X[my_members,1],col+'.')
plt.show()參數linkage的取值依次為:[‘ward’,‘average’,‘complete’]優點
1、距離和規則的相似度容易定義,限制少
2、不需要預先制定聚類數
3、可以發現類的層次關系
缺點
1,計算復雜度太高
2,奇異值也能產生很大影響
3,算法很可能聚類成鏈狀4.3密度聚類之DBSCAN算法DBSCAN聚類算法是一種基于密度的算法,這一類算法通常通過根據數據的緊密程度進行分類,如果一個數據屬于該類,則在其附近一定存在屬于該類的數據點。通過緊密分布的數據集分為一類,就得到了一個聚類類別。通過將所有數據劃分為不同類別,就得到了最終的聚類類別結果。該算法將具有足夠密度的區域劃分為一類,并在具有噪聲的數據集中能劃分出不同形狀的類別,它將類定義為密度相連的點的最大集合。那么它是怎么基于密度工作的呢?在一個數據集中,我們的目標是把數據中密度相近的聚為一類。我們先從數據中選擇一點,然后按照一定規則在這里尋找密度相近的點組成一類。其他的數據點也是如此。這個規則就是根據這個隨即被選中的數據點畫一個圓圈,規定這個圓的半徑以及圓內最少包含的數據數,然后在包含在內的數據中轉移中心點,那么這個圓圈的圓心就轉移到這個內部樣本點,繼續去圈附近其它的數據點,然后一直重復上述過程,繼續增加數據點直到沒有符合條件的數據為止。基于密度這點有什么好處呢,我們知道kmeans聚類算法只能根據距離進行計算,而現實中還會有各種形狀的圖,比如環形圖,這個時候,kmeans算法就不適用。于是就想到根據數據的密度進行分類。上述基本是DBSCAN算法的主要內容了,是不是很簡單,但是我們還有三個問題沒有考慮。第一個是一些數據遠離于其他數據點,這些點不在任何一類的周圍,在DBSCAN中,我們一般將這些樣本點標記為噪音點。第二個是距離的度量問題,即如何計算某樣本和核心對象樣本的距離。在DBSCAN中,一般采用最近鄰思想,采用某一種距離度量來衡量樣本距離,比如歐式距離。這和KNN分類算法的最近鄰思想完全相同。DBSCAN這個算法包括了重要的兩個參數,這兩個參數比較難指定,公認的指定方法是以下兩個:
半徑:半徑是比較重要的一個點,如果選擇過大了,圈住點就多了,類別的個數就少了,反之圈住的點少,類別就增加,這對最后生成的結果非常重要。
MinPts:這個參數就是圈住的點的個數,也相當于是一個密度,一般我們先讓這個值盡可能地小,然后進行多次嘗試算法。下面我們對DBSCAN算法進行應用:首先我們生成一個環形數據來測試算法fromsklearn.datasets.samples_generatorimportmake_circlesimportmatplotlib.pyplotaspltfromsklearn.clusterimportDBSCANX,y_true=make_circles(n_samples=2000,factor=0.5,noise=0.1)#這是一個圓環形狀的#DBSCAN算法dbscan=DBSCAN(eps=.1,min_samples=10)dbscan.fit(X)#該算法對應的兩個參數plt.scatter(X[:,0],X[:,1],c=dbscan.labels_)plt.show()從圖中可以看出,算法劃分的方法符合我們的思維,并且基本做到了完美劃分。接下來試驗一下對于雙半月數據,算法能不能做到好的預測
fromsklearn.datasetsimportmake_moons
importmatplotlib.pyplotasplt
fromsklearn.clusterimportDBSCAN
X,y_true=make_moons(n_samples=2000,noise=0.1)
#DBSCAN算法
dbscan=DBSCAN(eps=.1,min_samples=10)
dbscan.fit(X)#該算法對應的兩個參數
plt.scatter(X[:,0],X[:,1],c=dbscan.labels_)
plt.show()從圖中看出,依舊能建立較好的模型。
測試完之后大家可能感覺沒有那么神奇,因為這種方法符合我們的思維,但是這是由計算機劃分出來的。與Kmeans算法進行對比,我們就能知道這個算法的優越之處了。fromsklearn.datasetsimportmake_moons
importmatplotlib.pyplotasplt
fromsklearn.clusterimportKMeans
X,y_true=make_moons(n_samples=2000,noise=0.1)
#DBSCAN算法
kmeans=KMeans(n_clusters=2)
kmeans.fit(X)#該算法對應的兩個參數
plt.scatter(X[:,0],X[:,1],c=kmeans.labels_)
plt.show()可以看到如果分為兩類,這種劃分方式不符合我們的思維。所以對于不同的問題要選擇合適的算法才能解決。優點1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年國家電投集團黃河上游水電開發有限責任公司-企業報告(業主版)
- 2025年自動減壓閥項目投資可行性研究分析報告
- 跨境電商服裝類創業計劃書
- 中國硫化汞項目商業計劃書
- 密封條料行業深度研究分析報告(2024-2030版)
- 2025年陽光招標采購交易平臺建設項目可行性研究報告
- 蔬菜冷鏈物流創業計劃書
- 2025年中國防火保溫裝飾板市場競爭策略及投資潛力研究預測報告
- 2025瀝青市場調研報告
- 2025年節能減排自查報告
- 2023年廣東肇慶醫學院教師招聘及其他工作人員考試真題
- 摩根大通的監管合規應對措施
- 二手房交易授權委托書樣式
- 2024年吉林省吉林市亞橋實驗中學第三次模擬數學試題(原卷版+解析版)
- 2024年四川省南充市中考物理試卷真題(含官方答案)
- 體育與健康知識模擬練習題(北京市海淀區機考題庫)
- 2021年【高考】真題政治(山東卷)(含答案)
- 2023煤礦皮帶運輸考試題庫含答案
- JTG-D40-2002公路水泥混凝土路面設計規范-PDF解密
- 近年《高等教育學》考試真題試題庫(含答案)
- 外科視角解讀-《甲狀腺結節和分化型甲狀腺癌診治指南(第二版)》
評論
0/150
提交評論