kNN算法及其python&R实现
iris数据集,这一教科书级别的数据,分类前不需要做任何数据预处理什么的,相当的理想!但请注意你自己的数据99%的可能需要做预处理。
下面分别用R语言和Python来实现iris数据集的分类:
R语言:
library(class) data(iris) #观察数据 str(iris) #查看iris数据结构 head(iris) #前5行 table(iris$Species) #样本类别频数下· #采样(对于此分类问题,更加建议分层抽样) samples <- sample(nrow(iris),size = round(nrow(iris)*0.8),replace = F) iris_train <- iris[samples,] iris_train <- iris_train[,1:4] iris_test <- iris[-samples,] iris_test <- iris_test[,1:4] iris_train_labels <- iris[samples,5] iris_test_labels <- iris[-samples,5] iris_test_pred <- knn(train = iris_train,test = iris_test,cl = iris_train_labels,k=21) TF <- table(iris_test_labels,iris_test_pred) accuracy <- (sum(diag(TF))/sum(TF)) cat("正确率",accuracy)
python语言:
# -*- coding: utf-8 -*- ''' py3 KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=1, **kwargs) n_neighbors: 默认值为5,表示查询k个最近邻的数目 algorithm: {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},指定用于计算最近邻的算法,auto表示试图采用最适合的算法计算最近邻 leaf_size: 传递给‘ball_tree’或‘kd_tree’的叶子大小 metric: 用于树的距离度量。默认'minkowski与P = 2(即欧氏度量) n_jobs: 并行工作的数量,如果设为-1,则作业的数量被设置为CPU内核的数量 查看官方api:http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier ''' from sklearn import neighbors from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn import cross_validation iris = datasets.load_iris() #注意传入数据的数据结构和数据类型,方便比葫芦画瓢 data = iris.data target = iris.target #下面是随机划分训练集和测试集,分类算法更建议用分层抽样 x_train,x_test, y_train,y_test = train_test_split(data,target,test_size=0.2) knn = neighbors.KNeighborsClassifier() #取得knn分类器 knn.fit(x_train,y_train) #导入数据进行训练 res = knn.predict(x_test) print(res) #查看预测结果 print(iris.target_names[res]) #查看预测结果对应的标签 score = knn.score(data, target) #模型正确率 print('Accuracy:',score) sample_data = [[ 6.5, 3. , 5.2, 2. ],] #预测新数据,注意这是个多维数组 print(knn.predict(sample_data)) print(knn.predict_proba(sample_data)) #返回概率数组 #下面是交叉验证,判断此模型稳定性(计算平均正确率) cross_validation.cross_val_score( knn, data, target,cv=5 )
参考文献:
kNN算法及其python&R实现的更多相关文章
- 3.朴素贝叶斯和KNN算法的推导和python实现
前面一个博客我们用Scikit-Learn实现了中文文本分类的全过程,这篇博客,着重分析项目最核心的部分分类算法:朴素贝叶斯算法以及KNN算法的基本原理和简单python实现. 3.1 贝叶斯公式的推 ...
- 分类算法——k最近邻算法(Python实现)(文末附工程源代码)
kNN算法原理 k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法.它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样 ...
- 机器学习实战(笔记)------------KNN算法
1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例: 假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...
- KNN算法实现手写体区分
KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理.我这里只是实现了基础的识别方法,能力有限,没有数据处理方 ...
- [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案
看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...
- day-9 sklearn库和python自带库实现最近邻KNN算法
K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...
- 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验
实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...
- KNN及其改进算法的python实现
一. 马氏距离 我们熟悉的欧氏距离虽然很有用,但也有明显的缺点.它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求.例如,在教育研究中,经常遇到对人的分析和判别,个体 ...
- [Python] 应用kNN算法预测豆瓣电影用户的性别
应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...
随机推荐
- Java BaseDao
BaseDao类: package dao; import java.sql.*; public class BaseDao { private static final String driver ...
- C语言结构体及函数传递数组參数演示样例
注:makeSphere()函数返回Sphere结构体,main函数中.调用makeSphere()函数,传递的第一个參数为数组,传递的数组作为指针.
- 【VBA】修改Excle的标题
打开Excle的时候,有时候不需要显示Miscrosoft Excle,如下图标记,想把标记内的内容替换为:管理系统 操作代码: Public Sub 修改标题() Application.Capti ...
- MySql RESTRICT CASCADE SET NULL
主表,从表[MySql] //http://my.oschina.net/cart/blog/277624 空.RESTRICT.NO ACTION 删除:从表记录不存在时,主表才可以删除.删除从表, ...
- Oracle dos连接数据库基本操作
sqlplus / as sysdba;(sqlplus 用户名/密码@ip:端口:数据库实例 as sysdba;) ;(设置显示多少列,pagesize:;每页多少记录) select * fro ...
- Shiro学习小结
1. What is Shiro? Apache旗下一个开源的Java权限框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权.加密.会话管理等功能,组成了一个通用的安全认证框架 ...
- showModalDialog后如何刷新父页面
最近一个项目使用到的.在网上查了好久,有的可行,有的就不行.总结一下吧.方案一:父页面:window.showModalDialog('User.jsf?USERCODE='001'&Rnd= ...
- centos针对postgres出现的postgresql Ident authentication failed for user
首先:将/var/lib/..../pg_hba.conf文件中的indent全修改为trust即可. #local all all ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- mysql时间操作(时间差和时间戳和时间字符串的互转)
mysql时间操作(时间差和时间戳和时间字符串的互转) 两个时间差: MySQL datediff(date1,date2):两个日期相减 date1 - date2,返回天数. select dat ...