今天看了第乙個機器學習演算法——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...