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

基于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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/11848.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移动App测试实战—专项测试

移动App测试实战—专项测试 我们在进行了手工的功能测试之后,也开发了一些自动化测试用例,并且做了性能测试之后,测试工作看似比较完整了。但是当我们的App在大量的用户那里被安装和使用的时候,还是会有很多我们之前没有预料的问题…

微服务+springcloud+springcloud alibaba学习笔记【Hystrix(豪猪哥)的使用】(6/9)

Hystrix(豪猪哥)的使用 6/91、Hystrix熔断器概述2、HyStrix重要概念3、hystrix案例3.1 新建模块 Cloud-provider-hystrix-payment80013.2 创建带降级的order模块 Cloud-comsumer-feign-hystrix-order803.3 配置服务降级:3.3.1 服务降级 Cloud-provider-h…

3年功能测试无情被裁,3个月学习自动化测试重新开始........

前言 不知不觉在软件测试行业工作了3年之久,虽然说我是主做的功能测试,但是我也一直是兢兢业业的呀,不曾想去年7月份无情被辞的消息让我感到一阵沉重。我曾经一直坚信自己的技能和经验足以支撑我在这个领域的未来,但现实却告诉我&…

日撸 Java 三百行day31

文章目录day31 整数矩阵及其运算面向对象思想java异常处理java中的getter和setter方法代码day31 整数矩阵及其运算 面向对象思想 结合之前day7和day8面向过程开发,只关注了矩阵加法和矩阵乘法的功能。而day31是面向对象开发,一个矩阵类,在这…

傅盛“追风”GPT,猎户星空春天来了?

GPT的横空出世,让冷清已久的商用服务机器人市场,又有了“新故事”。 从技术底层逻辑而言,服务机器人受到这类新技术的影响会更为明显。因为抛开硬件,服务机器人的内核其实就是AI,GPT大模型的出现显然成了现阶段该产业进…

KDSL-82轻型升流器

一、产品概述 KDSL-82 1000A大电流发生器是一种作为检验用的电流源,大电流试验器采用ARM芯片控制输出工艺和大容量的环形变压器,并且配有液晶屏显示的表计,同时显示一、二次电流、变比和秒表接点(或电位)的动作时间。外配铝合金机箱&#xff…

Mybatis核心

文章目录前言一、Configuration二、MappedStatement三、SqlSession四、Executor五、StatementHandler六、ParameterHandler七、ResultSetHandler八、TypeHandler总结前言 SqlSession是MyBatis提供的面向用户的操作数据库API。那么MyBatis底层是如何工作的呢?为了解…

SpringCloud-Gateway实现网关

网关作为流量的入口,常用的功能包括路由转发、权限校验、限流等Spring Cloud 是Spring官方推出的第二代网关框架,由WebFluxNettyReactor实现的响应式的API网关,它不能在传统的servlet容器工作,也不能构建war包。基于Filter的方式提…

​破除“内卷”,什么才是高阶智能座舱更优方案?

下一代智能座舱雏形已现。 从多屏互动到舱内全场景交互,从中控娱乐快速延伸到更多元化的车内娱乐平台;越来越多元化功能集中上车,座舱空间的营造(包括氛围灯、香氛等)以及AR技术的应用等等,开始深刻影响着…

关于ROS机器人-文心一言和CatGPT怎么看-

交流截图: 文字版本如下(W-文心;C-猿如意): 如何通过蓝桥云课学习ROS机器人? W: 如果你想通过蓝桥云课学习ROS机器人,可以按照以下步骤进行: 确认ROS机器人的版本和教…

能自动翻译的软件-最精准的翻译软件

批量翻译软件是一种利用自然语言处理技术和机器学习算法,可以快速翻译大量文本内容的工具。批量翻译软件可以处理多种格式的文本,包括文档、网页、邮件、PDF等等,更符合掌握多语言的计算机化需求。 147CGPT翻译软件特点: 1.批量任…

opencv:介绍 SIFT(尺度不变特征变换)及其使用(一)

在本章中 我们将了解 SIFT 算法的概念 我们将学习如何找到 SIFT 关键点和描述符。 理论 在过去的几章中,我们了解了一些角点检测器,如 Harris 等。它们具有旋转不变性,这意味着即使图像旋转,我们也可以找到相同的角点。这是显而易见的,因为旋转后的图像中的角点仍然是角点…

(链表专题) 328. 奇偶链表 ——【Leetcode每日一题】

328. 奇偶链表 给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。 第一个 节点的索引被认为是 奇数 , 第二个 节点的索引为 偶数 ,以此类推。 请注意,偶…

腾讯云轻量应用服务器搭建网站教程(WordPress为例)

腾讯云轻量应用服务器搭建WordPress网站教程,先安装WordPress应用镜像,然后远程连接轻量应用服务器获取WP用户名和密码,域名DNS解析到轻量服务器IP地址,登陆WordPress后台管理全过程,腾讯云百科来详细说下腾讯云轻量服…

弹塑性力学--应变硬化

在单轴拉伸试验中,当应力超过屈服强度后,需要施加更大的载荷产生更大的应力,才会使材料发生更多的塑性变形。随着塑性应变的增加,材料变得更强、更难以变形了,因此这个阶段称为“应变硬化”(Strain Hardeni…

Vue语法糖<script setup>详解,用最快的方式让你看懂和<script>的区别

前言 Vue3出来已经3年了&#xff0c;但是前两天在百度上搜索有关setup语法糖的细节时&#xff0c;发现很多博客关于语法糖细节部分&#xff0c;还是讲的很粗糙&#xff0c;因此决定自己来写一篇入门的博客&#xff0c;方便大家快速上手。 <script setup>简介 它是Vue3…

项目沟通管理流程的6大规范步骤

1、建立沟通计划 需要对整个项目的沟通对象、沟通内容、沟通频率、沟通方法等各方面&#xff0c;进行计划和安排。尤其需明确沟通机制&#xff0c;建立完整的沟通计划。并根据项目沟通的具体情况&#xff0c;实时添加和修订计划&#xff0c;以保证沟通管理计划的持续适用性。 项…

拐点!智能座舱破局2023

“这是我们看到的整个座舱域控渗透率&#xff0c;2022年是8.28%&#xff0c;主力的搭载车型仍然是30-35万区间。”3月29日&#xff0c;2023年度&#xff08;第五届&#xff09;高工智能汽车市场峰会上&#xff0c;高工智能汽车研究院首发《2022-2025年中国智能汽车产业链市场数…

每日学术速递4.11

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.InstantBooth: Personalized Text-to-Image Generation without Test-Time Finetuning 标题&#xff1a;InstantBooth&#xff1a;无需测试时间微调的个性化文本到图像生成 作者&a…

HTTP HTTPS简介

一篇文章带你走进HTTP HTTPS场景复现核心干货HTTP/HTTPS简介&#xff08;简单比较&#xff09;HTTP工作原理HTTPS作用场景复现 最近在对前端的深入学习过程中&#xff0c;接触到了与网络请求相关的内容&#xff0c;于是打算出一个专栏&#xff0c;从HTTP与HTTPS入手&#xff0…