天天看點

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

本節書摘來自異步社群出版社《寫給程式員的資料挖掘實踐指南》一書中的第5章,第5.7節,作者:【美】ron zacharski(紮哈爾斯基),更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

現在到考察一個新資料集的時候了,該資料集是美國國立糖尿病、消化和腎髒疾病研究所(united states national institute of diabetes and digestive and kidney diseases,簡稱niddk)所開發的皮馬印第安人糖尿病資料集(pima indians diabetes data set)。

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

令人吃驚的是,有超過30%的皮馬人患有糖尿病。與此形成對照的是,美國糖尿病的患病率為8.3%,中國為4.2%。

資料集中的每個執行個體表示一個超過21歲的皮馬女性的資訊,她屬于以下兩類之一,即5年内是否患過糖尿病。每個人有8個屬性。

屬性:

1.懷孕次數。

2.2小時口服葡萄糖耐量測試中得到的血糖濃度。

3.舒張期血壓(mm hg)。

4.三頭肌皮脂厚度(mm)。

5.2小時血清胰島素(mu u/ml)。

6.身體品質指數(體重kg/(身高in m)^2)。

7.糖尿病家系作用。

8.年齡。

下面給出了一個資料的例子(最後一清單示類别:0表示沒有糖尿病,1表示有糖尿病)。

2  99  52  15  94  24.6  0.637  21  0

3  83  58  31  18  34.3  0.336  25  0

5  139  80  35  160  31.6  0.361  25  1

3  170  64  37  225  34.5  0.356  30  1

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

是以,上例中第一位女性有過兩個孩子,血糖為99,舒張期血壓為52,等等。

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

在本書網站上有個兩個檔案,其中zip檔案pimasmall.zip中包含100個執行個體,它們分到10個檔案(桶)中。而pima.zip檔案則包含393個執行個體。當使用上一章建構的近鄰分類器對pimasmall資料集進行10折交叉驗證時,會得到如下結果:

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

提示:

python函數heapq.nsmallest(n,list)會傳回最小的n個元素構成的清單(list)。

下面是你要完成的任務:

從本書網站下載下傳分類器的代碼,實作knn算法。此時需要修改類中的initializer方法以便加入另一個參數k:

該方法的簽名看起來類似于def knn(self, itemvector):

它應該使用self.k(記住要在init方法中設定該值)并傳回類别結果(在pima癌症資料集上為0或1),還應該修改tenfold過程以便将k傳遞給initializer。

《寫給程式員的資料挖掘實踐指南》——5.7一個新資料集及挑戰

我對init_的修改十分簡單:

我的knn方法如下:

我對tenfold的一點點修改如下:

繼續閱讀