KNN算法

作者: 蓝色滑行 | 来源:发表于2018-12-10 21:30 被阅读0次

1.最邻近域法(KNN算法)

1.1算法原理

特点是不必事先建立全局的判别公示或规则,当新数据需要分类时,根据每个样本和原有样本之间的距离,取最近K个样本点的众数或均值作为新样本的预测值,这种算法的思路体现了一句老话“近朱者赤近墨者黑”。
KNN算法注意点:(1)一般使用欧氏距离计算观测距离;(2)需要对数据进行无量纲处理;(3)选取合适的k值,可以使用AUC(Area Under Carve)抽取k值;


KNN.png

1.2 R中实现KNN算法

Problem:如何判定一个新客户在婚恋网上注册相亲的成功率?
Solution:寻找和新客户情况特别相仿的男士对比,看看他们相亲成功率有多大,由彼推其。

加载数据集

setwd("D:/《用商业案例学R语言数据挖掘》教材代码及数据/data) #设定工作路径
orgData<-read.csv("date_data2.csv") #读入数据
y<-orgData[,c("Dated")] #取出因变量
x<-orgData[,c(1,2,3,4)] #取出“income”、“attractive“”assets”和 “educlass”自变量

定义极差标准化函数标准化数据

normalize <- function(x) {
return((x - min(x)) / (max(x) - min(x)))
}
x<- as.data.frame(lapply(x, normalize)) #使用lapply循环赋值x
data<-cbind(y,x) #使用cbind函数将y和x合并
datay<-as.factor(datay) #目标变量(因变量)factor型处理
summary(data)

构建训练集和测试集

set.seed(110) #设定种子值
select<-sample(1:nrow(data),length(data$y)*0.7) # 使用sample抽样函数,从全数据中抽取目标变量数值的70%样本
train=data[select,-1] #获得抽取样本(70%)中不包括第一列(y目标变量)的数值列表作为train
test=data[-select,-1] #获得非抽取样本(30%)中不包括第一列(y目标变量)的数值列表作为test
train.y=data[select,1] #获得抽取样本(70%)中第一列(y目标变量)列表
test.y=data[-select,1] #获得非抽取样本(70%)中第一列(y目标变量)列表

使用KNN算法,设定k=10

library(class)
y_hat<-knn(train = train,test = test,cl=train.y,k=10)

模型验证,将预测的类别与实际类别对比。

accuracy.knn<-sum(y_hat==test.y)/length(test.y)
accuracy.knn
agreement_KNN<- y_hat==test.y
table(agreement_KNN)

召回率和精确度

require(gmodels)
t<-CrossTable(x =test.y, y = y_hat,prop.chisq=FALSE)

tprop.row[2,2] #召回率 tprop.col[2,2] #精确度

使用循环选择合适的k值,参考指标为混淆矩阵的准确率、精准率和召回率

ROC<-data.frame()
for (i in seq(from =1,to =15,by =1)){
y_hat<-knn(train = train,test = test,cl=train.y,k=i)
require(gmodels)
t<-CrossTable(x =test.y, y = y_hat,prop.chisq=FALSE)
accuracy.knn<-sum(y_hat==test.y)/length(test.y)#准确率

t$prop.row[2,2]#召回
t$prop.col[2,2]#精确度、命中率
out<-data.frame(i,accuracy.knn,t$prop.row[2,2],t$prop.col[2,2])
ROC<-rbind(ROC,out)

}
names(ROC)<-c("n","accuracy","Recall","Precision")

相关文章

  • KNN与K-Means算法的区别

    内容参考:Kmeans算法与KNN算法的区别kNN与kMeans聚类算法的区别 KNN-近邻算法-分类算法 思想:...

  • knn算法

    knn算法 knn算法简介 邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法。所谓K...

  • KNN近邻算法总结

    目录 一、KNN近邻算法思想 二、KNN模型三大要素 三、KNN算法实现步骤 四、KNN算法的KD树实现 五、总结...

  • 机器学习笔记汇总

    kNN算法:K最近邻(kNN,k-NearestNeighbor)分类算法

  • 01 KNN算法 - 概述

    KNN算法全称是K近邻算法 (K-nearst neighbors,KNN) KNN是一种基本的机器学习算法,所谓...

  • 利用Python进行数字识别

    思路 通过Python实现KNN算法。而KNN算法就是K最近邻(k-Nearest Neighbor,KNN)分类...

  • 机器学习系列(六)——knn算法原理与scikit-learn底

    KNN算法 本篇将介绍knn算法,knn算法因为思想非常简单,运用的数学知识比较浅显,是非常适合机器学习入门的算法...

  • kNN算法

    一. kNN算法 kNN(k-NearestNeighbor),即k最近邻算法,是机器学习算法中最基础的入门算法。...

  • 机器学习笔记:K-近邻算法(KNN)

    一、介绍 KNN算法称为邻近算法,或者说K邻近算法(kNN,k-NearestNeighbor),分类算法。 KN...

  • 降维与度量学习

    1、kNN kNN算法即k近邻算法,是常用的有监督学习算法。它是懒惰学习的代表算法,没有显式的训练过程。kNN在收...

网友评论

      本文标题:KNN算法

      本文链接:https://www.haomeiwen.com/subject/xsqkhqtx.html