1. 程式人生 > >使用Orange進行資料探勘之分類(2)------KNN分類

使用Orange進行資料探勘之分類(2)------KNN分類

knn基本概念

knn把每個樣例看做是空間上的一個點,給定一個測試樣例,

使用適當的鄰近性度量演算法,計算出該點與訓練集中其他點的鄰近度。選擇K個最相近的點。

在選擇出的K個樣例中,比例最好的類就是測試樣例的類。

從以上描述中可以看出,如果k選擇的太小,該演算法容易受到噪聲的影響,而產生過度擬合的影響,然而如果選擇的過大,可能造成誤分類。

演算法描述:

k是最近鄰數目,D是訓練樣例的集合,z是測試樣例
for 樣例 in 訓練樣例集合:
     z和每個樣例的相似度
找到k個最相近的樣例集合
k個樣例中類標號最多的類,就是測試樣例的類標號。

Orange中的knn

以iris資料為例:

import Orange
#載入資料
iris = Orange.data.Table('iris')
knn = Orange.classification.knn.kNNLearner(iris, k=10)

for i in iris:
     #將預測結果和實際結果不同的部分輸出
     if i.getclass()!=knn(i):
         print i.getclass(),knn(i)

輸出結果如下:
Iris-versicolor Iris-virginica
Iris-versicolor Iris-virginica
Iris-virginica Iris-versicolor
Iris-virginica Iris-versicolor
Iris-virginica Iris-versicolor

該資料集共有150個例項,從結果看有5個預測結果是錯誤的。

下面以圖形化的方式來比較樸素貝葉斯分類、KNN分類、s。

下圖展現了用orange圖形介面的方法:


下圖給出了這一比較結果:

從上面的結果中可以看出knn和其他幾個方法基本相當。

參考資料

 資料探勘導論 http://book.douban.com/subject/5377669/