步驟:
1)收集資料
2)準備資料
3)分析資料
4)訓練資料
5)測試演算法
6)適用演算法
對未知類別屬性的資料集中的每個點一次執行以下操作:
1)計算一直類別資料集中的點與當前點之間的距離
2)按照距離遞增次序排序
3)選取與當前點距離最小的k個點
4)確定前k個點所在類別出現的頻率
5)返回前k個點出現頻率最高的類別作為當前點的**分類
knn.py檔案**
#coding:utf-8
from numpy import *;#引入科學計算包
import operator #引入科學計算包
#建立資料集
#dataset:訓練樣本集
#labels:標籤向量
defcreatedataset
(): group = array([[1.0,1.1],[1.0,1.0],[0.0,0.0],[0.0,0.1]])
labels = ['a','a','b','b']
return group, labels
classify.py檔案**
# -*- coding: utf-8 -*-
from numpy import * #引入科學計算包
import operator #引入科學計算包
#分類演算法核心
#inx:用於分類的輸入向量。即將對其進行分類。
#dataset:訓練樣本集
#labels:標籤向量
#k:選取的離當前點距離最短的點個數k
defclassify0
(inx, dataset,labels,k):
datasetsize = dataset.shape[0] #得到陣列的行數。即知道有幾個訓練資料
diffmat = tile(inx, (datasetsize, 1)) - dataset # tile:numpy中的函式。tile將原來的乙個陣列,擴充成了4個一樣的陣列。diffmat得到了目標與訓練數值之間的差值。
sqdiffmat = diffmat ** 2
# 各個元素分別平方
sqdistances = sqdiffmat.sum(axis=1) # 一位陣列相加,即得到了每乙個距離的平方
distances = sqdistances ** 0.5
# 開方,得到距離。
sorteddistindicies = distances.argsort() # 公升序排列返回對應的原始位置值
# 選擇距離最小的k個點。
classcount = {} #定義字典
for i in range(k):
voteilabel = labels[sorteddistindicies[i]]
classcount[voteilabel] = classcount.get(voteilabel, 0) + 1
#dict.get(key,defautnonereturnvalue)
# 排序
sortedclasscount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=true) #第乙個屬性是字典迭代 key是定義比較的維度 比較第1維度的值大小 reverse是排序方式 false預設為生序排序 true為降序排序
return sortedclasscount[0][0] #返回目標標籤中和目標向量最近的k個值對應的標籤出現頻率最大的值作為**值
測試呼叫class2test.py檔案
import knn
import classify
group,labels = knn.createdataset()
inx =[0.0,0.0]
result = classify.classify0(inx,group,labels,2)
print result
機器學習實戰 第二章 K 近鄰演算法
本系列目的在於總結每乙個分類器的特點 優點 缺點 使用資料型別 使用時的注意事項等 相關 自己搜。python 建議使用2.7 python常用函式庫 numpy scikit learn等 python整合環境 anaconda 優點 1 對異常值不敏感 2 無資料輸入假設 缺點 1 計算複雜度高...
《機器學習實戰》第二章 k 近鄰演算法 筆記
在看這一章的書之前,在網上跟著博主jack cui的部落格學習過,非常推薦。python3 機器學習實戰 學習筆記 一 k 近鄰演算法 史詩級乾貨長文 講述的非常細緻,文字幽默有趣,演算法細節也講述的非常清楚,較書中而言還有sklearn調庫的補充內容。因此,在這裡,我只總結自己的筆記。2.k 近鄰...
第二章 演算法
本章內容了解即可。如果大家對資料結構完全不了解,我建議你先去看一下b站上郝斌老師的課程。演算法是解決特定問題求解步驟的描述,在計算機中表現為指令的優先序列,並且每條指令表示乙個或多個操作。只聽資料結構課程,當然可以,但是聽完後你可能沒有什麼感覺,因為你不知道他是幹嘛的。但是如果配合演算法來講解,你就...