目录

StandardScaler的使用

KNeighborsClassifier的使用

代码实现


数据集介绍

数据集为一份红酒数据,总共有 178 个样本,每个样本有 13 个特征,这里不会为你提供红酒的标签,你需要自己根据这 13 个特征对红酒进行分类。部分数据如下图:

StandardScaler的使用

由于数据中有些特征的标准差比较大,例如 Proline 的标准差大约为 314。如果现在用 kNN 算法来对这样的数据进行分类的话, kNN 算法会认为最后一个特征比较重要。因为假设有两个样本的最后一个特征值分别为 1 和 100,那么这两个样本之间的距离可能就被这最后一个特征决定了。这样就很有可能会影响 kNN 算法的准确度。为了解决这种问题,我们可以对数据进行标准化。

标准化的手段有很多,而最为常用的就是 Z Score 标准化。Z Score 标准化通过删除平均值和缩放到单位方差来标准化特征,并将标准化的结果的均值变成 0 ,标准差为 1。

sklearn 中已经提供了 Z Score 标准化的接口 StandardScaler,使用代码如下:

from sklearn.preprocessing import StandardScaler
data = [[0, 0], [0, 0], [1, 1], [1, 1]]
# 实例化StandardScaler对象
scaler = StandardScaler()
# 用data的均值和标准差来进行标准化,并将结果保存到after_scaler
after_scaler = scaler.fit_transform(data)
# 用刚刚的StandardScaler对象来进行归一化
after_scaler2 = scaler.transform([[2, 2]])
print(after_scaler)
print(after_scaler2)

打印结果如下:

[[-1. -1.][-1. -1.][ 1.  1.][ 1.  1.]]
[[3. 3.]]

根据打印结果可以看出,经过准换后,数据已经缩放成了均值为 0,标准差为1的分布。

KNeighborsClassifier的使用

想要使用 sklearn 中使用 kNN 算法进行分类,只需要如下的代码(其中 train_feature、train_label 和 test_feature 分别表示训练集数据、训练集标签和测试集数据):

from sklearn.neighbors import KNeighborsClassifier
#生成K近邻分类器
clf=KNeighborsClassifier()
#训练分类器
clf.fit(train_feature, train_label)
#进行预测
predict_result=clf.predict(test_feature)

但是当我们需要调整 kNN 算法的参数时,上面的代码就不能满足我的需求了。这里需要做的改变在clf=KNeighborsClassifier()这一行中。

KNeighborsClassifier() 的构造函数包含一些参数的设定。比较常用的参数有以下几个:

  • n_neighbors :即 kNN 算法中的 K 值,为一整数,默认为 5;
  • metric :距离函数。参数可以为字符串(预设好的距离函数)或者是callable对象。默认值为闵可夫斯基距离;
  • p :当 metric 为闵可夫斯基距离公式时可用,为一整数,默认值为 2,也就是欧式距离。

代码实现

函数需要完成的功能是使用 KNeighborsClassifier 对 test_feature 进行分类。其中函数的参数如下:

  • train_feature : 训练集数据,类型为 ndarray;

  • train_label : 训练集标签,类型为 ndarray;

  • test_feature : 测试集数据,类型为 ndarray。

from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import StandardScaler
import numpy as np
def classification(train_feature, train_label, test_feature):'''对test_feature进行红酒分类:param train_feature: 训练集数据,类型为ndarray:param train_label: 训练集标签,类型为ndarray:param test_feature: 测试集数据,类型为ndarray:return: 测试集数据的分类结果'''#********* Begin *********##实例化StandardScaler函数scaler = StandardScaler()train_feature = scaler.fit_transform(np.array(train_feature).reshape(133,13))test_feature = scaler.transform(np.array(test_feature).reshape(45,13))#生成K近邻分类器clf = KNeighborsClassifier()#训练分类器clf.fit(train_feature, train_label.astype('int'))#进行预测predict_result = clf.predict(test_feature)return predict_result #********* End **********#

