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

news2024/10/5 17:24:49

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.10-4.11学习总结

目录 MySql 关系型库数据 mysql启动方法 SQL通用语法 查询表 创建表 Mysql数据类型 表操作-修改 MySQL图形化界面 DCL 函数 约束 JDBC MySql 关系型库数据 建立在关系模型基础上,由多张相互连接的二维表组成的数据库 特点: 使用表存储数据,格式…

【C++】哈希(位图,布隆过滤器)

今天的内容是哈希的应用:位图和布隆过滤器 目录 一、位图 1.位图概念 2.位图的应用 二、哈希切分 三、布隆过滤器 1.布隆过滤器的概念 2.布隆过滤器的应用 四、总结 一、位图 1.位图概念 今天的内容从一道面试题开始引入: 给40亿个不重复的无符…

chapter-5 数据库设计

以下课程来源于MOOC学习—原课程请见:数据库原理与应用 考研复习 引言 设计的时候: 我们为什么不能设计成R(学号,课程号,姓名,所咋系,系主任,成绩)? 因为存在数据冗余…

BGP与OSPF混合组网

如图。R1和R2之间是OSPF Area 0,R23和R4之间是OSPF Area 1,R5和R6之间是OSPF Area2。除了R1和R2之间的cost是100,其余链路的cost都是10. AR1/2/3/4/5/6之间通过Loopback口建立IBGP全互联邻居关系,并且都是AS11520,和外部建立EBGP邻居访问100.100.100.1的网络。(不确定图中…

企业内训视频如何防范被盗录和下载?

企业内训视频如何防范被盗录和下载? 1. 【防下载】:实现视频文件的加密混淆、防下载; 2. 【防录屏】:A.(ID跑马灯防录屏)实现不同学员观看视频,实时显示该学员的姓名手机号时间;B.&…

线性代数 --- 最小二乘在直线拟合上的应用与Gram-Schmidt正交化(下)

在上一篇文章中,通过一个例子来说明最小二乘在拟合直线时所发挥的作用,也通过两个插图的比较进一步的阐明了投影与最小化e之间的密切关系。 线性代数 --- 最小二乘在直线拟合上的应用与Gram-Schmidt正交化(上)_松下J27的博客-CSD…

【UE Sequencer系列】08-副镜头切换、摄像机绑定摇臂的使用、摄像机绑定滑轨的使用

目录 一、副镜头切换 二、摄像机绑定摇臂的使用 三、摄像机绑定滑轨的使用 一、副镜头切换 1. 为“shot_05”新建镜头(复制资产,创建新的关卡序列) 同样的步骤再创建一个“Shot_07_02” 此时我们就可以对“Shot_07”中的两个副镜头进行切换…

最简单明了vite+ts+sass无loaders配置,利用ts读取scss文件中的变量并在App.vue中使用

做后端的,前端水平有限,最近练手,遇到了左侧菜单是展开关闭的问题,接触到了scss中定义全局变量,利用typescript读取的问题,在此记录一下 vitetssass 环境:package.json中内容如下,…

利用KMean算法进行分类

什么是KMean算法?简要说明什么是KMean算法,以及KMean算法的应用场景。 KMeans是一种聚类算法,它将数据集分成K个不同的类别(簇),使得每个数据点都属于一个簇,并且每个簇的中心点(质…

网络通信的安全性(HTTPS)

网络通信的安全性(HTTPS) 互联网是由无数网络节点组成的,两点之间的通信一般会经过很多个网络节点,因此,我们难免会有疑问: 作为发送方,我发送的消息内容会不会被中间人看到?&…

4.2 矩阵乘法的Strassen算法

1.伪代码以及用到的公式 ​ ​ ​ 2.代码 package collection; ​ public class StrassenMatrixMultiplication {public static int[][] multiply(int[][] a, int[][] b) {int n a.length;int[][] result new int[n][n]; ​if (n 1) {result[0][0] a[0][0] * b[0][0]…

为什么是毫末智行成为了DriveGPT的破壁人?

作者 | 魏启扬 来源 | 洞见新研社 毫末智行有着天生的紧迫感。 很多科技公司一年才举办一次的品牌日活动,毫末智行硬是办成了一个季度一次,活动频次的提高,则意味着组织内部新陈代谢的提速,从研发到落地乃至运营,都要…

ChatGPT 这个风口,普通人怎么抓住?

最近在测试ChatGPT不同领域的变现玩法,有一些已经初见成效,接下来会慢慢分享出来。 今天先给大家分享一个,看完就能直接上手的暴力引流玩法。 所需工具: 1)ChatGPT(最好是plus版,需要保证快速…

一个开源的大型语言模型LLaMA论文简单解读,LLaMA: Open and Efficient Foundation Language Models

一个开源的大型语言模型LLaMA论文解读,LLaMA: Open and Efficient Foundation Language Models返回论文和资料目录 1.导读 LLaMA 是 Meta AI 发布的包含 7B、13B、33B 和 65B 四种参数规模的基础语言模型集合,LLaMA-13B 仅以 1/10 规模的参数在多数的 …

ASEMI代理AD8638ARJZ-REEL7原装ADI车规级AD8638ARJZ-REEL7

编辑:ll ASEMI代理AD8638ARJZ-REEL7原装ADI车规级AD8638ARJZ-REEL7 型号:AD8638ARJZ-REEL7 品牌:ADI /亚德诺 封装:SOT-23-5 批号:2023 安装类型:表面贴装型 引脚数量:5 类型&#xff1…

初谈 ChatGPT

引子 最近,小编发现互联网中的大 V 突然都在用 ChatGPT 做宣传:“ChatGPT不会淘汰你,能驾驭ChatGPT的人会淘汰你”、“带领一小部分人先驾驭ChatGPT”。 确实,ChatGPT这个新生事物,如今被视为蒸汽机、电脑、iPhone 般的…

【ChatGPT 】国内无需注册 openai 即可访问 ChatGPT:ChatGPT Sidebar 浏览器扩展程序的安装与使用

一、前言 问题:国内注册 openai 账号麻烦,新必应有部分人也无法登录成功,存在域名单点登录失败等问题,所以无法真正使用 ChatGPT 解决:大部分人仅需使用 ChatGPT 的搜索功能,无需真正对话,需要…

云计算技术的现状和未来发展趋势分析

近年来,随着互联网、物联网、大数据等技术的不断发展,云计算技术也随之崛起并迅速发展。云计算技术作为一种新的计算模式,不断地改变着我们的生活和工作方式,成为了当今IT产业的一股强大的力量。本文将详细探讨云计算技术的现状和…

第十天面试实战篇

目录 一、springboot的常用注解? 二、springmvc常用注解? 三、mysql的内连接和外连接有什么区别?比如有两张表:A和B内连接只返回两个表A和B的交集部分 四、redis分布式锁的缺点有哪些? 五、如何使用reddssion解决r…

多个渠道成功销售的秘诀速递

将您的电子商务业务扩展到多个渠道销售似乎是一项艰巨的任务吗?但如果有了正确的多渠道增长战略,这可能是实现快速增长的好方法。当然,您需要考虑借助一些工具与策略,而SaleSmartly(ss客服)可以为您提供。 …