红酒评分预测实战:相关性分析、回归与KNN分类全流程

发布时间:2026/10/31 7:13:38

红酒评分预测实战:相关性分析、回归与KNN分类全流程 简介这份数据分析大作业资料面向高校学生与数据分析初学者围绕红酒数据集展开完整的统计建模实践可用于课程作业参考、回归与分类方法的学习复盘。压缩包内共1个docx文档约202KB以文字与代码截图形式记录了从数据预处理到建模的完整过程。内容涵盖红酒11项物理属性与评分的关联性分析借助R语言cor函数筛选出挥发性酸度、硫酸盐、酒精等关键变量并给出多元线性回归拟合结果与R方值评估同时包含主成分回归的降维思路、主成分表达式推导及还原为原变量的系数计算末尾还涉及KNN简单分类。读者可从中获取相关性分析、回归诊断、主成分回归的完整实现路径与结果解读适合作为统计方法落地练习的参考范例。目前已有4270人学习下载。1. 从一份“跑完就忘”的红酒分析说起数据分析大作业最容易翻车的地方不是模型不够花哨而是从头到尾没有一条能自圆其说的主线。我见过太多红酒数据集分析代码跑通了、图截了一堆答辩时被问一句“所以挥发性酸度到底该控制在多少”就卡住。这份方案要解决的就是这个问题围绕红酒 11 项物理属性与 0 到 10 分感官评分用相关性分析做降维、用多元线性回归和主成分回归做拟合、用 KNN 做评分档位分类最后落到“怎么调参数才能提分”的结论上。适合正在做数据分析课设、统计建模大作业或者需要一份可复现分析流程参考的人。整套流程用 Python 做数据清洗与 KNN 实现用 R 做统计建模两边各取所长。2. 需求与数据底座11 个属性和 1559 条样本怎么用2.1 先把问题定义清楚再谈模型红酒评分预测这件事本质上是一个“多变量对单目标”的建模问题。输入是 11 个连续型物理属性输出是 0 到 10 的整数评分。但直接把这当成回归问题扔进模型通常会得到一个 R² 不上不下的结果因为评分本身是离散的、主观的5 分和 6 分之间的界限在物理属性上未必清晰。我一般会把任务拆成两层第一层是解释性分析回答“哪些属性真正影响评分”用相关性分析和回归系数说话第二层是预测性分析回答“给定一组属性评分大概落在哪一档”用 KNN 做分类。两层任务共用同一份数据底座但评价标准不同——回归看 R² 和残差分类看准确率和近邻一致性。这样拆的好处是即使回归拟合度不理想分类那边还能给出可解释的结果不至于整份作业只有一个干巴巴的模型。数据本身的分布特征必须先摸清楚。评分范围从 3 到 8绝大多数样本集中在 5 分和 6 分这意味着类别严重不平衡。如果直接做分类模型只要无脑预测 5 或 6 就能拿到很高的准确率但这种“准确”没有意义。所以后续 KNN 部分我会特别强调“只看最近邻评分”的评估方式而不是笼统的全局准确率。2.2 数据读取与格式转换的工程细节原始数据是 csv 格式正文里先转成 xlsx 再用 R 读取这个步骤看似多余实际上是为了让 R 的readxl包能稳定识别列名和数据类型。转换用 Python 完成核心就是 pandas 一行读写import pandas as pd # 读取原始 csv指定第一行为列名 df pd.read_csv(winequality-red.csv, sep;) # 转存为 xlsx保留列名方便 R 端 readxl 读取 df.to_excel(redwine.xlsx, sheet_nameSheet1, indexFalse) # 快速检查评分分布确认 5/6 分占比 print(df[quality].value_counts().sort_index())这段代码的关键不在转换本身而在sep;这个参数。红酒数据集的原始 csv 常用分号分隔直接默认逗号读会得到一列乱七八糟的字符串。转换后列名保持英文R 端read_excel(redwine.xlsx, sheet1, col_namesT)就能直接拿到干净的数据框。评分分布那行打印建议保留它是后面判断类别不平衡的依据答辩时被问到“为什么 KNN 准确率不高”这张分布图就是第一层解释。2.3 变量命名与降维前的相关性摸底11 个属性在建模时统一用 x1 到 x11 编号评分记为 q。这个编号体系要在整份方案里保持一致否则后面回归公式和主成分表达式会对不上。相关性分析用 Spearman 系数而不是 Pearson原因是评分是离散序数Spearman 对单调关系更稳健library(readxl) df - read_excel(redwine.xlsx, sheet 1, col_names TRUE) # Spearman 相关性矩阵对离散评分更稳健 cor_matrix - cor(df, method spearman) print(round(cor_matrix, 3))跑完之后重点看 q 那一列。x4 残糖、x6 游离二氧化硫、x9 pH 值与评分的相关性明显偏低这三项在后续回归里可以先剔除达到降维目的。x2 挥发性酸度、x10 硫酸盐、x11 酒精与评分相关性较高是重点候选变量。同时变量之间也有值得注意的关联pH 与非挥发性酸度高度相关酒精与密度负相关这些在解释回归系数时要提前心里有数避免把共线性导致的系数异常当成“新发现”。3. 回归建模从全变量到主成分的两条路径3.1 多元线性回归的变量筛选逻辑第一版回归把剔除低相关变量后的 8 个属性全部放进去# 剔除 x4、x6、x9 后的全变量回归 lm_full - lm(q ~ x1 x2 x3 x5 x7 x8 x10 x11, data df) summary(lm_full)结果里会有部分系数没通过显著性检验这是正常的——变量多了共线性和冗余信息就会冒出来。这时候不要急着删变量先看哪些系数 p 值大、哪些系数符号和常识相反。通常的做法是逐步收紧只保留相关性最高且业务上说得通的三个变量x2 挥发性酸度、x10 硫酸盐、x11 酒精。# 三变量精简回归 lm_sol2 - lm(q ~ x2 x10 x11, data df) summary(lm_sol2)这版模型所有系数都通过检验R² 为 0.6589。这个数字不算高但在这个数据集上属于合理区间因为评分的主观成分本来就无法被物理属性完全解释。回归方程写出来是 q -1.22130·x2 0.67898·x10 0.30920·x11 2.61104。系数符号值得在报告里展开挥发性酸度系数为负说明酸度越高评分越低硫酸盐和酒精系数为正与酿酒常识一致。3.2 留出样本的预测验证建模时特意留了一组数据不参与拟合用来做样本外验证。给定 x20.31、x100.66、x1111实际评分为 6new - data.frame(x2 0.31, x10 0.66, x11 11) # 置信区间均值响应的范围 lm_conf - predict(lm_sol2, new, interval confidence) # 预测区间单个新样本的范围比置信区间宽 lm_pred - predict(lm_sol2, new, interval prediction)置信区间和预测区间要分清前者描述的是“在这个属性组合下平均评分大概在哪”后者描述的是“下一瓶这样的酒评分可能落在哪”。答辩时如果只报置信区间会被追问为什么区间这么窄。预测区间更宽才是对单瓶酒的真实预期。这组预测结果与实际 6 分比较接近说明三变量模型虽然 R² 一般但方向是对的。3.3 主成分回归处理共线性的另一条路三变量模型的问题是信息损失大8 个变量里只用了 3 个。主成分回归的思路是把 11 个属性压缩成少数几个互不相关的主成分再用主成分对评分做回归既保留信息又规避共线性wine - read_excel(redwine.xlsx, sheet 1, col_names TRUE, range A1:K1559) # 标准化后做主成分分析 wine.pr - princomp(wine, cor TRUE) summary(wine.pr, loadings TRUE) # 提取前五个主成分得分 pre - predict(wine.pr) z1 - pre[, 1]; z2 - pre[, 2]; z3 - pre[, 3] z4 - pre[, 4]; z5 - pre[, 5] # 用前五个主成分对评分回归 redd - data.frame(q df[12], z1, z2, z3, z4, z5) lm_solp - lm(q ~ z1 z2 z3 z4 z5, data redd) summary(lm_solp)cor TRUE这个参数不能省它表示用相关矩阵而非协方差矩阵做主成分等价于先标准化。不标准化的话酒精含量这种数值大的变量会主导主成分方向分析就失真了。取前五个主成分是看累积方差贡献率决定的通常前五个能覆盖大部分变异。主成分回归的系数基本通过检验但代入一组主成分得分预测时结果与实际 6 分有一定偏差说明降维过程中损失了部分与评分直接相关的信息。3.4 主成分系数还原回原始变量主成分回归的系数是相对于 z1 到 z5 的报告里必须还原成原始变量的形式才有解释力。还原公式是原始系数 (各主成分回归系数 × 对应特征向量) / 原始变量标准差常数项再用均值修正XX - cor(wine) A - eigen(XX)$vectors # 特征向量矩阵 beta - coef(lm_solp) # 主成分回归系数 X.bar - c(8.3623, 0.5273, 0.2719, 2.5371, 0.0878, 15.7054, 46.4037, 0.9968, 3.309, 0.6583, 10.4114) # 各变量均值 X.sd - c(1.7415, 0.1791, 0.1947, 1.4103, 0.0471, 10.4627, 32.9041, 0.00189, 0.154, 0.1695, 1.0657) # 各变量标准差 # 前四个主成分的系数还原第五个按需补上 coef - (beta[2]*A[,1] beta[3]*A[,2] beta[4]*A[,3] beta[5]*A[,4]) / X.sd beta0 - beta[1] - sum(X.bar * coef) c(beta0, coef) # 第一个是常数项其余依次对应 x1 到 x11这段代码里均值和标准差是直接从数据算出来的写死数值只是为了展示结构实际跑的时候应该用colMeans(wine)和apply(wine, 2, sd)动态获取。还原后的系数符号和量级要和三变量模型对照看如果挥发性酸度在两条路径下都是负向、酒精都是正向结论就站得住。4. KNN 分类实现距离度量与 k 值选择4.1 为什么选这五个属性做距离度量KNN 的核心是距离距离的核心是选哪些维度。全部 11 个属性都放进去残糖和 pH 这些低相关变量会稀释真正有区分度的信号。方案里选的是 x2 挥发性酸度、x5 氯化物、x7 总二氧化硫、x10 硫酸盐、x11 酒精五项这五项在相关性分析和回归里都表现出与评分的关联且彼此之间共线性不算严重。数据读取用 openpyxl 逐行解析只取需要的列import openpyxl def read_excel(input_file_name, objects): 从 xlsx 读取数据只保留参与距离计算的列 workbook openpyxl.load_workbook(input_file_name) table1 workbook[Sheet1] rows table1.max_row cols table1.max_column for row in range(1, rows): obj [] for col in range(cols): # 列索引对应 x2、x5、x7、x10、x11 及评分 if col in (1, 4, 6, 9, 10, 11): obj.append(table1.cell(row 1, col 1).value) objects.append(obj) return objects列索引的判断是这段代码最容易出错的地方。openpyxl 的cell(row, col)是 1 起始而循环里的 col 是 0 起始所以取值时要col 1。另外行循环从 1 开始、取值用row 1是为了跳过表头。这些偏移量如果搞混读出来的数据会整体错位一列后面距离计算全错而且不会报错属于典型的“静默翻车”。4.2 距离计算与分类决策距离用欧氏距离五项属性差的平方和再开方。分类时取最近的 30 个点做多数表决但代码里实际只统计了最近点的评分def knndis(nowa, objects): 计算测试点到所有训练样本的欧氏距离 distances [] for i in range(len(objects)): distance 0 for j in range(5): # 前五列是参与距离计算的属性 distance (objects[i][j] - nowa[j]) ** 2 distances.append(distance ** 0.5) return distances def classify(distances, objects): 取最近邻的评分做统计 d {} for i in range(30): idx distances.index(min(distances)) item objects[idx][5] # 第六列是评分 d[item] d.get(item, 0) 1 distances[idx] 100 # 已选点置大值避免重复选中 return ddistances[idx] 100这行是防止同一个最近邻被反复选中的关键。如果不置大值min每次都返回同一个点30 次循环统计的都是同一个评分结果毫无意义。这个细节在教科书伪代码里经常被省略但实际写代码时漏掉就是血泪教训。4.3 准确度不高的原因与评估方式调整实测下来全局准确率不理想原因有两层一是评分 5 和 6 占了绝大多数类别不平衡导致多数表决天然偏向这两个档位二是五个属性与评分的相关性本身就不算强距离近不代表评分一定相同。这时候如果还盯着全局准确率会陷入“调 k 值调到过拟合”的坑。更合理的评估方式是看“最近邻评分是否一致”——即距离测试点最近的那个训练样本它的评分和测试点实际评分相同的比例。这个指标反映的是局部结构的可信度比全局准确率更能说明 KNN 在这个数据集上到底有没有用。如果最近邻一致性明显高于随机猜测就说明属性空间中确实存在局部聚集KNN 的思路是成立的只是被类别不平衡拖累了全局指标。报告里把这两个指标并列呈现比只报一个数字更有说服力。5. 避坑与排查这类分析最容易翻车的五个点5.1 相关性系数选错结论方向就偏了现象是 Pearson 和 Spearman 算出来的相关性排序不一致不知道该信哪个。原因是评分是 0 到 10 的离散序数且分布集中在 5 和 6Pearson 假设的线性关系和正态性都不满足。解决办法是统一用 Spearman并在报告里说明选择理由。如果两种方法结论差异很大恰恰说明变量间关系不是线性的这时候更不该用 Pearson 硬套。5.2 主成分回归忘了标准化现象是主成分载荷里酒精含量一家独大其他变量几乎看不见。原因是princomp默认用协方差矩阵数值量级大的变量会主导主成分方向。解决办法是加cor TRUE或者手动scale()后再做。这个坑的隐蔽性在于代码不报错、结果也能跑但解释完全失真。检查方法很简单看各变量的标准差如果相差一个数量级以上就必须标准化。5.3 KNN 的距离被量纲绑架现象是氯化物这种数值很小的属性在距离里几乎不起作用酒精含量主导了所有距离计算。原因是欧氏距离对量纲敏感数值大的属性天然贡献大。解决办法是在计算距离前对五个属性做归一化或标准化。方案里为了保持和原文一致没有显式标准化但实际交付时这一步应该补上否则 KNN 的分类结果实际上只由酒精一个变量决定。5.4 留出样本的预测区间被误读现象是答辩时被问“为什么预测区间这么宽”答不上来。原因是把置信区间和预测区间混为一谈。置信区间是均值响应的范围随样本量增大而收窄预测区间是单个新观测的范围永远比置信区间宽且不会因为样本量增大而无限收窄。报告里两个都给出来并注明各自含义是最稳妥的做法。5.5 类别不平衡被当成模型失败现象是 KNN 准确率只有五六成觉得算法有问题。原因是 5 分和 6 分样本占绝对多数任何分类器只要偏向这两类就能拿到不低的准确率但这不是模型学到了东西。解决办法是换评估指标看最近邻一致性、看混淆矩阵里少数类的召回而不是只看总体准确率。如果少数类完全预测不出来再考虑调整 k 值或引入类别权重。6. 验收与答辩怎么把这份分析讲成一个完整故事验收这份红酒分析我一般按三条线走。第一条线看数据底座是否干净评分分布图有没有、相关性矩阵是否用 Spearman、降维依据是否写清楚。第二条线看模型链条是否闭合三变量回归的系数符号能不能用酿酒常识解释、主成分回归的还原系数和三变量模型是否方向一致、留出样本的预测值和实际值差多少。第三条线看分类部分是否诚实有没有承认类别不平衡、评估指标是不是只有全局准确率、最近邻一致性和全局准确率的差距有没有解释。答辩时最容易被追问的三个问题提前准备好答案。第一个是“R² 只有 0.6589模型是不是不行”——回答要点是评分含主观成分物理属性解释力有上限0.6589 在这个数据集上属于合理区间且系数全部显著、方向正确模型的可解释性比拟合度更重要。第二个是“主成分回归和三变量回归哪个更好”——不要给绝对答案说清楚前者保留信息多但解释成本高后者简洁但信息损失大两者系数方向一致恰恰互相印证了结论的稳健性。第三个是“KNN 准确率不高为什么还留着”——回答要点是分类任务的价值不在准确率数字而在验证属性空间的局部结构最近邻一致性高于随机水平就说明思路成立。下面这张表可以放在答辩 PPT 最后一页把关键指标和结论对齐分析环节核心指标结论指向相关性分析Spearman 系数排序x2、x10、x11 与评分关联最强三变量回归R²0.6589系数全显著挥发性酸负向硫酸盐、酒精正向主成分回归前五主成分累积贡献率还原系数方向与三变量模型一致KNN 分类最近邻一致性 vs 全局准确率局部结构成立受类别不平衡拖累还有一个实操技巧把“如何提高红酒评分”的结论单独做一页直接对应到三个可操作建议——降低挥发性酸度、适度提高硫酸盐、保证酒精含量。这三条建议必须能从回归系数直接推出来不能是查资料抄来的泛泛之谈。答辩老师最认这种“模型结论落到业务动作”的闭环。从那以后我每次带这类数据分析作业都强制要求先画评分分布、再定评估指标模型跑完必须能回答“所以呢”这个问题。模型是工具故事才是交付物。希望帮到你。本文还有配套的精品资源点击获取
延伸阅读

