天天看點

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

  資料挖掘方法的提出,讓人們有能力最終認識資料的真正價值,即蘊藏在資料中的資訊和知識。資料挖掘 (DataMiriing),指的是從大型資料庫或資料倉庫中提取人們感興趣的知識,這些知識是隐含的、事先未知的潛在有用資訊,資料挖掘是目前國際上,資料庫和資訊決策領域的最前沿研究方向之一。是以分享一下很久以前做的一個小研究成果。也算是一個簡單的資料挖掘處理的例子。

資料挖掘一般由以下幾個步驟: 

(l)分析問題:源資料資料庫必須經過評估确認其是否符合資料挖掘标準。以決定預期結果,也就選擇了這項工作的最優算法。 

(2)提取、清洗和校驗資料:提取的資料放在一個結構上與資料模型相容的資料庫中。以統一的格式清洗那些不一緻、不相容的資料。一旦提取和清理資料後,浏覽所建立的模型,以確定所有的資料都已經存在并且完整。

(3)建立和調試模型:将算法應用于模型後産生一個結構。浏覽所産生的結構中資料,确認它對于源資料中“事實”的準确代表性,這是很重要的一點。雖然可能無法對每一個細節做到這一點,但是通過檢視生成的模型,就可能發現重要的特征。 

(4)查詢資料挖掘模型的資料:一旦建立模型,該資料就可用于決策支援了。 

(5)維護資料挖掘模型:資料模型建立好後,初始資料的特征,如有效性,可能發生改變。一些資訊的改變會對精度産生很大的影響,因為它的變化影響作為基礎的原始模型的性質。因而,維護資料挖掘模型是非常重要的環節。 

  聚類分析是資料挖掘采用的核心技術,成為該研究領域中一個非常活躍的研究課題。聚類分析基于”物以類聚”的樸素思想,根據事物的特征,對其進行聚類或分類。作為資料挖掘的一個重要研究方向,聚類分析越來越得到人們的關注。聚類的輸入是一組沒有類别标注的資料,事先可以知道這些資料聚成幾簇爪也可以不知道聚成幾簇。通過分析這些資料,根據一定的聚類準則,合理劃分記錄集合,進而使相似的記錄被劃分到同一個簇中,不相似的資料劃分到不同的簇中。

Relief為一系列算法,它包括最早提出的Relief以及後來拓展的ReliefF和RReliefF,其中RReliefF算法是針對目标屬性為連續值的回歸問題提出的,下面僅介紹一下針對分類問題的Relief和ReliefF算法。

Relief算法最早由Kira提出,最初局限于兩類資料的分類問題。Relief算法是一種特征權重算法(Feature weighting algorithms),根據各個特征和類别的相關性賦予特征不同的權重,權重小于某個門檻值的特征将被移除。Relief算法中特征和類别的相關性是基于特征對近距離樣本的區分能力。算法從訓練集D中随機選擇一個樣本R,然後從和R同類的樣本中尋找最近鄰樣本H,稱為Near Hit,從和R不同類的樣本中尋找最近鄰樣本M,稱為NearMiss,然後根據以下規則更新每個特征的權重:如果R和Near Hit在某個特征上的距離小于R和Near Miss上的距離,則說明該特征對區分同類和不同類的最近鄰是有益的,則增加該特征的權重;反之,如果R和Near Hit在某個特征的距離大于R和Near Miss上的距離,說明該特征對區分同類和不同類的最近鄰起負面作用,則降低該特征的權重。以上過程重複m次,最後得到各特征的平均權重。特征的權重越大,表示該特征的分類能力越強,反之,表示該特征分類能力越弱。Relief算法的運作時間随着樣本的抽樣次數m和原始特征個數N的增加線性增加,因而運作效率非常高。具體算法如下所示:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

由于Relief算法比較簡單,但運作效率高,并且結果也比較令人滿意,是以得到廣泛應用,但是其局限性在于隻能處理兩類别資料,是以1994年Kononeill對其進行了擴充,得到了ReliefF作算法,可以處理多類别問題。該算法用于處理目标屬性為連續值的回歸問題。ReliefF算法在處理多類問題時,每次從訓練樣本集中随機取出一個樣本R,然後從和R同類的樣本集中找出R的k個近鄰樣本(near Hits),從每個R的不同類的樣本集中均找出k個近鄰樣本(near Misses),然後更新每個特征的權重,如下式所示:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 
【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

