一、基本原理
存在乙個樣本資料集合(也稱訓練樣本集),並且樣本集中每個資料都存在標籤。輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料(最近鄰)的分類標籤。
我們一般只選擇樣本集中前k(k通常是不大於20的整數)個最相似的資料,最後選擇k個最相似資料中出現次數最多的分類,作為新資料的分類。
二、演算法流程
1)計算已知類別資料集中的點與當前點之間的距離;
2)按照距離遞增次序排序;
3)選取與當前點距離最小的k個點;
4)確定前k個點所在類別的出現頻率;
5)返回前k個點出現頻率最高的類別作為當前點的**分類。
三、演算法的特點
優點:精度高、對異常值不敏感、無資料輸入假定。
缺點:計算複雜度高、空間複雜度高。
適用資料範圍:數值型和標稱型。
四、python**實現
1、建立資料集
def create_data_set():
group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
labels = ['a', 'a', 'b', 'b']
return group, labels
2、實施knn演算法
##############################
#功能:將每組資料劃分到某個類中
#輸入變數:inx, data_set,labels,k
# 分類的向量,樣本資料,標籤,k個近鄰的樣本
#輸出變數:sorted_class_count[0][0] 選擇最近的類別標籤
##############################
def classify0(inx, data_set, labels, k):
data_set_size = data_set.shape[0] # 獲得陣列的行數
# 利用tile(inx, (data_set_size, 1)),在原來的基礎上再構造data_set_size*1的inx
# 每行資料相當於某個向量點的座標
# 對每行資料進行求和,得到乙個data_set_size*1的矩陣
# 最後計算歐式距離
diff_mat = tile(inx, (data_set_size, 1))-data_set
sq_diff_mat = diff_mat**2
sq_distances = sq_diff_mat.sum(axis=1)
distances = sq_distances**0.5
# argsort函式返回的是陣列值從小到大的索引值
sorted_dist_indicies = distances.argsort()
class_count = {}
for i in xrange(k):
vote_label = labels[sorted_dist_indicies[i]]
# get相當於一條if...else...語句
# 如果引數vote_label不在字典中則返回引數0,如果vote_label在字典中則返回vote_label對應的value值
class_count[vote_label] = class_count.get(vote_label, 0) + 1
# items以列表方式返回字典中的鍵值對,iteritems以迭代器物件返回鍵值對,而鍵值對以元組方式儲存,即這種方式[(), ()]
# operator.itemgetter(0)獲取物件的第0個域的值,即返回的是key值
# operator.itemgetter(1)獲取物件的第1個域的值,即返回的是value值
# operator.itemgetter定義了乙個函式,通過該函式作用到物件上才能獲取值
# reverse=true是按降序排序
sorted_class_count = sorted(class_count.iteritems(), key=operator.itemgetter(1), reverse=true)
return sorted_class_count[0][0]
3、**測試
def main():
group, labels = create_data_set()
sorted_class_labels = classify0([0, 0], group, labels, 3)
print 'sorted_class_labels=', sorted_class_labels
if __name__ == '__main__':
main()
機器學習 k近鄰演算法 kNN
knn演算法通過計算當前測試樣本與離它最近的k個點的距離,進行投票,得到它最有可能的分類結果。首先來看看機器學習演算法的基本流程 由此可見knn演算法的特點 1.k近鄰演算法是非常特殊的,可以認為是沒有模型的演算法。2.為了和其他演算法統一,可以認為訓練資料集就是模型本身。這也是scikit lea...
機器學習 k 近鄰演算法(KNN)
簡單地說,k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用範圍 數值型和標稱型。對於該演算法更通俗的說法,拿到乙個資料a,計算其與資料集c中的資料的距離,通過使用特徵值進行求歐式距離。然後排序取出其前k相鄰的...
機器學習 KNN演算法 K 近鄰
如何計算測試樣本與y已分類樣本之間的距離 如何選擇k值 k值過大或過小的影響 k值過小 例如k 1,結果對近鄰的例項點非常敏感,容易受到雜訊影響,發生過擬合 k值過大 可以一定程度上避免上述情況,但是現有訓練集的訓練誤差會增大,輸入不相似的訓練例項會導致 錯誤 適合分類問題,有較高的精確度,對異常值...