參考:
我感覺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值的取法 之後取離索要 的點...