KNN
R 讀取CSV檔案
https://yijutseng.github.io/DataScienceRBook/io.html
library(readr)
dataset <- read_csv("檔案路徑與名稱")
標準化處理
https://www.zhihu.com/column/p/30801047
因为有的变量取值大,有的变量取值小,所以我们在使用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)]
簡單抽樣
>sample(1:6, 10, replace=TRUE)
骰子為1到6六個數字,共投了10次。每次投骰骰子皆為獨立互不相關,所以replace=TRUE
表示對已抽出之數字重新放回母體中,再進行重複取樣之意。
KNN
KNN 為一監督式學習(分類)方法,其假設為相似的資料有相似的特徵值。演算法為找出距離測試點最近的 K 個鄰近點,並透過加權方式計算(連續資料)或投票方式(離散資料),決定此測試資料的類別或數值。
knn()語法:
# the prototype of knn
# train: 訓練用資料
# test: 測試用資料
# k: 多少個鄰居需要被考慮
# cl: 專家分類的結果或依據
# l: 決定結果的最小投票數,一般而言為應為小於 k-1
# prob: 若為真,投票的比例會以屬性 prob 回傳
# use.all: 若為真,所有與第 k 個距離相同的資料皆被納入來決定測試資料;若為否,則隨機選挑出一個
knn(train, test, cl, k = 1, l = 0, prob = FALSE, use.all = TRUE)
用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)
CrossTable
CrossTable():交叉列表與因子獨立性測試(列聯表)
https://blog.csdn.net/Yann_YU/article/details/107359130
CrossTable()語法:
#x,y:列联表的两个特征向量
#digit:指定结果小数位数
#prop.r:行比例是否加入
#prop.c:列比例是否加入
#prop.t:表比例是否加入
#prop.chisq:每个单元的卡方值是否加入
#chisq:卡方检验结果是否加入
CrossTable(x, y, digits=3, max.width = 5, expected=FALSE, prop.r=TRUE, prop.c=TRUE,
prop.t=TRUE, prop.chisq=TRUE, chisq = FALSE, fisher=FALSE, mcnemar=FALSE,
resid=FALSE, sresid=FALSE, asresid=FALSE,
missing.include=FALSE,
format=c("SAS","SPSS"), dnn = NULL, ...)