Relief系列算法運作效率高,對資料類型沒有限制,屬于一種特征權重算法,算法會賦予所有和類别相關性高的特征較高的權重,是以算法的局限性在于不能有效的去除備援特征。 

由于聚類算法是給予資料自然上的相似劃法,要求得到的聚類是每個聚類内部資料盡可能的相似而聚類之間要盡可能的大差異。是以定義一種尺度來衡量相似度就顯得非常重要了。一般來說,有兩種定義相似度的方法。第一種方法是定義資料之間的距離,描述的是資料的差異。第二種方法是直接定義資料之間的相似度。下面是幾種常見的定義距離的方法: 

1.Euclidean距離,這是一種傳統的距離概念,适合于2、3維空間。 

2.Minkowski距離,是Euclidean距離的擴充,可以了解為N維空間的距離。 

聚類算法有很多種,在需要時可以根據所涉及的資料類型、聚類的目的以及具的應用要求來選擇合适的聚類算法。下面介紹 K-means聚類算法: 

K-means算法是一種常用的基于劃分的聚類算法。K-means算法是以k為參數,把n個對象分成k個簇,使簇内具有較高的相似度,而簇間的相似度較低。K-means的處理過程為:首先随機選擇k個對象作為初始的k個簇的質心;然後将餘對象根據其與各個簇的質心的距離配置設定到最近的簇;最後重新計算各個簇的質心。不斷重複此過程,直到目标函數最小為止。簇的質心由公式下列式子求得:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

在具體實作時,為了防止步驟2中的條件不成立而出現無限循環,往往定義一個最大疊代次數。K-means嘗試找出使平方誤差函數值最小的k個劃分。當資料分布較均勻,且簇與簇之間差別明顯時,它的效果較好。面對大規模資料集,該算法是相對可擴充的,并且具有較高的效率。其中,n為資料集中對象的數目,k為期望得到的簇的數目,t為疊代的次數。通常情況下,算法會終止于局部最優解。但用,例如涉及有非數值屬性的資料。其次,這種算法要求事先給出要生成的簇的數目k,顯然這對使用者提出了過高的要求,并且由于算法的初始聚類中心是随機選擇的,而不同的初始中心對聚類結果有很大的影響。另外,K-means算法不适用于發現非凸面形狀的簇,或者大小差别很大的簇,而且它對于噪音和孤立點資料是敏感的。

本文實驗資料來自著名的UCI機器學習資料庫,該資料庫有大量的人工智能資料挖掘資料,網址為:http://archive.ics.uci.edu/ml/。該資料庫是不斷更新的,也接受資料的捐贈。資料庫種類涉及生活、工程、科學各個領域,記錄數也是從少到多,最多達幾十萬條。截止2010年底,資料庫共有199個資料集,每個資料集合中有不同類型、時間的相關資料。可以根據實際情況進行選用。 

本文選用的資料來類型為:Breast Cancer Wisconsin (Original) Data Set,中文名稱為:威斯康星州乳腺癌資料集。這些資料來源美國威斯康星大學醫院的臨床病例報告,每條資料具有11個屬性。下載下傳下來的資料檔案格式為“.data”,通過使用Excel和Matlab工具将其轉換為Matlab預設的資料集儲存,友善程式進行調用。

 下表是該資料集的11個屬性名稱及說明:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

對上述資料進行轉換後,以及資料說明可知,可以用于特征提取的有9個名額,樣品編号和分類隻是用于确定分類。本文的資料處理思路是先采用ReliefF特征提取算法計算各個屬性的權重,剔除相關性最小的屬性,然後采用K-means聚類算法對剩下的屬性進行聚類分析。

本文在轉換資料後,首先進行了預處理,由于本文的資料範圍都是1-10,是以不需要歸一化,但是資料樣本中存在一些不完整,會影響實際的程式運作,經過程式處理,将這一部分資料删除。這些不完整的資料都是由于實際中一些原因沒有登記或者遺失的,以“?”的形式代表。 

本文采用Matlab軟體進行程式設計計算。根據第三章提到的ReliefF算法過程,先編寫ReliefF函數程式,用來計算特征屬性,再編寫主程式,在主程式中調用該函數進行計算,并對結果進行分析,繪圖,得到有用的結論。