机器学习——kNN算法之红酒分类相关推荐

  1. Python编程实现用KNN算法对红酒分类功能

    一.任务要求 导入红酒数据集(load_wine),编写Python代码,完成以下任务: 1.实现计算平均酒精含量的功能: 2.实现对数据的标准化: 3.使用kNN算法实现红酒分类功能 二.代码实现 ...

  2. Python 基于SVM和KNN算法的红酒分类

    Python 机器学习之红酒分类问题 文章目录 Python 机器学习之红酒分类问题 前言 一.问题和目标是什么 1.原题 2.题目分析 二.算法简介 三.代码实现 1.算法流程框架 2.第三方库调用 ...

  3. 机器学习 —— KNN算法简单入门

    机器学习 -- KNN算法简单入门 第1关:手动实现简单kNN算法 1 KNN算法简介 1.1 kNN 算法的算法流程 1.2 kNN 算法的优缺点 1.3 编程要求+参数解释 2. 代码实现 3. ...

  4. 基于K-最近邻算法构建红酒分类模型

    基于K-最近邻算法构建红酒分类模型 描述 Wine红酒数据集是机器学习中一个经典的分类数据集,它是意大利同一地区种植的葡萄酒化学分析的结果,这些葡萄酒来自三个不同的品种.数据集中含有178个样本,分别 ...

  5. 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例

    ** 机器学习knn算法学习笔记使用sklearn库 ,莺尾花实例. 具体knn算法是怎样的我这里就不再详细论述.在这里我注意总结我使用knn算法进行一个分类的分析 ** 分析过程 1.前期准备 引入 ...

  6. 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)

    机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...

  7. 机器学习KNN算法实践:预测城市空气质量

    出品:Python数据之道 作者:叶庭云 整理:Lemon 机器学习KNN算法实践 预测城市空气质量 「Python数据之道」导读: 之前在公众号上分享过 "图解KNN算法" 的内 ...

  8. 机器学习——KNN算法

    机器学习--KNN算法 文章目录 机器学习--KNN算法 前言 一.KNN原理基础 二.sklearn的基本建模流程 三.KNN算法调优:选取最优的K值 四.KNN中距离的相关讨论 1. KNN使用的 ...

  9. java knn文本分类算法_使用KNN算法的文本分类.PDF

    使用KNN算法的文本分类.PDF 第31 卷 第8 期 计 算 机 工 程 2005 年4 月 Vol.31 8 Computer Engineering April 2005 人工智能及识别技术 文 ...

最新文章

  1. 数据库创建索引的原则
  2. appium学习【二】:用try捕获异常后,用例的执行结果为pass
  3. linux shell脚本 引入外部shell文件
  4. Kudu:为大数据快速分析量身定制的 Hadoop 存储系统
  5. iOS中去除 Warning警告
  6. 循序渐进linux——基础知识、服务器搭建、系统管理、性能调优、集群应用_第四讲,Proxmox部署与应用...
  7. 数据库事务的隔离机制
  8. adb打开网页_android 使用指定浏览器打开网页
  9. java 看虚拟机内存_java 虚拟机内存介绍
  10. ubuntu无法登陆mysql_ubuntu11.04mysql报错、无法正常工作、无法登陆mysql
  11. mysql主从同步读写分离
  12. 哪些蔬菜基本不会使用农药?
  13. Qt 子窗体嵌入父窗体
  14. 信号与线性系统管致中第六版pdf_第五讲 信号流图
  15. c语言问号的用法及举例,问号的使用方法和另类用法有哪些
  16. 域控服务器怎么开策略,组策略(域和域服务的搭建)
  17. deepin安装tftp服务器_Win10频发蓝屏,深度Deepin系统,调试华为AC和AP
  18. 30多年前,日本是如何输掉芯片战争的?
  19. springboot权限系统
  20. 20 | WAF:如何为漏洞百出的Web应用保驾护航?

热门文章

  1. 程序分析-基于SVF实现AnderSen指针分析算法
  2. couchdb无法访问5984端口问题
  3. 批处理实现复杂密码(包含大小写字母数字符号)
  4. channel通道常见使用场景
  5. HTML实现点击阅读导航,跳转到页面这个内容的开始部分。
  6. 基于开源硬件Banana Pi 的工业物联网关设计
  7. 基于51单片机的指纹密码锁
  8. AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理和区块链技术的乘客智能报警系统》案例的界面简介、功能介绍分享之总篇
  9. 图像融合算法java_图像融合 NSCT算法 matlab
  10. Authing 正式加入 W3C 组织,将参与相关国际标准制定