监督学习(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值,来进行模型的调优。