機器學習 演算法 KNN

2021-06-18 04:16:03 字數 1644 閱讀 5205

參考:

我感覺knn是最簡單的乙個機器學習演算法,實現很簡單,效果也一般般

就是算個euclideam distance,還有一些可以優化的地方,比如可以加權,第二篇文章提到了

python**如下

#-*- coding:utf-8 -*-

'''created on aug 30, 2013

@author: blacklaw

@ref:

''''''

movie's name || fight times || kiss times || movie's type

'''from numpy import *

data = [['california man', 3, 104, 'romance'],

["he's not really into dudes", 2, 100, 'romance'],

['beautiful woman', 1, 81, 'romance'],

['kevin longblade', 101, 10, 'action'],

['robo slayer 3000', 99, 5, 'action'],

['amped ii', 98, 2, 'action'],

['unknown', 18, 90, 'unknown'],

]def calc_dist(compared, test):

dist_type =

for line in compared:

# calc euclidean distance

dist = sum((array(line[:-1])-array(test)) ** 2) ** 1/2.0

type = line[-1]

return dist_type

def choose_type(dist_type, k):

type_count = {}

dist_type = sorted(dist_type, key = lambda x:x['dist'])[:k]

for di in dist_type:

try: type_count[di['type']] += 1

except: type_count[di['type']] = 1

max_pos = type_count.values().index(max(type_count.values()))

return type_count.keys()[max_pos]

if __name__ == "__main__":

k = 3

test = data[-1][1:-1]

compared = [line[1:] for line in data[:-1]]

dist_type = calc_dist(compared, test)

test_type = choose_type(dist_type, k)

print "testdata: %s\nk: %d\ntype: %s" % (test, k, test_type)

結果:

testdata: [18, 90]

k: 3

type: romance

機器學習 KNN 演算法

一 主要目的 在樣本空間中,找到與待估計的樣本最臨近的k個鄰居,用這幾個鄰居的類別來估計待測樣本的類別 二 適用性 樣本容量比較大的類域的自動分類,而樣本容量較小的類域則容易誤分。尤其適用於樣本分類邊界不規則的情況 三 不足 1 當樣本不平衡時,比如乙個類的樣本容量很大,其他類的樣本容量很小,輸入乙...

機器學習 KNN演算法

一 近 鄰 算 法 knn 原理 工 作 原 理 是 存 在 一 個 樣 本 資料 集 合 也 稱 作 訓練 樣 本 集 並 且 樣 本 集 中 每 個 數 據 都 存 在 標 籤 即 我 們 知 道 樣 本 集 中 每 一 數 據與 所 屬 分 類 的 對 應關係 輸 人 沒 有 標 籤 的 新 ...

機器學習 kNN演算法

最近鄰居法 knn演算法,又譯k 近鄰演算法 是一種用於分類和回歸的非引數統計方法。例如 根據腫瘤大小和時間兩個特徵對腫瘤的良性和惡性的 其中綠色為良性,紅色為惡性,現在要 藍色這一資料是良性還是惡性,那麼對於knn演算法是怎麼 的呢?大概思路 首先取乙個k值 要點一 k值的取法 之後取離索要 的點...