2025亚太中文赛数学建模C题完整论文与数据:基于Quantum Boosting的二分类模型问题,完整内容见文末名片

摘要
本文基于Iris数据集的Setosa与Versicolor二分类任务,围绕Quantum Boosting(QBoost)方法展开研究,通过数据预处理构建弱分类器,将集成问题转化为二次无约束二进制优化(QUBO)模型,并利用Kaiwu SDK模拟退火求解器求解,最终完成强分类器的构建与性能评估。
针对问题一,要求从Iris数据集筛选二分类样本并进行预处理,构建一组弱分类器。首先筛选Setosa(标签0)和Versicolor(标签1)共100个样本,将标签转换为{1,1}以适配QBoost需求。采用ShapiroWilk检验判断特征分布,对正态分布特征用Zscore标准化,偏态分布特征用MAD标准化,有效消除量纲影响并增强对异常值的稳健性。按7:3分层抽样划分训练集与测试集,确保类别比例一致。基于互信息筛选Top3高判别特征,生成15种多特征组合,通过分位数阈值搜索确定最优分类阈值,再经互信息多样性筛选,最终保留812个准确率>55%且低冗余的弱分类器,为后续集成提供基础组件。
针对问题二,需将弱分类器集成转化为QUBO模型。以最小化强分类器分类误差为目标,引入hinge损失的二阶泰勒展开近似误分类率,提升边界样本损失近似精度。设计量子感知自适应正则化机制,包括基于分类器准确率的个体惩罚系数(抑制低性能分类器)和基于分类器相关性的成对惩罚系数(促进多样性组合)。通过严格数学推导,将损失函数与正则化项融合为QUBO矩阵,对角线元素反映个体分类器贡献与惩罚,非对角线元素体现分类器交互损失与多样性约束,实现集成优化目标向量子可求解形式的转化。
针对问题三,利用Kaiwu SDK求解QUBO模型并评估强分类器性能。采用“量子模拟退火全局探索+LBFGS局部精修”的变分混合求解策略,模拟退火以初始温度T₀=0.2×maxQjk、降温速率α=0.98迭代10⁴次获取初始解,LBFGS精修200次得到最优弱分类器组合。构建强分类器H(x)=sign(Σxj*hj(x)),在测试集上评估准确率、精确率、召回率等指标。通过SHAP值量化各弱分类器贡献,FGSM扰动测试对抗性稳健性,决策边界可视化展示集成模型对特征空间的划分能力,全面验证模型的有效性、可解释性与泛化能力。
最后,对模型进行综合评价。所构建的QBoost模型在Iris二分类任务中表现出较高的分类准确率和稳健性,弱分类器的多样性筛选与量子感知正则化提升了集成性能。但模型对弱分类器数量较敏感,且QUBO求解精度受模拟退火参数影响。未来可探索自适应弱分类器生成方法,并结合真实量子硬件进一步提升求解效率。
关键词:QBoost;量子计算;QUBO模型;弱分类器;模拟退火;二分类

二、第一步:数据“初筛”与标签转换

任务:从原始Iris数据集中挑出Setosa和Versicolor(各50朵,共100朵),并调整标签格式。

1. 数据集筛选

原始Iris数据集有3类鸢尾花,我们只需要前两类:Setosa(标签0)和Versicolor(标签1),各取50个样本,组成100个样本的数据集。

2. 标签转换:为什么要把{0,1}变成{1,1}?

后续要用一种叫“QBoost”的方法组合弱分类器,它的输出是“符号函数”(sign(...)),结果只能是1或1(类似“正/负投票”)。如果标签是0和1,符号函数的输出(1/1)无法直接和标签比较(比如符号函数输出1,标签是0,怎么判断对错?)。

转换规则:[
\tilde{y}_i = \begin{cases}
1 & \text{若 } y_i = 0 , (\text{Setosa}) \
1 & \text{若 } y_i = 1 , (\text{Versicolor})
\end{cases}
]这样,当QBoost输出sign(...)y~i\tilde{y}_iy~i符号相同时(比如都为1或都为1),就是分类正确;否则错误。

三、第二步:特征标准化——让特征“站在同一起跑线”

问题:不同特征的数值范围差异大(如萼片长4.37.9cm,萼片宽2.04.4cm),直接用原始数据分类,模型会更关注数值大的特征(比如萼片长),但可能萼片宽才是区分关键!

解决办法:标准化——把所有特征转换到同一尺度(比如均值0、标准差1),消除量纲影响。

1. 先判断特征分布:正态还是偏态?

不同分布的特征,标准化方法不同。比如身高数据近似“正态分布”(中间多、两边少),但收入数据可能是“偏态分布”(少数人收入极高,大部分人较低)。

工具:ShapiroWilk检验这是一种判断数据是否服从正态分布的统计方法,适用于小样本(我们每个特征有100个数据,适合)。

