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

描述

Wine红酒数据集是机器学习中一个经典的分类数据集,它是意大利同一地区种植的葡萄酒化学分析的结果,这些葡萄酒来自三个不同的品种。数据集中含有178个样本,分别属于三个已知品种,每个样本含有13个特征(即13个化学成分值)。任务是根据已知的数据集建立分类模型,预测新的葡萄酒数据的类别。

任务内容包括:

1、 加载红酒数据并使用Matplotlib将数据可视化

2、 将数据集随机拆分为训练集和测试集

3、 构建K-最近邻算法分类模型并评估其准确性

源码下载链接

环境

  • 操作系统:Windows 10、Ubuntu18.04

  • 工具软件:Anaconda3 2019、Python3.7

  • 硬件环境:无特殊要求

  • 依赖库列表

    matplotlib        3.3.4
    numpy           1.19.5
    pandas          1.1.5
    scikit-learn    0.24.2
    mglearn        0.1.9
    

任务分析

红酒数据集包括178条红酒样本数据,每个样本有13个特征值(13个化学成分测量值),同时还给出了这178条红酒样本对应的品种(共三个种类——class0、class1、class2)。我们需要根据这些数据建立红酒分类模型,并能够预测新的样本数据的品种。因为样本数据中已经包含了对应的红酒品种(即数据的标签),所以这是一个监督学习中的分类(Classification)问题。

本任务涉及以下几个环节:

a)加载、查看红酒数据集

b)数据可视化

c)将数据拆分为训练集与测试集

d)构建模型并评估、预测

任务实施

1、 加载、查看红酒数据集

红酒数据集是Scikit-learn自带的数据集,我们通过load_wine ()函数来加载。

from sklearn.datasets import load_wine
from sklearn.model_selection import  train_test_split
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt# 加载wine数据集
wine = load_wine()
print(wine.keys()) # 查看数据集构成print('shape of data:', wine.data.shape) # 查看样本数据的形状
print('shape of target:', wine.target.shape) # 查看标签数据的形状
print('target_names:', wine.target_names) # 查看红酒类别名称
print('feature_names:', wine.feature_names) # 样本的十三个特征名称

输出结果:

dict_keys(['data', 'target', 'frame', 'target_names', 'DESCR', 'feature_names'])
shape of data: (178, 13)
shape of target: (178,)
target_names: ['class_0' 'class_1' 'class_2']
feature_names: ['alcohol', 'malic_acid', 'ash', 'alcalinity_of_ash', 'magnesium', 'total_phenols', 'flavanoids', 'nonflavanoid_phenols', 'proanthocyanins', 'color_intensity', 'hue', 'od280/od315_of_diluted_wines', 'proline']

通过keys()函数可以查看数据集中有哪些Keys(即数据项),依次查看其数据项。

使用pandas查看数据:

# 使用pandas查看样本数据
df = pd.DataFrame(wine.data, columns=wine.feature_names)
df

输出结果:

2、 数据集可视化

红酒数据样本有13个特征,任意2个都可以形成1幅散点图,这里我们随机选2个特征,生成10幅散点图,查看数据分布情况。

import random# wine数据集可视化
fig = plt.figure(figsize=(16,25)) # 定义画板尺寸data = wine.data # 样本数据
target = wine.target # 数据标签
target_names = wine.target_names  # 标签名称
feature_names = wine.feature_names # 特征名称# 任选2个特征生成散点图,共生成10个子图
for i in range(10):random_feature = random.sample(range(13), 2) # 任选2个特征ax = fig.add_subplot(5, 2, i+1) # 添加子图(5行2列,第i+1个子图)for j in range(3): # 依次显示每个种类(共3类)的数据ax.scatter(data[:,random_feature[0]][target==j], data[:,random_feature[1]][target==j], label=target_names[0])ax.set_xlabel(feature_names[random_feature[0]], fontsize=15)ax.set_ylabel(feature_names[random_feature[1]], fontsize=15)ax.legend()plt.show()

显示结果:

红酒数据集有13个特征,可以形成一个13维的空间,为了方便显示,我们只是在2维空间里(每次随机选2个特征作为X轴和y轴)对数据进行简单可视化。

可视化的目的是更好地了解数据。从随机生成的散点图中可以发现,有些特征组合在2维空间上就已经比较容易分类(如图2和图4),有些特征组合在二维空间上的重叠度较高,不容易分类,需要考虑更多维度。

3、 将数据集拆分为训练集和测试集

Scikit-learn提供了train_test_split函数将红酒数据集(形状为(178, 13))随机拆分为训练集和测试集,参数除了样本数据和数据标签外,还包括:

  • test_size参数:测试集比例(默认为0.25)。
  • random_state参数:随机数种子(为了固定随机结果,便于数据重现。如果不指定,每次拆分结果都不同)。
# 拆分数据集
# test_size=0.25(25%作为测试集,75%作为训练集)
# random_state=0(随机数种子,固定随机结果,便于数据重现)
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.25, random_state=0)
print(X_train.shape, X_test.shape)

