R語言機器學習與臨床預測模型80--詳解knn算法用于分類預測

R小鹽準備介紹R語言機器學習與預測模型的學習筆記

你想要的R語言學習資料都在這里陨倡, 快來收藏關注【科研私家菜】


01 什么是knn算法

KNN(K-NearestNeighbor)是機器學習入門級的分類算法苫幢,是一種有監(jiān)督算法。
我們有一堆樣本點硼啤,類別已知岭粤,如下圖左回铛,藍色為一類征绸,黃色為另一類。現(xiàn)在有個新樣本點甘有,也就是圖中黑色的叉叉诉儒,需要判斷它屬于哪一類。KNN做的就是選出距離目標點黑叉叉距離最近的k個點亏掀,看這k個點的大多數(shù)顏色是什么顏色忱反。這里的距離怎么定義?當然還是可以用我們的老朋友——歐氏距離來度量滤愕。
給定兩個樣本 X=(x1,x2,...,xn)X=(x_{1},x_{2},...,x_{n})X=(x_{1},x_{2},...,x_{n}) 和 Y=(y1,y2,...,yn)Y=(y_{1},y_{2},...,y_{n})Y=(y_{1},y_{2},...,y_{n}) 温算,其中n表示特征數(shù) ,X和Y兩個向量間的歐氏距離(Euclidean Distance)表示為:



KNN的全稱是K Nearest Neighbors间影,意思是K個最近的鄰居注竿。K個最近鄰居,毫無疑問魂贬,K的取值肯定是至關重要的巩割。那么最近的鄰居又是怎么回事呢?其實啊付燥,KNN的原理就是當預測一個新的值x的時候宣谈,根據(jù)它距離最近的K個點是什么類別來判斷x屬于哪個類別
KNN是一種非參的,惰性的算法模型键科。
非參的意思并不是說這個算法不需要參數(shù)闻丑,而是意味著這個模型不會對數(shù)據(jù)做出任何的假設,與之相對的是線性回歸(我們總會假設線性回歸是一條直線)勋颖。也就是說KNN建立的模型結(jié)構(gòu)是根據(jù)數(shù)據(jù)來決定的嗦嗡,這也比較符合現(xiàn)實的情況,畢竟在現(xiàn)實中的情況往往與理論上的假設是不相符的饭玲。
惰性又是什么意思呢酸钦?想想看,同樣是分類算法咱枉,邏輯回歸需要先對數(shù)據(jù)進行大量訓練(tranning)卑硫,最后才會得到一個算法模型。而KNN算法卻不需要蚕断,它沒有明確的訓練數(shù)據(jù)的過程欢伏,或者說這個過程很快。
KNN算法的優(yōu)勢和劣勢

KNN算法優(yōu)點

  • 簡單易用亿乳,相比其他算法硝拧,KNN算是比較簡潔明了的算法径筏。即使沒有很高的數(shù)學基礎也能搞清楚它的原理。
  • 模型訓練時間快障陶,上面說到KNN算法是惰性的滋恬,這里也就不再過多講述。
  • 預測效果好抱究。
  • 對異常值不敏感

KNN算法缺點

  • 對內(nèi)存要求較高恢氯,因為該算法存儲了所有訓練數(shù)據(jù)
  • 預測階段可能很慢
  • 對不相關的功能和數(shù)據(jù)規(guī)模敏感

02 knn算法分類預測實現(xiàn)① class包

train<-iris[index,-5]
test<-iris[-index,-5]
cl<-iris[index,5]#設置類別變量
k<-7#以最近的幾個點來投票

#測試集上的預測
pre_test<-knn(train=train,test=test,cl=cl,k=k,pro=T) #分類結(jié)果
t<-table(iris[-index,5],pre_test)
accu_test<-sum(diag(t))/sum(t) #測試集準確率

#訓練集上的預測
pre_train<-knn(train=train,test=train,cl=cl,k=k,pro=T) #分類結(jié)果
t<-table(iris[index,5],pre_train)
accu_train<-sum(diag(t))/sum(t) #訓練集準確率

效果如下:

03 knn算法分類預測②kknn包

# kknn包可以處理帶有因子型變量的數(shù)據(jù)集

library(kknn)
train<-iris[index,]
test<-iris[-index,]

#測試集上的預測
pre_test<-kknn(Species~.,train, test)
fit_test<- fitted(pre_test) #分類結(jié)果
t<-table(test$Species, fit_test)
accu_test<-sum(diag(t))/sum(t) #測試集準確率

#訓練集上的預測
pre_train<-kknn(Species~.,train, train)
fit_train <- fitted(pre_train) #分類結(jié)果
t<-table(train$Species, fit_train)
accu_train<-sum(diag(t))/sum(t) #訓練集準確率

效果如下:



關注R小鹽,關注科研私家菜(VX_GZH: SciPrivate)鼓寺,有問題請聯(lián)系R小鹽勋拟。讓我們一起來學習 R語言機器學習與臨床預測模型

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市妈候,隨后出現(xiàn)的幾起案子敢靡,更是在濱河造成了極大的恐慌,老刑警劉巖苦银,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啸胧,死亡現(xiàn)場離奇詭異,居然都是意外死亡幔虏,警方通過查閱死者的電腦和手機纺念,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來所计,“玉大人柠辞,你說我怎么就攤上這事团秽≈麟剩” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵习勤,是天一觀的道長踪栋。 經(jīng)常有香客問我,道長图毕,這世上最難降的妖魔是什么夷都? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮予颤,結(jié)果婚禮上囤官,老公的妹妹穿的比我還像新娘。我一直安慰自己蛤虐,他們只是感情好党饮,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著驳庭,像睡著了一般刑顺。 火紅的嫁衣襯著肌膚如雪氯窍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天蹲堂,我揣著相機與錄音狼讨,去河邊找鬼。 笑死柒竞,一個胖子當著我的面吹牛政供,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播能犯,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼鲫骗,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了踩晶?” 一聲冷哼從身側(cè)響起执泰,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渡蜻,沒想到半個月后术吝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡茸苇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年排苍,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片学密。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡淘衙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出腻暮,到底是詐尸還是另有隱情彤守,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布哭靖,位于F島的核電站具垫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏试幽。R本人自食惡果不足惜筝蚕,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铺坞。 院中可真熱鬧起宽,春花似錦、人聲如沸济榨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腿短。三九已至屏箍,卻和暖如春绘梦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赴魁。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工卸奉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颖御。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓榄棵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親潘拱。 傳聞我的和親對象是個殘疾皇子疹鳄,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

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