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种电影类 ...
随机推荐
- Android高级控件(三)—— 使用Google ZXing实现二维码的扫描和生成相关功能体系
Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...
- Nginx:解析HTTP配置的流程
参考资料:深入理解Nginx(陶辉) 书中有详细的讲解,这里只用本人的理解梳理一下该流程. 一点提议:对于像我这样的新手,面对暂时看不懂章节,建议先往下看一下(可能就会有新的理解或灵感),而不要死磕在 ...
- iOS项目工程添加.a文件遇到的Dsymutil Error
将.a文件加入工程,很多教程讲的都是: 右键选择Add->Existing Files…,选择.a文件和相应的.h头文件.或者将这两个文件拖入XCode工程目录结构中,在弹出的界面中勾选Copy ...
- Jmeter3.0-多维度的图形化HTML报告
本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...
- sql server 执行大.sql文件
打开cmd执行:osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql 执行后会提示输入密码.
- 修改eclipse的repository路径
(1)首先修改你的settings.xml文件,(如果没有settings.xml文件,可以下载maven的官网把maven的插件下载下来,在apache-maven-3.5.0\conf\ 目录下有 ...
- Mongodb搭建
1.配置yum源,创建/etc/yum.repos.d/mongodb-org-3.2.repo文件,添加如下文件内容: [mongodb-org-3.2] name=MongoDB Reposito ...
- Android 你可能忽略的提高敲代码效率的方式 (转)
每日推荐 Eyepetizer-in-Kotlin:一款简约的小视频app,带你走进kotlin 作为学习kotlin的一款app,在撸代码的过程中学习kotlin的语法及特性. Eyepetizer ...
- Python 内建的filter()函数用于过滤序列。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9 ...
- Hadoop学习笔记(二)——zookeeper使用和分析
分布式架构是中心化的设计.就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护 ...