1. 程式人生 > >R機器學習之一:kNN演算法案例

R機器學習之一:kNN演算法案例

kNN演算法優劣

優點:
高度無偏且不需要對資料作任何假設。簡單有效易於實現
缺點:
由於沒有涉及抽象過程,kNN實際上並沒有建立一個模型,預測時間較長

case study:檢測前列腺癌

Step 1 :
100個觀測10個變數,其中8個數值變數,一個類別變數,一個ID:
1,Radius
2,Texture
3,Perimeter
4,Area
5,Smoothness
6,Compactness
7,Symmetry
8,Fractal dimension

Step 2 :資料準備

setwd('D:\\f\\機器學習\\AnalyticsVidhya\\kNN in R')
prc=read.csv("D:\\f\\機器學習\\AnalyticsVidhya\\kNN in R\\Prostate_Cancer.csv"
) > head(prc) id diagnosis_result radius texture perimeter area smoothness compactness symmetry 1 1 M 23 12 151 954 0.143 0.278 0.242 2 2 B 9 13 133 1326 0.143 0.079 0.181 3 3 M 21 27 130
1203 0.125 0.160 0.207 4 4 M 14 16 78 386 0.070 0.284 0.260 5 5 M 9 19 135 1297 0.141 0.133 0.181 6 6 B 25 25 83 477 0.128 0.170 0.209 fractal_dimension 1 0.079
2 0.057 3 0.060 4 0.097 5 0.059 6 0.076 prc=prc[-1]#ID列沒有用 ##資料集包括被診斷為惡性和良性的病人 table(prc$diagnosis_result) prc$diagnosis <- factor(prc$diagnosis_result, levels = c("B", "M"), labels = c("Benign", "Malignant")) round(prop.table(table(prc$diagnosis)) * 100, digits = 1) normalize <- function(x) { return ((x - min(x)) / (max(x) - min(x))) } prc_n <- as.data.frame(lapply(prc[2:9], normalize))#對數值變數標準化 prc_train <- prc_n[1:65,] prc_test <- prc_n[66:100,] prc_train_labels <- prc[1:65, 1] prc_test_labels <- prc[66:100, 1] #訓練模型install.packages("class") library(class) ##用knn()函式分類測試資料,k選為樣本個數開方 prc_test_pred <- knn(train = prc_train, test = prc_test,cl = prc_train_labels, k=10) ##模型評估 install.packages("gmodels") library(gmodels) CrossTable(x=prc_test_labels,y=prc_test_pred,prop.chisq = FALSE) > CrossTable(x=prc_test_labels,y=prc_test_pred,prop.chisq = FALSE) Cell Contents |-------------------------| | N | | N / Row Total | | N / Col Total | | N / Table Total | |-------------------------| Total Observations in Table: 35 | prc_test_pred prc_test_labels | B | M | Row Total | ----------------|-----------|-----------|-----------| B | 7 | 12 | 19 | | 0.368 | 0.632 | 0.543 | | 1.000 | 0.429 | | | 0.200 | 0.343 | | ----------------|-----------|-----------|-----------| M | 0 | 16 | 16 | | 0.000 | 1.000 | 0.457 | | 0.000 | 0.571 | | | 0.000 | 0.457 | | ----------------|-----------|-----------|-----------| Column Total | 7 | 28 | 35 | | 0.200 | 0.800 | | ----------------|-----------|-----------|-----------| #14個FP #模型準確度為(TN+TP)/35=60% 有待改善 ##########模型改進 ##嘗試改變k值!!

參考文獻