監督學習(Supervised Learning):
從給定標註的訓練集中學習出一個函數,根據這個函數爲新數據進行標註。
無監督學習(Unsupervised Learning):
從給定無標註的訓練集中學習出一個函數,根據這個函數爲所有數據標註。
分類(Classification):
分類算法通過對已知類別訓練數據集的分析,從中發現分類規則,以此預測
新數據的類別,分類算法屬於監督學習的類型。
KNN算法(K Nearest Neighbors)
K近鄰節點算法
KNN算法從訓練集中找到和新數據最接近的K條記錄,然後根據他們的主要分類
來決定新數據的類別。
訓練集(Train Set):
訓練集,是用來訓練模型或確定模型參數的數據。
測試集(Test Set):
測試集,是用來驗證模型的準確性的數據。
交叉驗證(Cross Validation):
一般我們使用70%的數據,作爲訓練集,剩下30%作爲測試集,測試集的測試
結果使用交叉表的形式表示,因此該方法稱爲交叉驗證。
抽樣方法
sample(x,size,replace=FALSE)
x 待抽樣的樣本
size 抽樣的數量
replace 是否可放回抽樣,默認爲FALSE
knn 在”class”包中
install.packages(“class”)
knn(train,test,cl,k=1)
- train 訓練數據
- test 測試數據
- cl 訓練數據的正確結果
- k KNN中的K值,默認值爲1
模型調優,調整K值
代碼實現:
#install.packages("class");
library(class)
#https://en.wikipedia.org/wiki/Iris_flower_data_set
#https://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%A3%AE%E9%B8%A2%E5%B0%BE%E8%8A%B1%E5%8D%89%E6%95%B0%E6%8D%AE%E9%9B%86
total <- nrow(iris);
index <-sample(1:total, total*0.7)
iris.train <- iris[index, ]
iris.test <- iris[-index, ]
result.KNN <-knn(
train=subset(iris.train, select=-Species),
test=subset(iris.test,select=-Species),
cl=iris.train$Species, k=3
)
table(iris.test$Species, result.KNN)
result.KNN
setosa versicolor virginica
setosa 15 0 0
versicolor 0 14 1
virginica 0 1 14
可以通過調整K值,來進行模型的調優。