聚類(三):KNN算法(R語言)

2021-03-01 機器學習養成記

k最臨近(KNN)算法是最簡單的分類算法之一,屬於有監督的機器學習算法。

KNN的核心思想是:找出特徵空間中距離待分類點最近的k個點,如果這k個點大多數屬於某一個類別,則該樣本也屬於這個類別。

k值一般取20以下的整數。下圖為從網上截取的圖片,可以直觀看到與點x最臨近的5個點裡,有4個為紅色圓點,因此將點x的類別判斷為紅色圓點一類。

在R中實現knn聚類,可以使用class包中點knn()函數。在下面的例子中,我們使用UCI的[乳腺癌特徵數據集]進行演示。首先,讀入網上的數據:

#讀取網上的數據並設置變量名

url <- 'http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/wdbc.data'

wdbc.data <- read.csv(url,header = F)

names(wdbc.data) <- c('ID','Diagnosis','radius_mean','texture_mean','perimeter_mean',                'area_mean','smoothness_mean','compactness_mean','concavity_mean',

'concave points_mean','symmetry_mean','fractal dimension_mean','radius_sd','texture_sd','perimeter_sd','area_sd','smoothness_sd','compactness_sd','concavity_sd','concave points_sd','symmetry_sd','fractal dimension_sd','radius_max_mean','texture_max_mean','perimeter_max_mean','area_max_mean','smoothness_max_mean','compactness_max_mean','concavity_max_mean','concavepoints_max_mean','symmetry_max_mean','fractal dimension_max_mean')

因為有的變量取值大,有的變量取值小,所以我們在使用knn進行分類前,要先對數據通過歸一化來進行無量綱處理。

#編寫歸一化函數

normalize <- function(x) 

  return ((x-min(x))/(max(x)-min(x)))

}

#對數據進行歸一化

wdbc.data.min_max <- as.data.frame(lapply(wdbc.data[3:length(wdbc.data)],normalize))

wdbc.data.min_max$Diagnosis <- wdbc.data$Diagnosis

區分訓練集和測試集,並紀錄相應的分類標籤。

m<-(dim(wdbc.data.min_max))[1]

val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))

data.train<-wdbc.data.min_max[-val,]

data.test<-wdbc.data.min_max[val,]

data.train.label<-data.train$Diagnosis

data.test.label<-data.test$Diagnosis

data.train<-wdbc.data.min_max[-val,- length(wdbc.data.min_max)]

data.test<-wdbc.data.min_max[val,- length(wdbc.data.min_max)]

用knn算法進行分類,並用實際的分類標籤與預測出的分類結果進行效果檢測。

library(class)

test.pre.labels <- knn(data.train,data.test,data.train.label,k=7)

library(gmodels)

CrossTable(x = data.test.label, y = test.pre.labels, prop.chisq = F)

檢測結果為:

選取兩個變量作為橫縱坐標進行畫圖,觀察實際類別與預測的分類結果。

plot(data.test$texture_mean,data.test$radius_mean,col=test.pre.labels,pch=as.integer(data.test.label))

顏色代表分類後得到的結果,形狀代表真實的類別。從檢測結果和圖上都可以看出,分類結果基本與真實結果一致。

優點

(1)算法原理簡單,無需估計參數和訓練。

(2)適合稀有事件的分類問題。

缺點

(1)計算量太大,需要計算與每個點的距離。

(2)可解釋性不強。

(3)樣本不平衡時,k個最近的點中,大容量類別的點佔據了大多數,但大容量類別不一定為待分類點的真實類別。

本公眾號其他聚類篇文章:

聚類(一):DBSCAN算法實現(r語言)

聚類(二):k-means算法(R&python)

機器學習養成記

搜索添加微信公眾號:chenchenwings

長按圖片,識別二維碼,關注我們。

如需轉載,請在開篇顯著位置註明作者和出處,並在文末放置機器學習養成記二維碼和添加原文連結。

快來關注我們吧!

