from numpy import *
import operator
def createdataset():
# 建立資料集
group = array([[1.0,1.1],[1.0,1.1],[0,0],[0,0.1]])
labels = ['a','a','b','b']
return group,labels
def classify0(inx,dataset,labels,k):
# inx: 要測試的資料[0,0],[1,1]等
# dataset:資料集
# labels:資料集的標籤
# k:選取的前幾個標籤
# 距離計算
datasetsize = dataset.shape[0]
# print(dataset.ndim) 陣列維數 比如一維陣列和二維陣列
# dataset.shape[0]:行數 dataset.shape[1]:列數
# dataset 是4行2列 dataset.shape是元組 dataset.shape = (4,2)
diffmat = tile(inx, (datasetsize,1))- dataset
# tile(a,reps) a指待輸入陣列 reps決定a重複的次數
# 用於重複陣列a來構建新的資料
# reps的緯度為d 那麼新陣列的緯度為max(d,a.ndim)
# reps第一位決定行上的重複次數 第二位決定列上的重複次數 如果只有一位只在列上重複
# tile是numpy中的函式:tile將原來的乙個陣列擴充為4個一樣的陣列
# diffmat得到了乙個目標與訓練數值之間的差值
sqdiffmat = diffmat**2
# (x1-x2)^2 各個元素分別平方
sqdistances = sqdiffmat.sum(axis = 1)
# axis=1 表示列相加 即得到 (x1-x2)^2 + (y1-y2)^2
distances = sqdistances ** 0.5
# 對距離平方開根得到測試點到各個資料的距離
sorteddistindicies = distances.argsort()
# 對distances元素從小到大排列 提取對應的index索引輸出到sorteddistindicies
# 本行輸出 [2,3,0,1] 表示第三行(下標為2)距離測試最小 第四行(下標為3)距離測試點其次
classcount = {}
# clsaacount 是個字典型別
for i in range(k):
# 排序從 0-k-1 不包含k
voteilabel = labels[sorteddistindicies[i]]
# 找到排好序的各個點的標籤 存入voteilabel中
classcount[voteilabel] = classcount.get(voteilabel,0)+1
# dict.get(key,default== none) 得到key標籤的值 如果不存在該標籤返回 default 例項中返回到0
sortedclasscount = sorted(classcount.items(),key = operator.itemgetter(1),reverse = true)
print(sortedclasscount)
# sorted(iterable[,cmp[,key[.reverse]]])
# iterable 可迭代物件 指定要排序的list 或者iterable
# cmp 比較函式 大於返回1 小於返回-1 等於返回0
# key 主要用於比較的元素 指定可迭代元素進行排序 operator.itemgetter(1)表示以第二個元素排序
# reverse 排序規則 reverse = true降序 reverse = false 公升序 預設公升序 預設是false
# sorted(students, key=lambda student : student[2]) 或者 sorted(students, key=operator.itemgetter(1,2)) 多級排序
return sortedclasscount[0][0]
group,labels = createdataset()
print(classify0([0,0],group,labels,3))
機器學習實戰讀書筆記 二 k 近鄰演算法
knn演算法 1.優點 精度高 對異常值不敏感 無資料輸入假定 2.缺點 計算複雜度高 空間複雜度高。3.適用資料範圍 數值型和標稱型。一般流程 1.收集資料 2.準備資料 3.分析資料 4.訓練演算法 不適用 5.測試演算法 計算正確率 6.使用演算法 需要輸入樣本和結構化的輸出結果,然後執行k ...
k 近鄰演算法 機器學習讀書筆記
優點 精度高 對異常值不敏感 無資料輸入假定。缺點 計算複雜度高 空間複雜度高。適用資料範圍 數值型和標稱型。步驟 1.獲取原始資料集 資料向量和標籤 2.輸入待分類資料向量,計算該向量與每個原始資料集向量的距離 3.對所有距離排序 從近到遠 取前k個最近的原始資料集,檢視其標籤 4.前k個最近資料...
機器學習實戰學習筆記(一) K 近鄰演算法
k 近鄰演算法採用測量不同特徵值之間的距離方法進行分類。存在乙個樣本資料集合,也稱作訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每一資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新資料的每個特徵和樣本集中資料對應的特徵進行比較,然後演算法提取樣本集中特徵最相似資料 最近鄰 的...