kNN算法

理想環(huán)境下的kNN


計算距離 ->取最近的K個值 -> 選取占比高的類別

1. 計算距離

原始數(shù)據(jù):9條數(shù)據(jù),2個屬性,2個類別

對于待分類的點**(61,20) **, 可以得到對于每個點的距離,使用曼哈頓距離公式.我不是為了偷懶,就是用這個

項目 X1 X2 X3 X4 X5 X6 X7 X8 X9
距離 11 20 6 14 3 81 68 86 71
類別 A A A A B B B B B

2. 最近k個

最近的三個依次是X5-B,X3-A,X1-A

3. 判斷類別

A占66%,B占33%
所以待分類點**(61,20) **是A類別

4. 簡單py實現(xiàn)

計算機(jī)負(fù)責(zé)計算,可以舍棄曼哈頓距離了,用最經(jīng)典的歐幾里得距離

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

__author__ = 'Matter-YYF'

from numpy import *
import operator

def createDataSet():
    # numpy的array可以初始化矩陣
    group = array([[50.0,20.0],[53.0,32.0],[60.0,25.0],
                  [65.0,30.0],[58.0,20.0],[10.0,50.0],
                  [20.0,47.0],[15.0,60.0],[25.0,55.0]])
    label = ['A','A','A','A','B','B','B','B','B',]
    return group,label

def classify0(inX, dataSet, labels, k):
    # shape屬性是行列數(shù)
    dataSetSize = dataSet.shape[0]
    # 用tile創(chuàng)建重復(fù)數(shù)組,此處用于創(chuàng)建矩陣 tile([61.0,20.0],(9,1))
    diffMat = tile(inX,(dataSetSize,1))-dataSet

    sqDiffMat = diffMat ** 2
    # 矩陣每行相加
    sqDistance = sqDiffMat.sum(axis=1)
    distance = sqDistance ** 0.5
    # 字典key排序
    sortedDistIndex = distance.argsort()
    classCount = {}
    for i in range(k):
        voteLabel = labels[sortedDistIndex[i]]
        # XX.get(a,b):有key=a的則取對應(yīng)value,沒有則為b
        classCount[voteLabel] = classCount.get(voteLabel,0)+1
    # 前k個類別的排序
    sortedClassCount = sorted(classCount.iteritems(),
                              key=operator.itemgetter(1),
                              reverse=True)
    # 返回占比例最高的類別
    return sortedClassCount[0][0]

dataSet,label = createDataSet()
resultKNN = classify0([61.0,20.0],dataSet,label,3)
print resultKNN

歡迎回到現(xiàn)實世界


1. 手輸數(shù)據(jù)是有多蛋疼...

勞資是程序猿,不干low活

得從文件讀數(shù)據(jù)啊


def file2matrix(filename):
    fr = open(filename)
    arrayOfLines = fr.readlines()
    numberOfLines = len(arrayOfLines)
    returnMat = zeros((numberOfLines,3))    # 生成一個空白矩陣,3列
    classLabelVector = []
    index = 0
    for line in arrayOfLines:
        line = line.strip()                 # 刪除空白符:'\n','\r','\t',' '
        listFromLine = line.split('\t')     # 以制表符為分割生成列表
        returnMat[index,:] = listFromLine[0:3]              # 前三個項目是數(shù)據(jù)屬性
        classLabelVector.append(int(listFromLine[-1]))      # 最后是類別標(biāo)簽
        index+=1
    return returnMat, classLabelVector

2. 數(shù)據(jù)怎么跨度這么大...

10w和25在一起,好別扭

歸歸歸歸一化

線性函數(shù)歸一化(Min-Max scaling)
def autoNorm(dataSet):
    minVals = dataSet.min(0)        # 所有列里各自最小值
    maxVals = dataSet.max(0)        # 所有列里各自最大值

    ranges = maxVals -minVals       # 歸一化計算公式分母
    normDataSet = zeros(shape(dataSet))

    m = dataSet.shape[0]            # 數(shù)據(jù)行數(shù)
    normDataSet = dataSet-tile(minVals,(m,1))       # 分子
    normDataSet = normDataSet/tile(ranges,(m,1))    #計算結(jié)果
    return normDataSet, ranges, minVals
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末拣技,一起剝皮案震驚了整個濱河市断箫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毁腿,老刑警劉巖妒蔚,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件删咱,死亡現(xiàn)場離奇詭異,居然都是意外死亡幻林,警方通過查閱死者的電腦和手機(jī)终吼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門镀赌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人际跪,你說我怎么就攤上這事商佛。” “怎么了姆打?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵良姆,是天一觀的道長。 經(jīng)常有香客問我幔戏,道長玛追,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任闲延,我火速辦了婚禮痊剖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘垒玲。我一直安慰自己陆馁,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布合愈。 她就那樣靜靜地躺著叮贩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佛析。 梳的紋絲不亂的頭發(fā)上益老,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音寸莫,去河邊找鬼杨箭。 笑死,一個胖子當(dāng)著我的面吹牛储狭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捣郊,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼辽狈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呛牲?” 一聲冷哼從身側(cè)響起刮萌,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娘扩,沒想到半個月后着茸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體壮锻,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年涮阔,在試婚紗的時候發(fā)現(xiàn)自己被綠了猜绣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡敬特,死狀恐怖掰邢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伟阔,我是刑警寧澤辣之,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站皱炉,受9級特大地震影響怀估,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜合搅,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一多搀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧历筝,春花似錦酗昼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至春弥,卻和暖如春呛哟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匿沛。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工扫责, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逃呼。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓鳖孤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親抡笼。 傳聞我的和親對象是個殘疾皇子苏揣,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • KNN算法既可以解決分類問題,也可以解決預(yù)測問題推姻∑叫伲基礎(chǔ)思想:通過計算每個訓(xùn)練樣例到待分類樣品的距離,取和待分類樣品...
    apricoter閱讀 2,116評論 0 7
  • 之前講解的線性回歸和邏輯回歸的原理中,不免會引入大量的數(shù)學(xué)推導(dǎo)和證明過程增炭,從預(yù)測函數(shù)的建立忍燥,到損失函數(shù)的偏導(dǎo)數(shù)求解...
    PrivateEye_zzy閱讀 18,684評論 0 7
  • 0x00kNN思想 kNN(k-NearestNeighbor),也就是k最近鄰算法隙姿。顧名思義梅垄,所謂K最近鄰,就是...
    s0k0y閱讀 502評論 0 0
  • 一孟辑、K近鄰算法 1.k近鄰法是一種基本的分類與回歸方法哎甲。 1).分類問題:對新的樣本,根據(jù)其k...
    當(dāng)_下閱讀 300評論 0 1
  • 什么是KNN 在解釋KNN之前饲嗽,我先給大家舉個例子:假如現(xiàn)在院子里分別在不同的柵欄里飼養(yǎng)了10只雞炭玫,8條狗,5只貓...
    rcoon閱讀 1,133評論 0 3