




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
前面幾章我們介紹了監督學習,包括從帶的數據中學習的回歸和分類算法。本章,我們討論無監督學習算法,聚類(clustering)。聚類是用于找出不帶數據的相似性的算法。介紹K-在第一章,機器學習基礎中,我們介紹過非監督學習的目的是從不帶的訓練數據中挖掘隱含的系。聚類,或稱為聚類分析(clsteryss)是一種分組觀察的方法,將更具相似性的樣本歸為一組,或一類(clstr),同組中的樣本比其他組的樣本更相似。與監督學習方法一樣,我們用維向量表示一個觀測值。例如,假設你的訓練數據如下圖所示:聚類通常用于探索數據集。社交網絡可以用聚類算法識別社區,然后向沒有加入社區的用戶進行推薦。在生物學領域,聚類用于找出有相似模式的組。推薦系統有時也利用聚類算法向用戶推薦產品和資源。在市場中,聚類算法用來做用戶分組。下面,我們就用K-Means聚類算法來為一個數由于具有出色的速度和良好的可擴展性,K-Meas聚類算法算得上是最著名的聚類方法。K-Meas算法是一個重復移動類中心點的過程,把類的中心點,也稱重心(cnrods)均位置,然后重新劃分其內部成員。K是算法計算出的超參數,表示類的數量;K-Means配樣本到不同的類,但是不能決定究竟要分幾個類。K必須是一個比訓練集樣本數小的正整數。有時,K-Meas的參數是類的重心位置和其內部觀測值的位置。與廣義線性模型和決策樹類似,K-Meas參數的最優解也是以成本函數最小化為目標。K-Meas成本函數如下:k∑J |i?∑k=1μk是第k個類的重心位置。成本函數是各個類畸變程度(distortions)之和。每個類的畸變程度等于35466685537In%%matplotlibimportmatplotlib.pyplotasfrommatplotlib.font_managerimportfont=FontProperties(fname=r"c:\windows\fonts\msyh.ttc",InimportnumpyasX0=np.array([7,7,X1=np.array([5,7,plt.axis([-1,9,-plt.plot(X0,X1,假設K-Mas初始化時,將第一個類的重心設置在第5個樣本,第二個類的重心設置在第1個樣本.那么我們可以把每個實例與兩個重心的距離都計算出來,將其分配到最近的類里面。計算結果如下表所示:1752573774335466147008229876855374655InC1C1=[1,4,5,9,C2=list(set(range(12))-set(C1))X0C1,X1C1=X0[C1],X1[C1]X0C2,X1C2=X0[C2],plt.axis([-1,9,-1,9])plt.plot(X0C1,X1C1,'rx')plt.plot(X0C2,X1C2,175257377433546614700822987685537InC1C1=[1,2,4,8,9,C2=list(set(range(12))-set(C1))X0C1,X1C1=X0[C1],X1[C1]X0C2,X1C2=X0[C2],plt.axis([-1,9,-1,9])plt.plot(X0C1,X1C1,'rx')plt.plot(X0C2,X1C2,175257377433546614700822987685537InC1=C1=[0,1,2,4,8,9,10,C2=list(set(range(12))-set(C1))X0C1,X1C1=X0[C1],X1[C1]X0C2,X1C2=X0[C2],plt.axis([-1,9,-1,9])plt.plot(X0C1,X1C1,'rx')plt.plot(X0C2,X1C2,再重復上面的方法就會發現類的重心不變了,K-Meas會在條件滿足的時候停止重復聚類過程。通常,條件是前后兩次迭代的成本函數值的差達到了限定值,或者是前后兩次迭代的重心位置變化達到了限定值。如果這些停止條件足夠小,K-Meas解。K-Meas最終會得到一個局部最優解,如下圖所示。這些類可能沒有實際意義,而上面和下面兩部分觀測值可能是更有合理的聚類結果。為了避免局部最優解,K-Mas通常初始時要重復運行十幾次甚至上百次。每次重復時,它會隨機的從不同的位置開始初始化。最后把最小的成本函數對應的重心位置作為初始化位置。如果問題中沒有指定K的值,可以通過肘部法則這一技術來估計聚類數量。肘部法則會把不同K值的成本函數值畫出來。隨著K值的增大,平均畸變程度會減小;每個類包含的樣本數會減少,于是樣本離其重心會更近。但是,隨著K值繼續增大,平均畸變程度的改善效果會不斷減低。K值增大過程中,畸變程度的改善效果下降幅度最大的位置對應的K值就是肘部。下面讓我們用肘部法則來確定最佳的K值。下圖數據明顯可分成兩類:Inimportnumpyascluster1=np.random.uniform(0.5,cluster2=np.random.uniform(3.5,X=np.hstack((cluster1,plt.axis([0,5,0,Infromfromsklearn.clusterimportfromscipy.spatial.distanceimportcdistK=range(1,10)meandistortions=forkinkmeans=KMeans(n_clusters=k)meandistortions.append(sum(np.min(cdist(X,kmeans.cluster_centers_,'euclidean'),axis=1))/X.shape[0])plt.plot(K,meandistortions,'bx-')低。因此肘部就是K=2。下面我們再用肘部法則來確定3個類的最佳的K值:Inimportimportnumpyasx1=np.array([1,2,3,1,5,6,5,5,6,7,8,9,7,x2=np.array([1,3,2,2,8,6,7,6,7,1,2,1,1,X=np.array(list(zip(x1,x2))).reshape(len(x1),2)plt.axis([0,10,0,10])Infromfromsklearn.clusterimportfromscipy.spatial.distanceimportcdistK=range(1,10)meandistortions=forkinkmeans=KMeans(n_clusters=k)meandistortions.append(sum(np.min(cdist(X,kmeans.cluster_centers_,'euclidean'),axis=1))/X.shape[0])plt.plot(K,meandistortions,'bx-')低。因此肘部就是K=3。個度量標準。K-Means是一種非監督學習,沒有和其他信息來比較聚類結果。但是,我們還是有算法效果評估方法稱為輪廓系數(SilhouetteCoefficient)。輪廓系數是類的密集與分散程度的評價指標。它會隨著類的規模增大而增大。彼此相距很遠,本身很密集的類,其輪廓系數較大,彼此集中,計算如下s= max(a,b)值。下面的例子運行四次K-Meas,從一個數據集中分別創建,,,個類,然后分別計算它們的輪廓系數。Inimportnumpyasfromsklearn.clusterimportfromsklearnimportplt.figure(figsize=(8,plt.subplot(3,2,x1=np.array([1,2,3,1,5,6,5,5,6,7,8,9,7,x2=np.array([1,3,2,2,8,6,7,6,7,1,2,1,1,X=np.array(list(zip(x1,x2))).reshape(len(x1),2)plt.xlim([0,10])plt.ylim([0,plt.scatter(x1,x2)colors=['b','g','r','c','m','y','k',markers=['o','s','D','v','^','p','*','+']tests=[2,3,4,5,8]subplot_counter=fortintests:subplot_counter+=1plt.subplot(3,2,subplot_counter)kmeans_model=KMeans(n_clusters=t).fit(X)fori,linenumerate(kmeans_model.labels_):plt.plot(x1[i],x2[i],color=colors[l],plt.xlim([0,plt.ylim([0,plt.title('K=%s,輪廓系數=%.03f'%(t,e(X,s.py:59:RuntimeWarning:Meanofemptyslice.warnings.warn("Meanofemptyslice.",很顯然,這個數據集包括三個類。在K3的時候輪廓系數是最大的。在K8的時候,每個類的zation)是一種將圖像中相似顏色替換成同樣顏色的有損壓縮方法。圖像量化會減少圖像的空間,由于表示不同顏色的字節減少了。下面的例子中,用聚類方法從一張中找出包含圖片大多數顏色的壓縮顏色調色板(palette),然后我們用這個壓縮顏色調色板重新生成。這個例子需要用mahotas圖像處理庫,可以通過pipinstallmahotas安裝:Inimportimportnumpyasfromsklearn.clusterimportKMeansfromsklearn.utilsimportshuffleimportmahotasasmhInoriginal_imgoriginal_img=np.array(mh.imread('mlslpic\6.6tree.png'),64)/original_dimensions=tuple(original_img.shape)width,height,depth=tuple(original_img.shape)image_flattened=np.reshape(original_img,(width*height,然后我們用K-Meas算法在隨機選擇100個顏色樣本中建立6Inimage_array_sampleimage_array_sample=shuffle(image_flattened,random_state=0)[:1000]estimator=KMeans(n_clusters=64,random_state=0)KMeans(copy_x=True,init='k-means++',max_iter=300,n_clusters=64,n_init=10, pute_distances='auto',random_state=0,tol=Incluster_assignmentscluster_assignments=Incompressed_palettecompressed_palette=compressed_img=np.zeros((width,height,compressed_palette.shape[1]))label_idx=0foriinforjincompressed_img[i][j]=label_idx+=1plt.title('OriginalImage')plt.title('CompressedImage')在下面的例子中,聚類和分類組合起來研究一個半監督學習問題。你將對不帶的數據進行假設你有一只貓和一條狗。再假設你買了一個智能,表面上看是用來給人打的,其實你只是用來給貓和狗拍照。你的拍得很棒,因此你覺得你的朋友和同事一定會喜歡它們。而你知道一部分人只想看貓的,一部分人只想看狗的,但是要把這些分類太麻煩了。下面我們就做一個半監督學習系統來分別貓和狗的。回想一下第三章,特征抽取與處理的內容,有一個原始的方法來給分類,是用的像素密度值或亮度值作為解釋變量。和我們前面進行文本處時的向量不同,的特征向量不是稀疏的。另外,這個方法對的亮度,尺寸,旋轉的變化都十分敏感。在第三章,特征抽取與處理們還介紹了IT和SURF描述器,用來描述的點,這類方法對的亮度,尺寸,旋轉變化都不敏感。在下面的例子中,用聚類算法理這些描述器來學習的特征。每個元素將被編碼成從中抽取的,被分配到同一個類的描述器的數量。這種方法有時也稱為視覺詞袋(bag-of-features)表示法,由于這個類的集合與詞袋模型里的詞匯表類似。使用Kaggle'sDogsvs.Catscompetition( kagglecom/c/dogs-vs-cats/data)里面的和數據。注意,有不同的尺寸;由于我們的特征向量不用像素表示,所有我們也不需要將所有In[importnumpyasnpimportimportnumpyasnpimportmahotasasmhfrommahotas.featuresimportfromsklearn.linear_modelimportfromsklearn.metricsimportfromsklearn.clusterimportimport首先,我們加載,轉換成灰度圖,再抽取SURF描述器。SURF描述器與其他類似的特相比可以更快的被提取,但是從200張中抽取描述器依然是很費時間的。In[all_instance_filenamesall_instance_filenames=[]all_instance_targets=[]forfinglob.glob('cats-and-dogs-img/*.jpg'):target=1if'cat'infelse0surf_features=[]counter=0forfinall_instance_filenames:print('Readingimage:',f)image=mh.imread(f,as_grey=True)surf_features.append(surf.surf(image)[:,5:])train_len=int(len(all_instance_filenames)*.60)X_train_surf_features=np.concatenate(surf_features[:train_len])X_test_surf_feautres=np.concatenate(surf_features[train_len:])y_train=all_instance_targets[:train_len]y_test=然后我們把抽取的描述器分成300個類。用MiniBatchKeans類實現,它是K-Meas算法的變種,每次迭代都隨機抽取樣本。由于每次迭代它只計算這些被隨機抽取的一小部分樣本與重心的距離,因此MiniBachKeans可以更快的聚類,但是它的畸變程度會更大。實際上,計算結果差不多:In[n_clustersn_clusters=print('Clustering',len(X_train_surf_features),'features')estimator=MiniBatchKMeans(n_clusters=n_clusters)In[X_trainX_train=forinstanceinsurf_features[:train_len]:clusters=estimator.predict(instance)features=np.bincount(clusters)iflen(features)<features=np.append(features,np.zeros((1,)X_test=f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省無錫市積余中學2025年初三年級8月摸底考試數學試題含解析
- 重慶市江津區2025年初三第五次適應性訓練數學試題試卷含解析
- 重慶市重點中學2025年初三下學期期末仿真模擬生物試題含解析
- 互聯網時代干部培訓策略與實施
- 棗強中學高一上學期第三次月考生物試題
- 目標控制程序培訓資料
- 2025租賃合同范本:測量儀器出租合同
- 2025筆記本電腦買賣合同
- 2025財經大學服務合同(教室租賃類)
- 2025年建筑項目基礎施工合同范本
- 導線的連接精品課件
- 論提高行政效率的途徑 開題報告
- 059.商業計劃書和可行性報告精制食油廠年產萬噸精制山茶油項目可行性研究報告
- 米度盾構導向系統
- [說明]心血管內科(心內科)_見習教案_6_動脈粥樣硬化和冠狀動脈粥樣硬化性心臟病
- Q∕GDW 11257.3-2020 熔斷器技術規范 第3部分:跌落式熔斷器
- 汽車焊接夾具設計外文文獻翻譯
- 濃縮機的選擇與計算
- 滬教版六年級下冊單詞表
- 紅星美凱龍租賃合同
- 最新投標書密封條
評論
0/150
提交評論