程式統一在最後貼出。

本文采用3.1節中的ReliefF算法來計算各個特征的權重,權重小于某個門檻值的特征将被移除,針對本文的實際情況,将對權重最小的2-3種剔除。由于算法在運作過程中,會選擇随機樣本R,随機數的不同将導緻結果權重有一定的出入,是以本文采取平均的方法,将主程式運作20次,然後将結果彙總求出每種權重的平均值。如下所示,列為屬性編号,行為每一次的計算結果: 

下面是特征提取算法計算的特征權重趨勢圖,計算20次的結果趨勢相同:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

上述結果是否運作主程式所得的計算結果,看起來不直覺,下面将其按照順序繪圖,可以直覺顯示各個屬性權重的大小分布,如下圖所示:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

  

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

按照從小到大順序排列,可知,各個屬性的權重關系如下:

  屬性9<屬性5<屬性7<屬性4<屬性2<屬性3<屬性8<屬性1<屬性6

我們標明權重閥值為0.02,則屬性9、屬性4和屬性5剔除。

從上面的特征權重可以看出,屬性6裸核大小是最主要的影響因素,說明乳腺癌患者的症狀最先表現了裸核大小上,将直接導緻裸核大小的變化,其次是屬性1和屬性8等,後幾個屬性權重大小接近,但是從多次計算規律來看,還是能夠說明其中不同的重要程度,下面是着重對幾個重要的屬性進行分析。下面是20次測試中,裸核大小(屬性6)的權重變化:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

從上圖中可以看到該屬性權重大部分在0.22-0.26左右,是權重最大的一個屬性。下面看看屬性1的權重分布:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

塊厚度屬性的特征權重在0.19-25左右變動,也是權重極高的一個,說明該特征屬性在乳腺癌患者檢測名額中是相當重要的一個判斷依據。進一步分析顯示,在單獨對屬性6,和屬性1進行聚類分析,其成功率就可以達到91.8%。本文将在下節中的Kmeans算法中詳細介紹。

上一節中通過ReliefF算法對資料集的分析,可以得到屬性權重的重要程度,這些可以對臨床診斷有一些參考價值,可以用來對實際案例進行分析,可以盡量的避免錯誤診斷,并提高診斷的速度和正确率。下面将通過K-menas聚類分析算法對資料進行分析。本小節将分為幾個步驟來進行對比,确定聚類分析算法的結果以及與ReliefF算法結合的結果等。

下面将采用Kmeans算法單獨對資料集進行分析。Matlab中已經包括了一些正常資料挖掘的算法,例如本文所用到的K-means算法。該函數名為kmeans,可以對資料集進行聚類分析。首先本文對乳腺癌資料集的所有屬性列(除去身份資訊和分類列)直接進行分類,由于資料集結果隻有2種類型,是以首先進行分2類的測試,結果如下:總體将683條資料分成了2類,總體的正确率為94.44%,其中第一類的正确率為93.56%,第二類的正确率為96.31%。下面是分類後對按照不同屬性的繪制的屬性值分布圖: 

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 
【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

限于篇幅,隻選擇了上述3個特征屬性進行圖像繪制,從結果來看, 可以很直覺的觀察到K-means算法分類後的情況,第一類與第一類的分類界限比較清晰。但是不容易觀察到正确和錯誤的情況。下表是分類結果中各個屬性的聚類中心:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

從K-means算法的效果來看,能夠很準确的将資料集進行分類。一方面是由于該資料集,可能是該案例特征比較明顯,另一方面是由于K-menas算法對這種2類的作用較大。 

單從分類正确率和結果方面來看,K-mens算法已經完全可以對乳腺癌資料集做出非常準确的判斷。但是考慮ReliefF算法對屬性權重的影響,本小節将結合ReliefF算法和K-means算法來對該資料集進行分析,一方面得到處理該問題一些簡單的結論,另外一方面可以得到一些對醫學處理資料的方法研究方法。 

首先,本小節首先根據3.2節中的一些結論,根據不同屬性的權重來對k-menas分類資料進行預處理,以得到更精确的結論和對該資料更深度的特征規律。 

