無聊玩玩~~
空氣品質 KNN分類
K-NN使用點間的距離為分類標準,當新的觀測值準備預測時,演算法會計算出和她接近最多的類目標點,比方說,k值=5,觀測值比較靠近其中3個目標點時,演算法就會採用多數票來決定分類結果。
根據變數["SO2","CO","O3","PM10","PM2.5","NO2","NO"]歸類空氣品質["Status" ]是良好還普通
********************************
資料來源:政府公開資料
air <- 空氣
air <- air[, - c(1,2,3)] 去除前三個文字變數
air <- air[complete.cases(air$Status),] 去除Status是NA的值
< air[is.na(air)] <- 0 將資料內的NA轉成0
> dim(air)
[1] 71 8 目前71筆資料 8個變數 "Status" "SO2" "CO" "O3" "PM10" "PM2.5" "NO2" "NO"
#切分訓練及測試樣本
> set.seed(20170630)
> t_idx <- sample(seq_len(n),size=round(0.7*n))
> traindata <- air[t_idx,]
> testdata <- air[-t_idx,]
#準備訓練樣本組答案
> trainLabels <- traindata$Status
#去除兩個樣本組答案
> knntrain <- traindata[,-c(1)]
> knntest <- testdata[,-c(1)]
#計算k值(幾個鄰居)通常可以用資料數的平方根
> kv <-round(sqrt(n))
#建立模型
> prediction <- knn(train = knntrain, test = knntest, cl = trainLabels, k = kv)
> prediction
[1] 普通 普通 良好 普通 良好 普通 普通 普通 良好 普通 普通 普通
[13] 良好 普通 普通 普通 普通 普通 良好 普通 普通
Levels: 良好 普通
#評估正確性-使用混淆矩陣
> cm <- table(x=testdata$Status,y=prediction, dnn = c("實際","預測"))
> cm
預測
實際 良好 普通
良好 2 3
普通 3 13
有3個實際是普通但被預測成良好,有3個實際是良好但被預測成普通
#準確性
> accuracy <- sum(diag(cm)) / sum(cm)
> accuracy
[1] 0.7142857
結果顯示 當K值=8 的時候 準確率為0.7142857 還不錯~~~
參考:http://ithelp.ithome.com.tw/articles/10187804
留言列表