原理:比较样本数据与理想正态分布的“相似度”,用统计量WWW衡量:[
W = \frac{(\sum_{i=1}^n a_i x_{(i)})2}{\sum_{i=1}n (x_i \bar{x})^2}
]
x(i)x_{(i)}x(i):特征值排序后的第iii个值(比如把萼片长从小到大排序,x(1)x_{(1)}x(1)是最小值,x(100)x_{(100)}x(100)是最大值);
xˉ\bar{x}xˉ:特征均值;
aia_iai:检验系数(根据样本量nnn查表得到,比如n=100n=100n=100时,a1=0.5739a_1=0.5739a1=0.5739a2=0.3291a_2=0.3291a2=0.3291等,可通过Python的scipy库直接计算)。

判断标准:若WWW接近1(越接近1,越像正态分布),且ppp值(显著性水平)>0.05(“非正态”的概率小于5%),则认为特征服从正态分布;否则是偏态分布。

2. 正态分布特征:用Zscore标准化

如果特征是正态分布(如萼片长),用Zscore将其转换为“标准正态分布”(均值0,标准差1),公式:[
f’ = \frac{f \mu}{\sigma}
]
fff:原始特征值(如某朵花的萼片长5.1cm);
μ\muμ:训练集特征均值(用训练集数据算,避免“偷看”测试集!);
σ\sigmaσ:训练集特征标准差(无偏估计,分母用n1n1n1)。

例子:若训练集萼片长均值μ=5.8\mu=5.8μ=5.8cm,标准差σ=0.8\sigma=0.8σ=0.8cm,某样本萼片长6.6cm,则标准化后为(6.65.8)/0.8=1(6.65.8)/0.8=1(6.65.8)/0.8=1(即比均值高1个标准差)。

为什么这样做? 正态分布下,95%的数据落在[μ1.96σ,μ+1.96σ][\mu1.96\sigma, \mu+1.96\sigma][μ1.96σ,μ+1.96σ],标准化后就是[1.96,1.96][1.96,1.96][1.96,1.96],方便后续用“分位数”选分类阈值。

3. 偏态分布特征:用MAD标准化(抗异常值!)

如果特征是偏态分布(如存在极端值,比如某朵花花瓣长异常大),Zscore会被极端值“带偏”(均值和标准差受极端值影响大)。此时用中位数绝对偏差(MAD) 标准化,对异常值更稳健:[
f’ = \frac{f \text{median}}{\text{MAD}}
]
median\text{median}median:训练集特征中位数(数据排序后中间的值,不受极端值影响);
MAD\text{MAD}MAD:中位数绝对偏差,先算每个数据与中位数的绝对差,再取这些差的中位数:[
\text{MAD} = \text{median}({|f_i \text{median}| })
]

例子:若训练集花瓣长中位数=4.3cm,MAD=0.5cm,某异常样本花瓣长5.5cm,则标准化后为(5.54.3)/0.5=2.4(5.54.3)/0.5=2.4(5.54.3)/0.5=2.4;若用Zscore(假设均值被异常值拉高到4.8cm,标准差1.2cm),则为(5.54.8)/1.2≈0.58(5.54.8)/1.2≈0.58(5.54.8)/1.20.58,MAD更能体现其“异常程度”。

四、第三步:划分训练集与测试集——“练武功”与“考武功”

问题:如果用所有数据训练模型,再用这些数据测试,模型可能“死记硬背”(过拟合),遇到新数据就失效。

解决办法:把数据分成两部分——训练集(70%,70个样本)用来“学武功”,测试集(30%,30个样本)用来“考武功”,评估模型在新数据上的表现。

分层抽样:避免“类别不平衡”

原始数据中Setosa和Versicolor各50个(1:1),若随机划分,可能训练集里Setosa占60%,模型会偏向Setosa,测试结果不准。

分层抽样规则:训练集和测试集的类别比例与原始数据一致(1:1):
训练集70个样本:Setosa 35个,Versicolor 35个;
测试集30个样本:Setosa 15个,Versicolor 15个。

公式约束:[
\frac{N_{\text{train,0}}}{N_{\text{train}}} = \frac{N_{\text{test,0}}}{N_{\text{test}}} = \frac{1}{2}, \quad \frac{N_{\text{train,1}}}{N_{\text{train}}} = \frac{1}{2}
](Ntrain,0N_{\text{train,0}}Ntrain,0:训练集Setosa样本数,NtrainN_{\text{train}}Ntrain:训练集总样本数=70,以此类推)

五、第四步:构建弱分类器——“简单但多样”的规则

弱分类器要满足两个条件:

  1. 弱性能:准确率>55%(比瞎猜好一点);
  2. 多样性:预测结果“观点不同”(低冗余),避免多个分类器犯同样的错。