從3.2節中,得知屬性9<屬性5<屬性7<屬性4<屬性2<屬性3<屬性8<屬性1<屬性6,根據ReliefF算法原理本文可以認為,對于這種屬性6和屬性1重要的特征屬性,應該對分類起到更加到的作用。是以下面将單獨對各個屬性的資料進行分類測試,詳細結果如下表:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

總的分類正确率中,屬性9最低,屬性6最高,這與ReliefF算法測試的結果大緻相似,但是由于ReliefFar算法中間部分權重接近,是以也區分不明顯。說明特征屬性權重的判斷對分類是有影響的。上述單獨分類中,隻将需要分類的列資料取出來,輸入到K-means算法中即可。由于輸入資料的變化,K-means分類時結果肯定是有差距的,是以單獨從一個屬性判斷其類型是不可靠的。下面選擇了單個分類時最高和最低的情況,繪制其分類屬性值分布圖,如下圖所示:

【原創】資料挖掘案例——ReliefF和K-means算法的醫學應用 1.資料挖掘與聚類分析概述 2.特征選擇與聚類分析算法3.一個醫學資料分析執行個體 4.主要的Matlab源代碼 

下面将對特征權重按照從大到小的順序,選擇相應的資料,進行聚類分析,結論如下:

1.直接選擇全部9種屬性,分類成功率為:94.44%;

2.選擇屬性6,屬性1,分類成功率為:91.36%;

3.選擇屬性6,1,8,3,分類成功率為:93.85%;

4.選擇屬性6,1,8,3,2,4,分類成功率為:94.48%;

5.選擇屬性6,1,8,3,2,4,5,7,分類成功率為:95.02%;

從上面的測試可以看出,選擇特征權重最大的6個屬性,其正确率就達到選擇所有屬性的情況,是以我們可以認為特征權重最小的幾個屬性在乳腺癌診斷過程的作用實際可能比較小,實際有可能造成反作用,也就是這幾個屬性值與乳腺癌沒有必然的聯系。這一點可以給診斷參考,或者引起注意,進行進一步的研究,确認。 

雖然從上述2小節的實驗中可以得到該資料集的大部分結果和結論。但是為了将相同類型的資料更加準确的分出,下面将嘗試分為3類的情況。一方面,可以分析在乳腺癌良性和惡性情況下的顯著特征屬性;另一方面也可以根據此結果找到更加合理的解決方法。 

還是采用Matlab中的kmeans函數,将分類數改為3,由于分為3類後資料類型增多,判斷較複雜,是以手動對資料進行分析,将所有特征屬性加入進去。運作結果如下,測試資料中總共683條,其中良性共444條,惡性共239條: 

1.分為第一類的記錄中,良性占96.88%; 

2.分為第二類的記錄中,惡性占 100% ; 

3.分為第三類的記錄中,惡性占 92%; 

根據上述結果可以認為第一類為良性的分類,第二類為惡性分類,第三類為混合類。對于混合類,說明裡面的資料較其他資料更加接近于偏離病例的典型資料,是以進一步分析在第一類中和第二類中的分類正确率: 

1.第一類為良性,共448條資料,分類正确率為96.88%;

2.第二類為惡性,共99條資料,分類正确率為 100% ; 

3.第三類為混合類,共136條資料 

是以單獨從分類後的正确率來看,效果有提高,說明對典型的病例資料分類更準确,但是對于第三類資料,而無法區分,是以這種情況下,其意義不在于分類的整體正确率,而在于在一些特殊情況下,可以根據一些重要的特征屬性值就可以為患者确診,進而提高效率和準确率,減少誤診斷的幾率。 

上面是将所有屬性進行K-means變換,下面将結合ReliefF算法,先去掉一部分特征權重較小的特征屬性後,再進行K-means處理。根據4.2節中的結論,下面提取權重最大的6個屬性進行測試,分别是:屬性6,屬性 1,屬性 8,屬性 3,屬性2,屬性 4。 

1.第一類為良性,共281條資料,分類正确率為97.51% ; 

2.第二類為惡性,共211條資料,分類正确率為 97.16% ; 

3.第三類為混合類,共191條資料 

是以,對比可以看到,雖然良性的正确率增加了,但是檢測出的資料減少了。第三類混合的數量也增多了,說明提出了特種屬性較小的屬性,可以更加容易區分極端的病例資料,對極端資料的檢測更加準确。 

ReliefF輔助函數,尋找最近的樣本數K