R分类算法--KNN算法

监督学习(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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

可以通过调整K值,来进行模型的调优。

阅读更多
文章标签: R 算法
个人分类: R
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