相關焦點

  • R語言--鄰近算法KNN
    ❝KNN(k鄰近算法)是機器學習算法中常見的用於分類或回歸的算法。它簡單,訓練數據快,對數據分布沒有要求,使它成為機器學習中使用頻率較高的算法,並且,在深度學習大行其道的今天,傳統可解釋的簡單模型在工業大數據領域的應用更為廣泛。本文介紹KNN算法的基本原理和用R代碼實現。
  • k-means聚類算法原理總結
    小批量處理的k-means聚類算法5. k值的選取6. k-means聚類算法不適用的幾個場景7. k-means與knn區別8. 小結聚類算法性能度量的文章提到若簇類相似度好簇間的相似度差,則聚類算法的性能較好。我們基於此定義k-means聚類算法的目標函數: 其中
  • k-means聚類算法從入門到精通
    小批量處理的k-means聚類算法5. k值的選取6. k-means聚類算法不適用的幾個場景7. k-means與knn區別8. 小結聚類算法性能度量的文章提到若簇類相似度好簇間的相似度差,則聚類算法的性能較好。我們基於此定義k-means聚類算法的目標函數: 其中
  • R語言實現K最近鄰算法(KNN)
    例如西紅柿和四季豆之間的距離為:d(西紅柿,四季豆)=√(6−3)2+(4−7)2=4.2d(西紅柿,四季豆)=(6−3)2+(4−7)2=4.2根據以上算法,我們分別計算了西紅柿和葡萄、四季豆、堅果、橙子之間的距離,分別是2.2、4.2、3.6、1.4。我們發現西紅柿和橙子之間的距離最短,那麼我們據此認為西紅柿是一種水果。
  • R語言之實現K-mean聚類算法
    聚類算法作為無監督的學習方法,在不給出Y的情況下對所有的樣本進行聚類。以動態聚類為基礎的K均值聚類方法是其中最簡單而又有深度的一種方法。
  • 回歸、分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R...
    機器學習任務在本次梳理中,我們將涵蓋目前「三大」最常見機器學習任務:回歸方法分類方法聚類方法說明:本文的梳理不會涵蓋具體領域的問題,比如自然語言處理。本文也不會對每個算法都進行梳理。因為現有太多算法,而且新的算法也層出不窮。然而,這份清單將向讀者展現對每個任務而言目前具有代表性的算法概覽。
  • ...分類與聚類:三大方向剖解機器學習算法的優缺點(附Python和R實現)
    機器學習任務在本次梳理中,我們將涵蓋目前「三大」最常見機器學習任務:回歸方法分類方法聚類方法說明:本文的梳理不會涵蓋具體領域的問題,比如自然語言處理。本文也不會對每個算法都進行梳理。因為現有太多算法,而且新的算法也層出不窮。然而,這份清單將向讀者展現對每個任務而言目前具有代表性的算法概覽。
  • 機器學習之KNN檢測惡意流量
    近年來,隨著基礎設施的完善,海量大數據的積累,機器學習方法理論越來越成熟,算力的大幅度提升,網際網路企業也越來越願意增大在AI領域的投入,AI的優勢在於處理海量數據提取捕獲其中有用信息上發揮著非常重要的作用,如OCR領域圖片鑑黃、自然語言處理方面的惡意言論捕獲、風控領域畫像、推薦系統等。
  • 機器學習(二)-------KNN算法的sklearn KNN實踐
    一.Skelarn KNN參數概述要使用sklearnKNN算法進行分類,我們需要先了解sklearnKNN算法的一些基本參數,那麼這節就先介紹這些內容吧。前面說到過,通過調整 K 值,算法會有不同的效果。- weights(權重):最普遍的 KNN 算法無論距離如何,權重都一樣,但有時候我們想搞點特殊化,比如距離更近的點讓它更加重要。這時候就需要 weight 這個參數了,這個參數有三個可選參數的值,決定了如何分配權重。參數選項如下: • 'uniform':不管遠近權重都一樣,就是最普通的 KNN 算法的形式。
  • 三種聚類方法的介紹及其R語言實現
    利用R語言中的函數:hclust(d,method=" ",member=NULL)來進行系統聚類分析。動態聚類在進行分析時先抽取幾個點將周圍的點聚集起來,然後算每一類的重心或者是平均值,以算出來的結果為分類點,然後將這個過程一直重複下去,直到分類完成。因此動態聚類方法又稱為逐步聚類法。動態聚類法具有計算量小,方法簡單的優點,適用於大樣本的Q型聚類分析。
  • KNN算法(三)-sklearn實現
    上篇講到KNN算法的實例。在python中sklearn庫可直接實現KNN算法。本篇介紹運用sklearn庫實現KNN算法。
  • 機器學習之KNN分類算法介紹: Stata和R同步實現(附數據和代碼)
    最後,作為惰性的機器學習算法,KNN很懶,幾乎就不怎麼學習。2 KNN在Stata和R中的實現2.1 KNN在Stata中的實現Stata中實現KNN分類的命令是「discrim knn」。有點可惜的是,截至Stata 16官方和SSC尚未提供基於KNN的回歸命令。「discrim knn」還可以通過「多種不同具體的算法來計算similarity和dissimilarity不相似性」。
  • 【他山之石】DBSCAN密度聚類算法(理論+圖解+python代碼)
    6、用Python實現DBSCAN聚類算法一、前言 去年學聚類算法的R語言的時候,有層次聚類、系統聚類、K-means聚類、K中心聚類,最後呢,被DBSCAN聚類算法迷上了。為什麼呢,首先它可以發現任何形狀的簇,其次我認為它的理論也是比較簡單易懂的,今年在python這門語言上我打算好好研究DBSCAN。
  • 9種常用的機器學習算法實現
    :Apriori聚類(Clustering):對數據進行分組,以便組內對象比組間對象更相似,較基礎的算法有:K-Means構造訓練與測試集l, r = knn_X_train[:, 0].min() - 1, knn_X_train[:, 0].max() + 1b, t = knn_X_train[:, 1].min() - 1, knn_X_train[:, 1].max() + 1n = 1000grid_x, grid_y = np.meshgrid(np.linspace(l, r, n), np.linspace
  • 機器學習中五種常用的聚類算法
    在數據科學中聚類會從數據中發掘出很多分析和理解的視角,讓我們更深入的把握數據資源的價值、並據此指導生產生活。以下是五種常用的聚類算法。 K均值聚類 這一最著名的聚類算法主要基於數據點之間的均值和與聚類中心的聚類迭代而成。它主要的優點是十分的高效,由於只需要計算數據點與劇類中心的距離,其計算複雜度只有O(n)。
  • 機器學習中的聚類算法有哪幾種?
    下面我將為大家一一介紹常見的幾種聚類算法,分別是高斯聚類模型、基於密度的聚類算法、凝聚層次聚類和均值漂移算法。2、基於密度的聚類算法基於密度的聚類算法最大的優點在於無需定義類的數量,其次可以識別出局外點和噪聲點、並且可以對任意形狀的數據進行聚類。
  • 圖像識別之KNN算法的理解與應用(2)
    該數據集分為Python、Matlab、C/C++三個不同的版本,顧名思義,三個版本分別適用於對應的三種程式語言。因為我們使用的是C/C++語言,所以使用對應的C/C++版本就好,該版本的數據集包含6個bin文件,如下圖所示,其中data_batch_1.bin~data_batch_5.bin通常用於訓練,而test_batch.bin則用於訓練之後的識別測試。
  • 聚類之EM算法
    定義:在統計計算中,最大期望(EM)算法是在概率模型中(E步)尋找參數最大似然估計或者最大後驗估計(M步)的算法,其中概率模型依賴於無法觀測的隱藏變量(LatentVariable),聚類應用中就是隱藏的類別。
  • 二十三、聚類算法介紹
    聚類算法聚類:數據對象的集合在同一個聚類中的對象彼此相似不同聚類中的對象則差別較大聚類分析將物理或抽象對象的集合分組成為由類似的對象組成的多個類的過程K-means算法基於層次的方法:CURE算法基於密度的方法:DBSCAN算法2. k-means聚類算法簡介
  • K-Means聚類算法詳解
    寫在前面如果想從事數據挖掘或者機器學習的工作,掌握常用的機器學習算法是非常有必要的,常見的機器學習算法:監督學習算法:邏輯回歸,線性回歸,決策樹,樸素貝葉斯,K近鄰,支持向量機,集成算法Adaboost等無監督算法:聚類,降維,關聯規則, PageRank等為了詳細的理解這些原理