01-knn k臨近算法

一箕般、knn簡介

k臨近算法采用測量不同特征值之間的距離來分類,在樣本數(shù)據(jù)及中找出k個待分類數(shù)據(jù)最相似的樣本充坑,這k個樣本中出現(xiàn)最多的類別作為待分類樣本的類別

算法流程


遍歷所有樣本

對輸入數(shù)據(jù)計算和每一個樣本數(shù)據(jù)的誤差

找出k個誤差最小的樣本

統(tǒng)計k個最相似的樣本中出現(xiàn)最多的類別作為待分類樣本類別

二另假、代碼實現(xiàn)

樣本數(shù)據(jù)

這是一份約會網(wǎng)站數(shù)據(jù),

數(shù)據(jù)有三種分類:

  1. largeDoses 極具魅力的人

  2. smallDoses 魅力一般的人

  3. didntlike 不喜歡的人

每條數(shù)據(jù)共有三種特征:

  1. 每年乘飛機飛行里程數(shù)

  2. 玩游戲時間百分比

  3. 每周消耗冰欺凌公升數(shù)


40920    8.326976    0.953952    largeDoses

14488    7.153469    1.673904    smallDoses

26052    1.441871    0.805124    didntLike

75136    13.147394    0.428964    didntLike

38344    1.669788    0.134296    didntLike

72993    10.141740    1.032955    didntLike

35948    6.830792    1.213192    largeDoses

42666    13.276369    0.543880    largeDoses

67497    8.631577    0.749278    didntLike

35483    12.273169    1.508053    largeDoses

... ...

這些數(shù)據(jù)保存在datingTestData.txt中照宝。

讀取數(shù)據(jù)

將數(shù)據(jù)文件中特征值讀取為numpy 3*n數(shù)組ret_mat

標簽去讀取為1*n數(shù)組labels


for line in lines:

line = line.strip()

l = line.split('\t')

ret_mat[index] = l[0:3]

labels.append(l[-1])

index += 1


數(shù)據(jù)歸一化

不同評價指標往往具有不同的量綱和量綱單位,這樣的情況會影響到數(shù)據(jù)分析的結果眶诈,為了消除指標之間的量綱影響聂宾,需要進行數(shù)據(jù)標準化處理晴及,以解決數(shù)據(jù)指標之間的可比性。原始數(shù)據(jù)經(jīng)過數(shù)據(jù)標準化處理后烙荷,各指標處于同一數(shù)量級镜会,適合進行綜合對比評價.

常用的歸一化方法有:

  • min-max標準化法

  • Z-score標準化方法

這里我們使用min-max標準化法。

$\frac{x-minval}{maxval-minval}$

分類

knn與其他機器學習方法不同的是终抽,沒有訓練過程戳表,直接對數(shù)據(jù)集上所有數(shù)據(jù)計算。分類時需要計算待分類樣本與每一個樣本數(shù)據(jù)的相似度昼伴,這里相似度我們用L2距離(就是我們常見的歐氏距離)表示

$L_2 = \sqrt{\sum_{k=1}^n x_{ik} - x_{jk}}$

簡單的說就是向量每個元素平方和再開根匾旭,距離越小誤差越小,即相似度越大


def classify0(in_x,dataset,labels,k):

dataset_size = dataset.shape[0]

diff_mat = in_x - dataset # numpy Broadcasting

sq_mat = diff_mat**2

sq_distance = sq_mat.sum(axis=1)

distances = sq_distance**0.5

sort_distance_index = distances.argsort()

class_count = {}

for i in range(k):

cur_label = labels[sort_distance_index[i]]

class_count[cur_label] = class_count.get(cur_label,0) + 1

sort_class_cout = sorted(class_count.iteritems(),key = operator.itemgetter(1),reverse=True)

return sort_class_cout[0][0]

測試我們的分類器

文本中有1000條數(shù)據(jù)亩码,我們將其中一部分用來做測試數(shù)據(jù)季率,一部分用來做樣本庫,每隔1/10 取一條數(shù)據(jù)作為測試數(shù)據(jù)


test_data = dataset[0:data_size/10:1,0:]

test_labels = labels[0:data_size/10:1]

剩下的作為樣本庫


dataset = dataset[data_size/10:data_size:1,0:]

labels = labels[data_size/10:data_size:1]

完整代碼

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末描沟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鞭光,更是在濱河造成了極大的恐慌吏廉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惰许,死亡現(xiàn)場離奇詭異席覆,居然都是意外死亡,警方通過查閱死者的電腦和手機汹买,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進店門佩伤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晦毙,你說我怎么就攤上這事生巡。” “怎么了见妒?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵孤荣,是天一觀的道長。 經(jīng)常有香客問我须揣,道長盐股,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任耻卡,我火速辦了婚禮疯汁,結果婚禮上,老公的妹妹穿的比我還像新娘卵酪。我一直安慰自己幌蚊,他們只是感情好秸谢,可當我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著霹肝,像睡著了一般估蹄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沫换,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天臭蚁,我揣著相機與錄音,去河邊找鬼讯赏。 笑死垮兑,一個胖子當著我的面吹牛,可吹牛的內容都是我干的漱挎。 我是一名探鬼主播系枪,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼磕谅!你這毒婦竟也來了私爷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤膊夹,失蹤者是張志新(化名)和其女友劉穎衬浑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體放刨,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡工秩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了进统。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片助币。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖螟碎,靈堂內的尸體忽然破棺而出眉菱,到底是詐尸還是另有隱情,我是刑警寧澤抚芦,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布倍谜,位于F島的核電站,受9級特大地震影響叉抡,放射性物質發(fā)生泄漏尔崔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一褥民、第九天 我趴在偏房一處隱蔽的房頂上張望季春。 院中可真熱鬧,春花似錦消返、人聲如沸载弄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宇攻。三九已至惫叛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逞刷,已是汗流浹背嘉涌。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留夸浅,地道東北人仑最。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像帆喇,于是被迫代替她去往敵國和親警医。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內容