更多相关文章

2026/10/31 7:13:38

红酒评分数据分析全流程:相关性、回归、PCA与KNN实战

简介:这份数据分析大作业资料面向高校学生与数据分析初学者,围绕红酒数据集展开完整的统计建模实践,可用于课程作业参考、回归与分类方法的学习复盘。压缩包内共1个docx文档,约202KB,以文字与代码截图形式记录了从数据…

2026/10/31 7:13:38

Linux 离线阅读 CHM 手册:chmsee 安装、解析与全文检索实战

简介:面向 Linux 桌面用户与开发者的一款 CHM 文档阅读工具源码包,解决 Linux 系统原生无法直接打开微软编译的 CHM 帮助文件这一痛点,尤其适合需要频繁查阅中文技术手册、离线帮助文档的读者。压缩包共 111 个文件,约 355KB&…

2026/10/31 7:08:34

【无标题】原子类 AtomicReference 与 AtomicReferenceFieldUpdater

AtomicReference 和 AtomicReferenceFieldUpdater 的核心区别在于抽象层次与内存布局。前者是一个“容器”,你把引用放进去才能原子更新;后者是一个“工具”,直接对目标对象已有的 volatile 字段进行原子操作,通常是为了节省内存或…

2026/10/31 11:54:09

大模型训练中的损失函数设计与优化实践

