注:本章只介紹分類問題的k近鄰演算法。
t
=t = \
t=其中,xi∈
x⊂rn
x_i \in\mathcal\subset r^n
xi∈x⊂
rn為例項的特徵變數,yi∈
y=
y_i \in \mathcal =\
yi∈y=
為例項的類別,i=1
,2,3
,...
,n
i=1,2,3,...,n
i=1,2,
3,..
.,n;例項特徵變數 xxx。
k值的選擇
分類決策規則
構造演算法:
搜尋演算法:
在樹中找到包含目標點x的葉結點:從根結點出發,遞迴的訪問當前結點對應子樹,直到當前的子節點為葉結點為止。
以此葉結點為「當前最近點」
遞迴回退,對於每乙個結點規則如下:
如果該節點的例項點比當前最近距離點距離目標更近,則該例項點「為當前最近點」
對於乙個包含最近點的區域,要檢查該節點的父節點和兄弟節點是否存在更近的點。如果存在的區域包含距目標點更近的點,移動到另乙個自己點上,之後繼續遞迴搜尋。不相交時,回退上一級。
回到根結點時,搜尋結束
# numpy實現k近鄰法(線性掃瞄)
'''資料集:
(1.0,1.1) a
(1.0,1.0) a
(0,0) b
(0,0.1) b
實驗資料:(0.7,0.7)
k = 1
'''from numpy import
*import operator
defcreatedataset()
: group = array([[
1.0,
1.1],[
1.0,
1.0],[
0,0]
,[0,
0.1]])
labels =
['a'
,'a'
,'b'
,'b'
]return group,labels
defclassify
(inx,dataset,labels,k)
: datasetsize = dataset.shape[0]
diffmat = tile(inx,
(datasetsize,1)
)-dataset
sqdiffmat = diffmat**
2 sqdistances = sqdiffmat.
sum(axis =1)
distances = sqdistances**
0.5 sorteddistindicies = distances.argsort(
) classcount =
for i in
range
(k):
voteilabel = labels[sorteddistindicies[i]
] classcount[voteilabel]
= classcount.get(voteilabel,0)
+1sortedclasscount =
sorted
(classcount.items(
),key = operator.itemgetter(1)
,reverse =
true
)return sortedclasscount[0]
[0]group,labels = createdataset(
)print
(group)
print
(labels)
ina =
[0.7
,0.7
]labelofa = classify(ina,group,labels,1)
print
(labelofa)
input : 資料集dataset
output: 二叉樹kdtree(根結點treeroot)
-------
1 struct node* treeroot
2 //樹的結點的個數並非資料集個數
3 //node的結構為:左子節點指標left,右子節點指標right,item陣列data
4 //item的結構為:int陣列x
3 treenode->data = dataset
4 void cuttheset(node* root,int divisionnum, int mid)
5
統計學習方法 3K近鄰法
1968年由cover和hart提出。k近鄰法假設給定乙個訓練資料集,其中的例項類別已定。分類時,對新的例項,根據其k個最近鄰的訓練例項的類別,通過多數表決等方式進行 k近鄰法實際上利用訓練資料集對特徵向量空間進行劃分,並作為其分類的 模型 k近鄰法三要素 k值得選擇 距離度量和分類決策規則。lp距...
《統計學習方法》筆記(3) k近鄰
k近鄰 knn 是相對基本的機器學習方法,特點是不需要建立模型,而是直接根據訓練樣本的資料對測試樣本進行分類。1 k近鄰的演算法?演算法對測試樣本進行分類的一般過程如下 1 根據給定的k值,搜尋與測試樣本距離最近的k個訓練樣本 2 統計k個樣本對應的每種分類數量 3 根據每種分類的數量投票決定樣本點...
統計學習方法 k近鄰法
k近鄰法 knn 是一種基本的分類與回歸方法 分類這種需求,滲透到我們生活的方方面面 分類演算法可以幫助我們完成這些繁瑣的操作,並根據我們的要求不斷修正分類結果。分類演算法其實蠻多的,這裡順著書本順序,詳細講解knn演算法,再與k means k means 演算法進行簡單對比。k近鄰法是這樣乙個過...