close

 

 

 無聊玩玩~~

空氣品質 KNN分類

K-NN使用點間的距離為分類標準,當新的觀測值準備預測時,演算法會計算出和她接近最多的類目標點,比方說,k值=5,觀測值比較靠近其中3個目標點時,演算法就會採用多數票來決定分類結果。

 

根據變數["SO2","CO","O3","PM10","PM2.5","NO2","NO"]歸類空氣品質["Status" ]是良好還普通

 

********************************

資料來源:政府公開資料

AIR資料  

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

 

arrow
arrow
    全站熱搜

    to52016 發表在 痞客邦 留言(0) 人氣()