1. 大模型损失函数核心解析 损失函数作为大模型训练中的导航仪,直接决定了模型优化的方向和效率。在预训练、微调和对齐三个阶段,损失函数的设计理念和数学表达存在显著差异。我们先从最基础的预训练阶段开始拆解。 1.1 预训练阶段:交叉熵损…

2026/10/31 11:54:09

Med-PaLM医疗大模型:技术突破与临床挑战

1. Med-PaLM医疗大模型的技术突破与临床潜力 2023年7月,谷歌在《自然》杂志发布的Med-PaLM医疗大模型引起了行业震动。这个基于Flan-PaLM架构优化的专业模型,在MultiMedQA评估基准测试中展现出惊人的临床知识处理能力——其回答准确率达到了92.6%&#x…

2026/10/31 11:54:09

H5多端流量变现:集福卡活动技术解析

1. 项目概述:集福字卡活动H5多端流量变现方案 去年春节帮某电商平台开发集福卡活动时,我深刻体会到多端流量聚合的价值。这个开源项目本质上是一套可复用的营销活动引擎,核心逻辑是通过H5页面承载集卡玩法,同时无缝对接抖音、快手…

2026/10/31 11:54:09

大模型训练中的损失函数:原理、应用与优化策略

1. 大模型损失函数核心概念解析 在大模型训练过程中,损失函数扮演着"导航仪"的关键角色。它通过量化模型预测与真实值之间的差异,为参数优化提供明确方向。2023年AGNES大模型技术报告显示,损失函数设计直接影响模型收敛速度和最终性…

