R分類算法-KNN算法

監督學習(Supervised Learning)
從給定標註的訓練集中學習出一個函數,根據這個函數爲新數據進行標註。
無監督學習(Unsupervised Learning)
從給定無標註的訓練集中學習出一個函數,根據這個函數爲所有數據標註。
分類(Classification)
分類算法通過對已知類別訓練數據集的分析,從中發現分類規則,以此預測
新數據的類別,分類算法屬於監督學習的類型

KNN算法(K Nearest Neighbors)

K近鄰節點算法
KNN算法從訓練集中找到和新數據最接近的K條記錄,然後根據他們的主要分類
來決定新數據的類別。
訓練集(Train Set):
訓練集,是用來訓練模型或確定模型參數的數據。
測試集(Test Set):
測試集,是用來驗證模型的準確性的數據。
交叉驗證(Cross Validation):
一般我們使用70%的數據,作爲訓練集,剩下30%作爲測試集,測試集的測試
結果使用交叉表的形式表示,因此該方法稱爲交叉驗證。

抽樣方法
sample(x,size,replace=FALSE)
x 待抽樣的樣本
size 抽樣的數量
replace 是否可放回抽樣,默認爲FALSE

knn 在”class”包中
install.packages(“class”)
knn(train,test,cl,k=1)

  • train 訓練數據
  • test 測試數據
  • cl 訓練數據的正確結果
  • k KNN中的K值,默認值爲1

模型調優,調整K值

代碼實現:

#install.packages("class");
library(class)

#https://en.wikipedia.org/wiki/Iris_flower_data_set
#https://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%A3%AE%E9%B8%A2%E5%B0%BE%E8%8A%B1%E5%8D%89%E6%95%B0%E6%8D%AE%E9%9B%86

total <- nrow(iris);
index <-sample(1:total, total*0.7)

iris.train <- iris[index, ]
iris.test <- iris[-index, ]

result.KNN <-knn(
  train=subset(iris.train, select=-Species), 
  test=subset(iris.test,select=-Species), 
  cl=iris.train$Species, k=3
)

table(iris.test$Species, result.KNN)
result.KNN
             setosa versicolor virginica
  setosa         15          0         0
  versicolor      0         14         1
  virginica       0          1        14

可以通過調整K值,來進行模型的調優。

發佈了58 篇原創文章 · 獲贊 120 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章