《機器學習實戰》(一)kNN演算法

2021-08-30 15:30:14 字數 1833 閱讀 1359

個人讀書筆記,主要內容摘自《機器學習實戰》—peter harrington

一、knn演算法簡介

k-近鄰演算法通過獲取輸入資料與訓練集中距離最近的前k個樣本中出現頻率最高的類別來達到分類的效果。

優點:精度高,對異常值不敏感,無資料輸入假定

缺點:計算複雜度高,空間複雜度高

二、knn演算法

1.核心演算法

from numpy import *

import operator # 引入運算子模組

def classify0(inx, dataset, labels, k): # knn演算法

# 計算距離開始:

datasetsize = dataset.shape[0] # shape作用為獲取資料維度,其中shape[0]為行數

diffmat = tile(inx, (datasetsize, 1)) - dataset # 計算輸入向量inx到資料集各點各維度的數值差(x-x0)

sqdiffmat = diffmat ** 2 # (x-x0)^2

sqdistances = sqdiffmat.sum(axis=1) # axis=1矩陣按行壓縮求和,=0按列壓縮求和;目的σ[(x-x0)^2]

distances = sqdistances ** 0.5 # 分行求歐式距離d=√σ[(x-x0)^2]

# 計算距離結束

sorteddistindicies = distances.argsort() # argsort返回的是陣列值從小到大的索引值,即距離的排序

classcount = {}

for i in range(k):

voteilabel = labels[sorteddistindicies[i]] # 獲取距離第i近的資料點對應的標籤

classcount[voteilabel] = classcount.get(voteilabel, 0) + 1 # 獲得距離最小的i個點

sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1),

reverse=true) # sorted排序獲取出現頻率最高的值,key函式表示獲取出現次數的值,reverse為true表示為降序

return sortedclasscount[0][0] # 返回前k個點出現頻率最高的類別

2.解析資料

def file2matrix(filename):  # 解析格式化文字檔案

fr = open(filename)

arrayolines = fr.readlines() # 讀取檔案所有行的內容

numberoflines = len(arrayolines) # 獲取行數

returnmat = zeros((numberoflines, 3)) # 初始化乙個1000*3的零矩陣

classlabelvector = # 儲存標籤陣列

index = 0

for line in arrayolines:

line = line.strip() # 去掉每行前後空格和回車

listfromline = line.split('\t') # 按製表符分開每行資料

returnmat[index, :] = listfromline[0:3] # 將前三個資料按行儲存在矩陣中

index += 1

return returnmat, classlabelvector # 返回矩陣和標籤陣列

3.視覺化

略(還沒看懂matplotlib庫)

機器學習實戰 kNN演算法

今天看了第乙個機器學習演算法 k 鄰近演算法。大概意思就是,先根據已有分劃分好類別的資料集,然後輸入新的資料向量,就計算與資料集裡各個向量的距離,排序找到前k個資料,統計前k資料中各個類別 標籤 出現的次數,最多的那個類別 標籤 就是輸入向量所屬的類別,然後返回。哈哈get乙個機器學習的演算法開心。...

機器學習實戰 KNN演算法

k 近鄰演算法的工作機制非常簡單 對給定的測試樣本,基於某種距離度量找出訓練集中與其最靠近的 k 個訓練樣本,然後基於這 k 個 鄰居 的資訊來進行 通常,在分類任務中可使用 投票法 即選擇這 k 個樣本中出現最多的類別標記作為 結果 在回歸任務中時使用 平均法 即將這k 個樣本的實值輸出標記的平均...

機器學習實戰 KNN演算法

機器學習作為人工智慧的重要分支,同時也是資料探勘中不可或缺的演算法支撐。本人接觸時間不短,但研究尚淺。我計畫用python來實現機器學習中較為常見的演算法。看透了自己,便無須小看別人。老舍 機器學習 機器學習是一類演算法的總稱,可以分為監督學習和無監督學習。半監督學習是結合監督學習與無監督學習的一種...