2026/10/31 11:54:08

微信小程序停车预约系统开发实践与优化

1. 项目背景与需求分析 停车难问题已经成为现代城市发展的痛点之一。根据2023年中国城市停车指数报告显示,北上广深等一线城市的停车位缺口平均达到35%,高峰时段寻找车位的时间成本高达15-30分钟。这种背景下,基于微信小程序的停车预约系统应…

2026/10/31 11:49:08

API版本管理策略与实践指南

1. API版本管理的基本概念与挑战当API作为不同系统间的通信桥梁时,版本管理直接关系到服务的稳定性和用户体验。我经历过一次惨痛的教训:某次未做版本控制的API变更导致客户端大面积崩溃,这让我深刻认识到版本策略的重要性。1.1 为什么需要版…

2026/10/30 20:55:10

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/30 20:55:10

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/30 20:55:09

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/31 0:02:41

猫狗目标检测数据集:VOC/COCO/YOLO三格式一体化实战包

简介:本资源是一套面向计算机视觉初学者与YOLO目标检测实践者的猫狗图像数据集及配套开发工具包,专为快速上手目标检测模型训练而设计。资源包含1000张真实场景高清猫狗图片,标注质量高,同时提供VOC(XML)、…

2026/10/31 0:02:41

HDU2017多校标程复现:算法竞赛工程化真题沙盒

简介:本资源为2017年HDU多校联合训练第一场官方配套资料,面向ACM程序设计竞赛备赛学生、算法爱好者及高校编程集训队成员,旨在提供权威解题参考与完整测试验证环境。压缩包共40个文件,含15份C标程(覆盖全部赛题&#x…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