1. 特征筛选:挑出“最有用”的特征

4个特征中,有些可能和标签关系不大(比如萼片宽对区分两种鸢尾花作用小)。用互信息(Mutual Information) 衡量特征与标签的“依赖关系”,值越大,特征越有用。

互信息定义:[
I(f, \tilde{y}) = \sum_{f \in \text{vals}(f)} \sum_{\tilde{y} \in {1,1}} p(f, \tilde{y}) \log\left( \frac{p(f, \tilde{y})}{p(f)p(\tilde{y})} \right)
]
p(f,y~)p(f,\tilde{y})p(f,y~):特征fff和标签y~\tilde{y}y~的联合概率(比如“花瓣长=1.5cm且标签=1(Setosa)”的概率);
p(f)p(f)p(f):特征fff的边缘概率(比如“花瓣长=1.5cm”的概率);
p(y~)p(\tilde{y})p(y~):标签y~\tilde{y}y~的边缘概率(因两类样本1:1,p(1)=p(1)=0.5p(1)=p(1)=0.5p(1)=p(1)=0.5)。

意义:互信息衡量“知道fff后,y~\tilde{y}y~的不确定性减少了多少”。比如花瓣长与标签互信息大,说明知道花瓣长后,能大幅减少对类别的不确定。

筛选策略:保留互信息Top3特征(减少后续组合复杂度,同时保留90%以上判别信息)。

2. 特征组合:捕捉“交叉信息”

单一特征可能不够用(比如“花瓣长>2cm”可能分错一些样本),但组合特征(如“花瓣长萼片宽>0”)可能更有效。

组合方式:对Top3特征(记为f1,f2,f3f_1,f_2,f_3f1,f2,f3),用系数{1,0,1}生成线性组合:
单一特征:f1,f2,f3f_1,f_2,f_3f1,f2,f3(3种);
两特征组合:f1+f2,f1f2,f1+f3,f1f3,f2+f3,f2f3f_1+f_2,f_1f_2,f_1+f_3,f_1f_3,f_2+f_3,f_2f_3f1+f2,f1f2,f1+f3,f1f3,f2+f3,f2f3(6种);
三特征组合:f1+f2+f3,f1+f2f3,...f_1+f_2+f_3,f_1+f_2f_3,...f1+f2+f3,f1+f2f3,...(6种)。

共15种组合,比如“f1f2f_1f_2f1f2”(萼片长萼片宽):Setosa通常萼片宽>长(差值负),Versicolor通常萼片长>宽(差值正),用这个组合能更好区分。

3. 阈值优化:找最佳“分界点”

每个组合特征需要一个“阈值”,比如“若cj(x)>tjc_j(\boldsymbol{x}) > t_jcj(x)>tj则预测1(Versicolor),否则1(Setosa)”。如何选tjt_jtj

分位数网格搜索

  1. 收集训练集所有样本的组合特征值{cj(xi′)}\{c_j(\boldsymbol{x}_i')\}{cj(xi)}
  2. 选7个分位数作为候选阈值:12.5%、25%、37.5%、50%(中位数)、62.5%、75%、87.5%(覆盖数据主要分布区间,避免极端值);
  3. 对每个候选阈值ttt,计算分类准确率(正确分类样本数/总样本数),选准确率最高的ttt作为最终阈值tjt_jtj

分类器公式:[
h_j(\boldsymbol{x}) = \begin{cases}
1 & \text{若 } c_j(\boldsymbol{x}) > t_j \
1 & \text{否则}
\end{cases}
]

4. 多样性筛选:剔除“重复观点”的分类器

15个候选分类器中,可能有两个分类器预测结果几乎一样(比如都基于花瓣长),这种“冗余”分类器组合起来没用(相当于一个人投多票)。

用互信息衡量冗余:计算任意两个分类器hj,hkh_j,h_khj,hk预测结果的互信息I(hj,hk)I(h_j,h_k)I(hj,hk),值越小,冗余越低。

筛选规则
保留准确率>55%的分类器;
保留与已选分类器互信息<0.3的分类器(互信息<0.3表示“观点差异大”)。

最终保留8~12个弱分类器,它们“各有所长”,后续组合时能互相弥补错误。

5. 计算准确率:给分类器“打分”

对每个保留的弱分类器hjh_jhj,计算训练集准确率Acc∗j\text{Acc}*jAccj(后续QBoost会根据准确率分配权重,准确率高的权重更大):[
\text{Acc}j = \frac{1}{N{\text{train}}} \sum*{i \in D_{\text{train}}} \mathbb{I}(h_j(\boldsymbol{x}_i’) = \tilde{y}_i)
]
I(⋅)\mathbb{I}(\cdot)I():指示函数,条件成立时=1(分类正确),否则=0;
Ntrain=70N_{\text{train}}=70Ntrain=70(训练集样本数)。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