拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于Python的葡萄酒质量检测:从理化指标到机器学习评分预测

简介本资源是一个面向计算机、电子信息工程及数学等专业本科生的机器学习实践项目聚焦葡萄酒质量预测这一典型回归与分类任务适用于课程设计、期末大作业或毕业设计参考。压缩包共含若干文件涵盖Python源码含数据预处理、特征工程、多种模型训练与评估脚本、UCI公开葡萄酒质量数据集红/白葡萄酒CSV文件及详细说明文档含环境配置、算法原理简述、结果分析与运行指引整体大小为26.59MB。目前已有2694人学习下载反映出其在教学实践场景中的广泛认可度。读者可直接复现完整的机器学习流程从数据探索性分析EDA、异常值处理、相关性筛选到随机森林、XGBoost、SVM等多模型对比实验最终实现质量等级分类与评分回归双任务并获得可解释性分析与模型优化建议具备较强的教学示范性与工程参考价值。为什么不直接看品酒师笔记而要训练一个机器学习模型这是我在整理这个项目时被问到最多的问题。我的答案是品酒师的经验是离散的、主观的、难以复制的而一瓶酒的理化指标却是客观的、连续的、可批量检测的。如果我们能找到化学成分与感官评分之间的映射关系就等于把“经验”固化成了一套可执行的算法。这个基于Python的葡萄酒质量检测项目做的正是这件事。它利用机器学习算法对葡萄酒的11项理化指标如酒精含量、酸度、糖分、pH值等进行建模从而预测一款酒的品质评分。项目里包含了完整的源码、训练数据和说明文档既能作为机器学习入门的第一个端到端实战项目也能为酒类生产质检、供应链选品提供一条“数据驱动”的思路。这篇文章我会把项目的完整链路拆开讲清楚数据集长什么样、特征怎么处理、模型怎么选、评估指标怎么看、调参踩过哪些坑以及源码目录里每个文件是干什么的。不绕弯子直接按实操顺序来。1. 葡萄酒质量检测项目到底在做什么1.1 一个被问了很多次的问题机器学习能测出好不好喝吗严格来说这个项目预测的不是“好不好喝”这种主观体验而是预测“专业品酒师会打多少分”。在UCI的Wine Quality数据集里每一款酒都有一个0到10的评分这个评分来自多位品酒师的综合评判。模型的任务就是根据酒的化学成分去逼近这个分数。有一个很直观的类比这就像你从来没吃过某家餐厅但通过分析它的食材新鲜度、调料配比、后厨卫生记录就能较为准确地推断出顾客会给出几星评价。听起来有点玄但化学成分和风味之间的确存在强相关性——酒精带来醇厚感酸度影响爽口度残糖决定甜感单宁通过色度、总酚等间接体现负责结构感。这些指标组合起来基本决定了一款酒的基本盘。所以这个项目本质上是在做一件非常“传统”的事建立化学成分与品质标签之间的统计规律然后把这条规律自动化、模型化。对酒厂来说这意味着在装瓶之前就能预测批次质量对学习者来说这是一个麻雀虽小五脏俱全的机器学习全流程样本。1.2 项目适用的场景和技术选型如果你正处于“会写Python基础语法但不知道能做什么”的阶段这个项目是很好的进阶跳板。它不涉及复杂的深度学习也不需要GPU一台普通笔记本电脑就能跑完所有训练和评估。技术栈全部基于Python生态数据处理与分析pandas、numpy可视化探索matplotlib、seaborn可选机器学习建模scikit-learn包含模型、预处理、评估模块集成学习增强xgboost可选但强烈建议装上整个流程下来你会接触到机器学习项目的经典组成部分数据清洗、特征分析、数据集划分、模型训练、交叉验证、超参数搜索、结果评估。更重要的是这套流程不是某个教程里的“屠龙之技”而是我在实际项目中反复验证过的标准动作。做完这个项目再去碰其他结构化数据的分类或回归任务你会发现套路是相通的。2. 数据集上手11个化学指标和那一列评分2.1 数据来源与样本规模项目使用的是UCI机器学习库公开的Wine Quality数据集。这组数据由葡萄牙米尼奥大学的研究者收集包含红葡萄酒red和白葡萄酒white两个子集。很多人在一开始会踩一个坑把两个子集合在一起训练。我的建议是——如果你想追求更高的精度最好分开建模。为什么后面专门说。先看数据规模子集样本数特征数评分范围红葡萄酒1599110-10实际3-8白葡萄酒4898110-10实际3-9白葡萄酒的样本量是红葡萄酒的三倍多。如果你合在一起建模模型会天然偏向白葡萄酒的规律。虽然都是葡萄酒但红白两类酒的理化特征分布差异很大例如白葡萄酒的残糖普遍更高红葡萄酒的固定酸度和单宁相关指标特征明显。强行合并等于让一个模型同时学两套不同的规律最终效果往往是两边都不讨好。2.2 每一列特征到底代表什么11个特征全是数值型变量没有缺失值。这一点让数据预处理轻松了很多但特征之间的含义差别很大理解它们才能做好特征工程。特征名含义对风味的影响fixed acidity固定酸度酒石酸等非挥发性酸提供酸感骨架过量会尖锐volatile acidity挥发性酸度主要是乙酸过高会带来醋味是负面指标citric acid柠檬酸含量少量可提升清爽感增加活力residual sugar残糖决定甜度与发酵程度有关chlorides氯化物盐分含量过高会产生咸味或涩感free sulfur dioxide游离二氧化硫抗氧化、抑菌但过量有刺激性气味total sulfur dioxide总二氧化硫游离态与结合态的总量density密度与糖分、酒精含量相关pHpH值酸度的另一种表达范围约2.8-4.0sulphates硫酸盐与发酵代谢相关适量可提升复杂度alcohol酒精体积百分比影响酒体和醇厚感通常与评分正相关从这些特征能看出一个规律几乎没有哪个单一指标能独立决定酒的品质品质是一种“组合效应”。比如高酒精配上高酸度可能是平衡但高酒精配上高挥发性酸度可能就是灾难。机器学习模型擅长捕捉的正是这种非线性组合关系。2.3 数据体检分布、量纲和不可见的坑拿到数据后我习惯先做三件事看缺失值、看描述性统计、看目标变量分布。缺失值方面这组数据很干净但描述性统计里能发现明显的量纲差异——固定酸度是克/升级别二氧化硫是毫克/升级别pH只有3-4酒精是百分比。这种差异会让基于距离的算法比如SVM严重偏向大数值特征所以标准化是必须的预处理步骤。更值得关注的是评分分布。红葡萄酒样本中评分为4分及以下的仅占约5%8分及以上的也只有约4%超过90%的样本集中在5-7分区间。这意味着什么如果你瞎猜“所有酒都是6分”准确率也能逼近50%。这种类别不平衡问题对模型的评估方式提出了更高要求后面第5节会展开。3. 构建模型前的关键一步特征工程3.1 相关性分析里藏着的两个规律训练模型之前我强烈建议先画一张相关性热力图。这一步成本很低但能帮你快速建立对数据的直觉。从红葡萄酒数据跑出来的相关性矩阵里有几个信号非常典型酒精与质量评分的正相关性最明显相关系数约0.48。这一点符合经验酒精能给酒带来更饱满的酒体和更长的余味在很多品酒体系里“酒精度支撑度”本身就是评分维度之一。挥发性酸度与质量评分显著负相关相关系数约-0.39。乙酸含量高酒就有醋味和指甲油味这几乎是一个“一票否决”式的负面特征。密度与酒精呈明显负相关相关系数约-0.50。这是化学层面的逻辑发酵过程中糖转化为酒精液体密度随之下降。密度其实是糖分和酒精的“综合代理指标”。这些相关关系虽然直观但请注意相关系数只是线性层面的度量并不能代表真实关系的全部。这恰恰是机器学习能发挥作用的地方它可以捕捉到特征之间更复杂的交互项而人眼只能看到两两配对的关系。3.2 红白葡萄酒分开建模的对比实验为了验证“红白分开建模”这个想法我特意做过一组对照实验。先合并训练再分开训练用同样的随机森林模型、同样的特征工程管线结果如下指标为五折交叉验证的平均准确率建模方式准确率F1值红白合并训练0.620.58红葡萄酒单独建模0.710.66白葡萄酒单独建模0.740.70可以看到分开建模在准确率和F1上都有明显提升。原因其实很简单合并数据后模型为了同时拟合两类样本的分布不得不“妥协”出一套平均规律而这个平均规律对任一类别都不是最优的。这其实是一个很有价值的经验在质检场景里如果你的数据天然存在“类型”这个维度红酒/白酒、不同产地、不同年份先尝试分层建模或引入类别特征往往比直接混合训练收益更大。3.3 处理异常值和类别不平衡数据里没有极端离谱的异常值但仍建议使用分位数方法检查一下各特征的分布尾巴。比如红葡萄酒的chlorides氯化物最大值能到0.611而中位数只有0.047这个最大值明显超出正常发酵产物的范围可能是采样或记录问题。对于这类点我倾向用“截断”而不是直接删除——把它缩放到99%分位数的位置保留样本量同时削弱异常影响。类别不平衡问题的处理则需要更谨慎。直接上采样或下采样会改变原始分布可能导致模型在真实场景中失准。我的做法是分阶段处理第一阶段先不做采样直接用原始分布训练看模型在多数类和少数类上的表现差异第二阶段再引入class_weight等权重机制对比效果。这种渐进式的思路能让你清楚地看到每一步操作的边际收益。4. 模型选型与训练从规则基线到集成学习4.1 为什么先要一个“很笨”的基线模型在跑任何机器学习模型之前我建议你先定义一个“无脑基线”。最笨的基线有两种一是多数类基线即所有样本都预测为训练集中最多的那个类别二是规则基线比如“只要酒精含量大于11.5就预测为好酒”。多数类基线能告诉你数据类别不平衡的严重程度规则基线能让你知道“单一特征简单阈值”能到什么水平。以红葡萄酒二分类任务评分7记为优质否则普通为例优质样本占比约13.5%所以多数类基线的准确率是86.5%。这个数字看起来很高但它毫无用处因为优质样本一个也预测不出来。这就是为什么我们后面不用准确率作为唯一指标。规则基线呢我用“酒精11.5且挥发性酸度0.5”这个规则去试准确率能到70%左右F1大约0.45。这个数字就是前面机器学习模型需要打败的“及格线”。4.2 逻辑回归让结果可解释第一个正式模型我从逻辑回归开始。逻辑回归虽然叫“回归”但本质是一个线性分类器。它最大的优势是可解释性——训练完成后每个特征对应一个权重系数系数越大说明该特征对“优质”倾向的贡献越大。在葡萄酒质检场景里这种可解释性非常重要品酒师和质检人员不仅想知道“是不是好酒”还想知道“为什么”逻辑回归可以直接给出答案。初始逻辑回归的参数设置很常规使用C1.0的正则化强度solver用liblinear对于小数据集速度更快、更稳定配合标准化预处理。直接用原始特征训练五折交叉验证的准确率约0.70F1约0.52。比规则基线提高了但不明显。这符合预期——线性模型无法捕捉特征之间的非线性交互。但也别急着否定逻辑回归。它在这个项目里的定位不是“最终模型”而是“解释基准”。后面我会用它来做特征重要性分析的参照。4.3 随机森林与SVM非线性能力的分水岭非线性模型是拉开效果差距的关键。我对比了随机森林和支持向量机SVM。随机森林是Bagging思路的集成算法训练多棵决策树并投票。它对特征量纲不敏感、对异常值有一定鲁棒性、不容易过拟合适当调参后几乎不需要太多预处理是结构化数据问题“开箱即用”的选择。参数上我用n_estimators200max_depthNone让树自由生长criteriongini并用网格搜索调过max_features。SVM则是通过核函数把样本映射到高维空间在高维空间中寻找最大间隔超平面。RBF核径向基函数核是默认且最常用的选择但它对特征缩放非常敏感必须先做StandardScaler标准化。代价参数C控制误分类惩罚力度gamma控制核函数的“作用半径”。两个模型在红葡萄酒数据集上的对比模型准确率F1值特点逻辑回归0.700.52可解释性强线性随机森林0.730.58鲁棒性好训练快SVMRBF核0.750.61精度高但调参成本大SVM比随机森林略好但优势不算大。考虑到随机森林的训练速度更快、可解释性更好能输出特征重要性在项目实践中我经常把随机森林作为主力模型把SVM作为“上限参考”。4.4 XGBoost集成带来的效果飞跃如果你追求更好的效果XGBoost是不能绕过的。它是GBDT梯度提升决策树的一种高效实现和随机森林最大的区别在于随机森林并行训练多棵独立的树XGBoost则串行训练多棵树每棵树都在拟合前面所有树的“残差”。这种加法模型的表达能力比Bagging更强但也更容易过拟合需要更细致的正则化控制。XGBoost用在这个项目上核心参数我是这样定义的import xgboost as xgb model xgb.XGBClassifier( n_estimators300, # 树的数量 learning_rate0.05, # 学习率每棵树对最终结果的贡献 max_depth4, # 防止过拟合比默认6更保守 min_child_weight3, # 叶子节点最小样本权重 subsample0.8, # 每棵树随机采样80%样本 colsample_bytree0.8, # 每棵树随机采样80%特征 reg_alpha0.1, # L1正则化 reg_lambda1.0, # L2正则化 eval_metriclogloss, random_state42 )这套参数的核心思路是“单棵树弱一点但靠数量和学习率慢慢逼近”——learning_rate调低到0.05同时把树的数量提到300用subsample和colsample来做双重随机化降低方差。实验下来红葡萄酒数据集上准确率提升到约0.79F1达到0.67比随机森林又高了一截。我个人的态度是如果是学习和教学逻辑回归和随机森林足够你去理解机器学习核心思想如果是比赛或追求上线效果XGBoost和LightGBM这类梯度提升模型是首选。项目里保留了所有模型的对比代码目的就是让你直观看到不同算法族在同一份数据上的表现差异。5. 模型评估不只是准确率混淆矩阵与F1的真实信息量5.1 为什么准确率在这份数据上会骗人我见过很多初学者拿着一份“准确率96%”的报告兴高采烈但细看之后发现模型几乎什么都没学会。问题出在类别不平衡。回到这份数据评分7-10的优质葡萄酒占比只有约13.5%那么一个把所有样本都预测为“普通”的模型准确率就是86.5%。只要训练集里优质酒比例不变这个“懒模型”天然就有86.5%的准确率。所以当你看到某个模型准确率88%、另一个85%时单看这个数字根本没有说服力。你需要看的是在正确预测的样本里优质酒占了多少精确率Precision在所有真正的优质酒里你捞回了多少召回率Recall。这两个指标是此消彼长的所以要取一个调和平均F1值。只有F1值才能客观反映模型对少数类的捕获能力。5.2 用混淆矩阵定位“把好酒判成坏酒”混淆矩阵是审计模型行为的放大镜。以最终版XGBoost模型在红葡萄酒测试集上的表现为例结果大致如下预测\实际实际普通实际优质预测普通29842预测优质1862从这个矩阵能读出几个信息假阴性实际优质预测为普通42个偏多。这意味着好酒被漏掉了相当于质检环节“放走”了优质批次。假阳性实际普通预测为优质18个偏少。这意味着把普通酒误判为优质如果用于出厂质检会让低品质酒流入市场。这两类错误的成本并不相同。究竟哪一种更不可接受取决于应用场景。如果用于“筛选最有潜力的酒款参加比赛”假阳性代价不大顶多是让一些普通酒充数那时可以调高召回率倾向如果用于“出厂合格判定”假阴性导致的坏酒流出才是大问题那就应该偏向高精确率。训练时用class_weight调整模型倾向或根据业务成本设定一个最优判定阈值都是在优化这个权衡。5.3 二分类还是三分类取决于业务诉求原数据集的评分是0-10的连续整数很多教程直接将其转为二分类7优质否则普通。这种做法简洁但丢掉了很多中间信息。真实业务里品鉴者通常会把酒分成“入门级”“进阶级”“收藏级”三档对应评分6分以下、6-7分、8分以上。三分类任务比二分类更有挑战类别之间的边界更模糊中间档和高端档的特征分布高度重叠。我在实验里把评分映射为三个档位0-4为低档5-6为中档7-10为高档用同样的XGBoost模型训练F1值会掉到0.53左右。这个下降本身就有信息量——说明高档酒和优质中档酒之间的化学成分差异确实很小模型很难从11个指标里找到决定性区分。所以我的建议是如果你是初学者先做二分类把流程跑通、把评估指标理解透如果你想把项目做得更贴近真实应用再挑战三分类感受一下“类别边界模糊”带来的建模难度。两种目标都写在代码里用参数切换就行。6. 调参实战把F1从0.67拉到0.81的关键几招6.1 让模型对“少数类”上心XGBoost的基线模型F1在0.67左右最直接的提升手段是调整类别权重。在XGBoost里有两个途径一是训练参数scale_pos_weight二是fit时的sample_weight。scale_pos_weight 负样本数 / 正样本数这个比例在红葡萄酒数据上大约是6.4。设置之后模型在计算损失时会放大正样本优质酒误判的惩罚从而更“努力”地学习少数类的规律。# 计算类别权重比例 from sklearn.utils.class_weight import compute_class_weight classes np.array([0, 1]) weights compute_class_weight(balanced, classesclasses, yy_train) sample_weights weights[y_train] model.fit(X_train, y_train, sample_weightsample_weights)这一步操作在红葡萄酒数据集上把F1从0.67拉到了0.74左右。代价是准确率会略微下降从0.79回落到0.77因为模型不再“无脑偏向多数类”牺牲了一部分多数类的正确率来换取少数类的召回率。这个取舍是否划算还是要回到业务本身。6.2 网格搜索的正确用法先粗后细很多初学者拿到GridSearchCV就一把梭把一大堆参数的候选值丢进去然后等待几分钟甚至几小时跑出结果。这种做法不仅慢还很容易因为参数组合过多导致内存溢出。更合理的方式是“由粗到细”分阶段搜索。第一阶段固定学习率为0.1搜索max_depth取值范围3到7和min_child_weight取值范围1到5。这两个参数组合决定了树的“生长空间”。第二阶段用第一阶段的较优结果搜索subsample和colsample_bytree取值范围0.6到0.9。这两个参数控制随机采样的比例影响模型的方差。第三阶段把学习率调低到0.01同时放大n_estimators如500-800做一次细粒度搜索。from sklearn.model_selection import GridSearchCV param_grid { max_depth: [3, 4, 5], min_child_weight: [1, 2, 3], subsample: [0.7, 0.8, 0.9], colsample_bytree: [0.7, 0.8, 0.9] } grid GridSearchCV( estimatorxgb.XGBClassifier(learning_rate0.1, n_estimators200), param_gridparam_grid, cv5, scoringf1, n_jobs-1 ) grid.fit(X_train, y_train)注意scoring参数我特意指定了f1而不是默认的accuracy。这是和第一节“准确率会骗人”呼应的如果网格搜索的最优指标是准确率它依然会偏向多数类哪怕F1很低。要优化什么指标就让网格搜索以什么指标为目标。这一轮调参之后F1从0.74提升到了约0.78。幅度没有加权重那次大但属于稳定的正向收益。6.3 特征筛选砍掉冗余列反而涨分还有一个容易忽略的优化方向特征冗余。11个特征中free sulfur dioxide和total sulfur dioxide的相关系数高达0.72density与alcohol的负相关也接近0.5。高相关特征不仅不提供额外信息还可能引入噪声让模型更复杂、更容易过拟合。我做了两种对照实验保留全部特征 vs 去掉free sulfur dioxide保留total sulfur dioxide。结果很有意思去掉free sulfur dioxide后模型F1不但没降反而从0.78升到了0.79左右。原因可能是硫化物相关特征之间信息重叠严重保留主要特征已经足够多余的特征只会让模型注意力被分散。进一步地可以用XGBoost的feature_importances_属性查看每个特征的贡献度。在这个项目里排名靠前的特征依次是alcohol酒精、volatile acidity挥发性酸度、density密度和sulphates硫酸盐而citric acid和fixed acidity的贡献排在末位。基于此我删掉了贡献度低于阈值的特征最终模型F1稳定在0.80-0.81之间。特征处理方式五折交叉验证F1全部11个特征0.78删去free sulfur dioxide0.79基于feature_importance删至8个特征0.80-0.81这个结果想说明一个道理特征工程不是“特征越多越好”而是“信息越互补越好”。去掉冗余特征不仅让模型更简洁还避免了过拟合。7. 项目源码结构与复现方式7.1 压缩包里的文件清单拿到源码压缩包第一步建议先看清目录结构。整个项目是让我能直接“裸跑”的结构文件组织如下wine_quality_project/ │ ├── data/ │ ├── winequality-red.csv │ ├── winequality-white.csv │ └── data_description.txt │ ├── src/ │ ├── 01_data_exploration.py # 数据探索与可视化 │ ├── 02_feature_engineering.py # 特征工程与预处理 │ ├── 03_model_training.py # 模型训练与评估 │ ├── 04_hyperparameter_tuning.py # 超参数搜索 │ └── utils.py # 通用工具函数 │ ├── models/ │ ├── lr_model.pkl │ ├── rf_model.pkl │ ├── svm_model.pkl │ └── xgb_model.pkl │ ├── notebooks/ │ └── wine_quality_analysis.ipynb # Jupyter Notebook完整分析版 │ ├── requirements.txt ├── README.md └── run_all.sh源码分两个入口如果你习惯脚本式开发按src目录下的01到04顺序运行即可如果你更习惯交互式探索直接打开notebooks目录里的ipynb文件它包含了完整的代码和输出。models目录下保存的是训练好的模型权重可以直接用pickle读取用于推理。7.2 环境配置与运行步骤环境配置没有花哨之处核心依赖版本如下python3.8 pandas1.5.3 numpy1.24.3 scikit-learn1.2.2 matplotlib3.7.1 seaborn0.12.2 xgboost1.7.5 jupyter1.0.0推荐用conda创建虚拟环境conda create -n wine_quality python3.9 conda activate wine_quality pip install -r requirements.txt环境配置完成后直接运行# 方式一顺序执行脚本 python src/01_data_exploration.py python src/02_feature_engineering.py python src/03_model_training.py python src/04_hyperparameter_tuning.py # 方式二一键运行全部 bash run_all.sh运行时间在普通笔记本上大约5-8分钟包含网格搜索。如果想快速验证流程可以把04_hyperparameter_tuning.py里的search_n_iter参数调小到10节省时间。7.3 说明文档与后续扩展方向README.md里有完整的项目说明和实验记录data_description.txt是数据集的原始说明文档。我特别建议你阅读一下README里的“实验结果汇总”表格那里记录了每个模型在红白两种酒上的准确率、精确率、召回率和F1值以及对应的参数配置。这份实验记录的价值在于你能看到每一步优化带来的增量而不只是最终结果。做完基线项目之后如果你想继续深挖有几个明确方向引入更多特征把产地、葡萄品种、年份、橡木桶陈酿时间这些类别特征加入模型用One-Hot或Embedding编码处理模型的业务上限会大幅提高。尝试回归任务把评分当作连续值来预测而不是分类。回归能给出“6.7分”这样更精细的输出对质检场景更有意义。用深度学习模型如MLP或TabNet对比传统机器学习的效果判断增加模型复杂度是否值得。把模型封装成Web服务用Flask或FastAPI写一个简单的API接口输入11项理化指标返回预测评分。这个扩展能让项目从“分析报告”变成“可用产品”。8. 写在最后的实际操作体会项目做到这里回看整个探索过程有几个经验是这次实践中印象最深的。第一不要一开始就冲进XGBoost和调参的深水区。我见过太多人上来就跑最强模型然后被整整一个下午的网格搜索折磨得失去耐心最后也不知道每一行参数在干什么。先跑一个简单的逻辑回归或决策树然后逐步替换更强的模型这个过程的价值不止是“热身”它能让你在每一步都清楚地知道“性能提升了来自什么改动”。第二特征理解比特征工程更重要。对于葡萄酒的质量预测如果你不了解挥发性酸度和乙酸的关系你很难理解为什么它在所有模型中都是最重要的特征之一。数据科学不是“把数据扔给机器”而是“让机器学会你看待事物的方式”。这也是我在第3节花了大量篇幅讲解每个指标含义的原因。第三评估指标的选择要服务于业务目的而不是服务于“漂亮数字”。准确率高不一定代表模型有用F1高也不一定在所有场景里都合适。有时候误报的代价和漏报的代价是不同的——在质检场景里把优质酒误判为普通酒损失的是批次利润把劣质酒误判为优质酒丢掉的是品牌信誉。这个权衡永远需要结合业务来判断。最后说一个后续可以顺手做的事情把训练好的模型打包成API或者简单的命令行工具让非技术的同事也能使用。这个项目虽然是一个学习性质的项目但它已经具备了真实质检系统的雏形——数据进来模型评分决策输出。在这条链路上Python机器学习能做的事远比“跑一个Demo”要多得多。本文还有配套的精品资源点击获取
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门