機器學習實戰 kNN演算法

2021-07-11 02:58:49 字數 1920 閱讀 1770

今天看了第乙個機器學習演算法——k-鄰近演算法。

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

#coding=utf-8

__author__ = 'intgrp'

import operator

from numpy import *

# 建立資料集

def createdataset():

# 建立4個行資料,分為兩類

group = array([[1.0, 0.9], [1.0, 1.0], [0.1, 0.2], [0.0, 0.1]])

labels = ['a', 'a', 'b', 'b'] # 對應上面的group標識對應的類別,共有兩類

return group, labels

def knnclassify(inx,dataset,labels,k):

#inx為要分類的一行資料--輸入向量

#dataset為訓練好的樣本集,就是每個都分好屬於哪個類了

#只要和它計算距離就可以知道和哪個標籤差距

datasetsize = dataset.shape[0]#把行數賦值給datasetsize

#(datasetsize,1)為要產生的矩陣的行列大小

# tile函式把inx矩陣複製成datasetsize行1列,然後與訓練好的樣本集求差

diffmat = tile(inx,(datasetsize,1))-dataset

sqdiffmat = diffmat**2#平方

sqdistances = sqdiffmat.sum(axis=1)#每行求和

distances = sqdistances**0.5#開個根號後得出距離

sorteddisindicies = argsort(distances)#對距離進行從小到大排序

classcount={}

for i in range(k):

votelabel = labels[sorteddisindicies[i]]#獲得原訓練好的樣本集該資料對應的標籤

classcount[votelabel] = classcount.get(votelabel,0)+1

#加一,在該標籤上計數加一,迴圈計算前k個最近距離裡各個標籤(類別)分別有多少個

sortedclasscount = sorted(classcount.iteritems(),

key=operator.itemgetter(1),reverse=true)#對個數從大到小排序,最多的就說明inx是屬於那個類別的

#返回排名第一的最多個數的那個類的標籤

機器學習實戰 KNN演算法

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

機器學習實戰 KNN演算法

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

機器學習實戰之knn演算法

程式 author xiaoyun from numpy import import operator def createdataset group array 1.0,0.9 1.0,1.0 0.1,0.2 0.0,0.1 labels a a b b return group,labels d...