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
)

参考文献:

1.《机器学习实战》
2.《机器学习与R语言》
3.《机器学习》周志华 第10章 10.1 k近邻学习
 

kNN算法及其python&R实现的更多相关文章

  1. 3.朴素贝叶斯和KNN算法的推导和python实现

    前面一个博客我们用Scikit-Learn实现了中文文本分类的全过程,这篇博客,着重分析项目最核心的部分分类算法:朴素贝叶斯算法以及KNN算法的基本原理和简单python实现. 3.1 贝叶斯公式的推 ...

  2. 分类算法——k最近邻算法(Python实现)(文末附工程源代码)

    kNN算法原理 k最近邻(k-Nearest Neighbor)算法是比较简单的机器学习算法.它采用测量不同特征值之间的距离方法进行分类,思想很简单:如果一个样本在特征空间中的k个最近邻(最相似)的样 ...

  3. 机器学习实战(笔记)------------KNN算法

    1.KNN算法 KNN算法即K-临近算法,采用测量不同特征值之间的距离的方法进行分类. 以二维情况举例:         假设一条样本含有两个特征.将这两种特征进行数值化,我们就可以假设这两种特种分别 ...

  4. KNN算法实现手写体区分

    KNN算法在python里面可以使用pip install指令安装,我在实现之前查看过安装的KNN算法,十分全面,包括了对于手写体数据集的处理.我这里只是实现了基础的识别方法,能力有限,没有数据处理方 ...

  5. [Python]基于K-Nearest Neighbors[K-NN]算法的鸢尾花分类问题解决方案

    看了原理,总觉得需要用具体问题实现一下机器学习算法的模型,才算学习深刻.而写此博文的目的是,网上关于K-NN解决此问题的博文很多,但大都是调用Python高级库实现,尤其不利于初级学习者本人对模型的理 ...

  6. day-9 sklearn库和python自带库实现最近邻KNN算法

    K最近邻(k-Nearest Neighbor,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的 ...

  7. 吴裕雄--天生自然python机器学习实战:K-NN算法约会网站好友喜好预测以及手写数字预测分类实验

    实验设备与软件环境 硬件环境:内存ddr3 4G及以上的x86架构主机一部 系统环境:windows 软件环境:Anaconda2(64位),python3.5,jupyter 内核版本:window ...

  8. KNN及其改进算法的python实现

    一. 马氏距离 我们熟悉的欧氏距离虽然很有用,但也有明显的缺点.它将样品的不同属性(即各指标或各变量)之间的差别等同看待,这一点有时不能满足实际要求.例如,在教育研究中,经常遇到对人的分析和判别,个体 ...

  9. [Python] 应用kNN算法预测豆瓣电影用户的性别

    应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...

随机推荐

  1. Android高级控件(三)——&#160;使用Google ZXing实现二维码的扫描和生成相关功能体系

    Android高级控件(三)-- 使用Google ZXing实现二维码的扫描和生成相关功能体系 摘要 如今的二维码可谓是烂大街了.到处都是二维码.什么都是二维码,扫一扫似乎已经流行到习以为常了,今天 ...

  2. Nginx:解析HTTP配置的流程

    参考资料:深入理解Nginx(陶辉) 书中有详细的讲解,这里只用本人的理解梳理一下该流程. 一点提议:对于像我这样的新手,面对暂时看不懂章节,建议先往下看一下(可能就会有新的理解或灵感),而不要死磕在 ...

  3. iOS项目工程添加.a文件遇到的Dsymutil Error

    将.a文件加入工程,很多教程讲的都是: 右键选择Add->Existing Files…,选择.a文件和相应的.h头文件.或者将这两个文件拖入XCode工程目录结构中,在弹出的界面中勾选Copy ...

  4. Jmeter3.0-多维度的图形化HTML报告

    本文转载于推酷:http://www.tuicool.com/articles/BNvuEzr 在JMeter3.0之前,官方只提供在工具的UI上对测试结果部分维度的图形化展示,这对我带来了两方面的困 ...

  5. sql server 执行大.sql文件

    打开cmd执行:osql -S 127.0.0.1 -U sa -P sa -i d:\test.sql 执行后会提示输入密码.

  6. 修改eclipse的repository路径

    (1)首先修改你的settings.xml文件,(如果没有settings.xml文件,可以下载maven的官网把maven的插件下载下来,在apache-maven-3.5.0\conf\ 目录下有 ...

  7. Mongodb搭建

    1.配置yum源,创建/etc/yum.repos.d/mongodb-org-3.2.repo文件,添加如下文件内容: [mongodb-org-3.2] name=MongoDB Reposito ...

  8. Android 你可能忽略的提高敲代码效率的方式 (转)

    每日推荐 Eyepetizer-in-Kotlin:一款简约的小视频app,带你走进kotlin 作为学习kotlin的一款app,在撸代码的过程中学习kotlin的语法及特性. Eyepetizer ...

  9. Python 内建的filter()函数用于过滤序列。

    例如,在一个list中,删掉偶数,只保留奇数,可以这么写: def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9 ...

  10. Hadoop学习笔记(二)——zookeeper使用和分析

    分布式架构是中心化的设计.就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护 ...