KNN

R 讀取CSV檔案

https://yijutseng.github.io/DataScienceRBook/io.html

  1. library(readr)
  2. dataset <- read_csv("檔案路徑與名稱")

標準化處理

https://www.zhihu.com/column/p/30801047
因为有的变量取值大,有的变量取值小,所以我们在使用knn进行分类前,要先对数据通过归一化来进行无量纲处理。

  1. #编写归一化函数
  2. normalize <- function(x)
  3. {
  4. return ((x-min(x))/(max(x)-min(x)))
  5. }
  6. #对数据进行归一化
  7. wdbc.data.min_max <- as.data.frame(lapply(wdbc.data[3:length(wdbc.data)],normalize))
  8. wdbc.data.min_max$Diagnosis <- wdbc.data$Diagnosis

分類

区分训练集和测试集,并纪录相应的分类标签。

  1. m<-(dim(wdbc.data.min_max))[1]
  2. val<-sample(1:m,size=round(m/3),replace=FALSE,prob=rep(1/m,m))
  3. data.train<-wdbc.data.min_max[-val,]
  4. data.test<-wdbc.data.min_max[val,]
  5. data.train.label<-data.train$Diagnosis
  6. data.test.label<-data.test$Diagnosis
  7. data.train<-wdbc.data.min_max[-val,- length(wdbc.data.min_max)]
  8. data.test<-wdbc.data.min_max[val,- length(wdbc.data.min_max)]

簡單抽樣
>sample(1:6, 10, replace=TRUE)
骰子為1到6六個數字,共投了10次。每次投骰骰子皆為獨立互不相關,所以replace=TRUE表示對已抽出之數字重新放回母體中,再進行重複取樣之意。

KNN

KNN 為一監督式學習(分類)方法,其假設為相似的資料有相似的特徵值。演算法為找出距離測試點最近的 K 個鄰近點,並透過加權方式計算(連續資料)或投票方式(離散資料),決定此測試資料的類別或數值。
knn()語法:

  1. # the prototype of knn
  2. # train: 訓練用資料
  3. # test: 測試用資料
  4. # k: 多少個鄰居需要被考慮
  5. # cl: 專家分類的結果或依據
  6. # l: 決定結果的最小投票數,一般而言為應為小於 k-1
  7. # prob: 若為真,投票的比例會以屬性 prob 回傳
  8. # use.all: 若為真,所有與第 k 個距離相同的資料皆被納入來決定測試資料;若為否,則隨機選挑出一個
  9. knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)

用knn算法进行分类,并用实际的分类标签与预测出的分类结果进行效果检测。

  1. library(class)
  2. test.pre.labels <- knn(data.train,data.test,data.train.label,k=7)
  3. library(gmodels)
  4. CrossTable(x = data.test.label, y = test.pre.labels, prop.chisq = F)

CrossTable

CrossTable():交叉列表與因子獨立性測試(列聯表)
https://blog.csdn.net/Yann_YU/article/details/107359130
CrossTable()語法:

  1. #x,y:列联表的两个特征向量
  2. #digit:指定结果小数位数
  3. #prop.r:行比例是否加入
  4. #prop.c:列比例是否加入
  5. #prop.t:表比例是否加入
  6. #prop.chisq:每个单元的卡方值是否加入
  7. #chisq:卡方检验结果是否加入
  8. CrossTable(x, y, digits=3, max.width = 5, expected=FALSE, prop.r=TRUE, prop.c=TRUE,
  9. prop.t=TRUE, prop.chisq=TRUE, chisq = FALSE, fisher=FALSE, mcnemar=FALSE,
  10. resid=FALSE, sresid=FALSE, asresid=FALSE,
  11. missing.include=FALSE,
  12. format=c("SAS","SPSS"), dnn = NULL, ...)