输出结果:

(133, 13) (45, 13)

4、 构建K-NN模型,评估并预测

# 构建模型
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X_train, y_train) # 拟合训练数据# 评估模型
score = model.score(X_test, y_test)
print('Score:{:.2f}'.format(score))# 预测红酒种类
y_pred = model.predict(X_test[:5]) # 预测测试集前五个样本的品种
print(y_pred) # 打印预测结果
print(y_test[:5]) # 打印实际品种

输出结果:

Score:0.73
[0 1 1 0 1]
[0 2 1 0 1]

基于K-最近邻算法构建红酒分类模型相关推荐

  1. 基于K-最近邻算法构建鸢尾花分类模型

    基于K-最近邻算法构建鸢尾花分类模型 一 任务描述 鸢尾花(Iris)数据集是机器学习中一个经典的数据集.假设有一名植物学爱好者收集了150朵鸢尾花的测量数据:花瓣的长度和宽度以及花萼的长度和宽度,这 ...

  2. R语言构建文本分类模型:文本数据预处理、构建词袋模型(bag of words)、构建xgboost文本分类模型、基于自定义函数构建xgboost文本分类模型

    R语言构建文本分类模型:文本数据预处理.构建词袋模型(bag of words).构建xgboost文本分类模型.基于自定义函数构建xgboost文本分类模型 目录

  3. R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理、构建词袋模型、构建xgboost文本分类模型、基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化

    R语言构建文本分类模型并使用LIME进行模型解释实战:文本数据预处理.构建词袋模型.构建xgboost文本分类模型.基于文本训练数据以及模型构建LIME解释器解释多个测试语料的预测结果并可视化 目录

  4. Python构建基于elkan优化算法的K-Means聚类模型

    Python构建基于elkan优化算法的K-Means聚类模型 目录 Python构建基于elkan优化算法的K-Means聚类模型 #elkan优化算法

  5. 基于改进的k最近邻算法的单体型重建问题An Improved KNN Algorithm for Haplotype Reconstruction Problem

    基于改进的k最近邻算法的单体型重建问题 An Improved KNN Algorithm for Haplotype Reconstruction Problem DOI: 10.12677/csa ...

  6. python机器学习案例系列教程——K最近邻算法(KNN)、kd树

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 K最近邻简介 K最近邻属于一种估值或分类算法,他的解释很容易. 我们假设一个人的优秀成为设定为1.2.3.4.5.6.7.8.9.10 ...

  7. 算法基础:k最近邻算法

    本博客所有内容均整理自<算法图解>,欢迎讨论交流~ 了解过机器学习这个概念,一定知道有一种名为k最近邻的算法,简称KNN. 对于k最近邻算法的定义,百度百科是这样给出的:K最近邻(k-Ne ...

  8. Python实现BOA蝴蝶优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 蝴蝶优化算法(butterfly optimization al ...

  9. Python实现ABC人工蜂群优化算法优化支持向量机分类模型(SVC算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 人工蜂群算法(Artificial Bee Colony, AB ...

最新文章

  1. 《Java从入门到精通》第九章学习笔记
  2. 8天学通MongoDB——第七天 运维技术
  3. 蜜糖变砒霜:90%美国公司区块链项目将不再重启
  4. 项目中用到的BAPI合集
  5. 【Spring】Spring MVC文件上传--整合bootstrap-fileinput和jQuery-File-Upload
  6. JVM调优:-XX:+PrintCommandLineFlags 查看程序使用的默认JVM参数
  7. Java如何支持函数式编程?
  8. html css图片展开动画,8个实用炫酷的HTML5图片动画应用
  9. jQuery事件绑定函数:on()与bind()的差别
  10. h标签在seo中的作用(技术优化)
  11. 关于平面设计海报怎么做?——黎乙丙
  12. PHP中的PEAR是什么?
  13. 教程篇(7.0) 01. FortiGate安全 简介及初始配置 ❀ Fortinet 网络安全专家 NSE 4
  14. 华为RH2288 V3装centos7
  15. lerna管理多项目
  16. gitlab报错 fatal index-pack failed error RPC failed result
  17. 各大搜索引擎网站收录提交入口
  18. springboot基于vue焕心眼镜商城的设计与实现毕业设计源码091546
  19. Linux下搭建SFTP服务器
  20. Error creating bean with name 'eurekaClientConfigBean': Singleton bean creation not allowed!

热门文章

  1. 账号登陆界面制作(Axure)
  2. 我的世界服务器神秘修改节点,节点换能器 (Node Transducer)
  3. LTE中小区选择流程及其S准则详解
  4. 证明余弦函数的导数(cosx)`=-sinx
  5. 会计三大报表的勾稽关系【转】
  6. kmeans对自己的图像数据集聚类(及肘部法求最佳K值)
  7. pytest(四)--测试用例setup和teardown
  8. 使用VSCode配合keil来编写Cortex-M程序
  9. 【190515】网页爬虫VC++源码下载源代码
  10. 冒泡法排序c语言程序指针,C语言_冒泡排序(指针)