使用scikit−learn中的Pipeline把StandardScaler和线性SVM组合起来,保证交叉验证时每一折都只在当前训练折上进行标准化拟合,避免数据泄漏。
核心步骤如下:
请在仅依赖 numpy / pandas / scikit-learn 的前提下,实现一个线性支持向量机(SVM)分类器,并通过 Stratified 3-Fold 交叉验证 + 网格搜索自动选择最佳惩罚系数 C。完成后对给定测试样本输出类别预测。
模型训练与预测 在完整训练集上用最佳参数 refit = True 重新训练;对 test 直接预测得到标签序列。
结果输出 仅输出 test 部分的预测标签(0 / 1)。
第一行输入两个整数 n,m(20≤n≤200,2≤m≤10),分别表示训练样本数和特征维度。
接下来 n 行,每行包含 m+1 个浮点数,前 m 个为特征,最后一个为整数标签 y∈{0,1}。
接下来一行输入一个整数 q(1≤q≤100),表示测试样本数。
接下来 q 行,每行包含 m 个浮点数,表示一个测试样本的特征。
输出 q 行,每行一个整数(0 或 1),表示对应测试样本的预测标签。
输入
20 2
-1.20 -0.40 0
-0.80 -1.10 0
-1.30 -0.90 0
-0.70 -0.60 0
-1.50 -0.30 0
-0.90 -1.40 0
-0.50 -0.80 0
-1.10 -0.20 0
-0.60 -1.30 0
-1.40 -0.70 0
1.20 0.40 1
0.80 1.10 1
1.30 0.90 1
0.70 0.60 1
1.50 0.30 1
0.90 1.40 1
0.50 0.80 1
1.10 0.20 1
0.60 1.30 1
1.40 0.70 1
3
1.00 1.00
-1.00 -1.00
0.50 0.50
输出
1
0
1
说明
训练集共 20 个样本,前 10 个标签为 0 分布在第三象限,后 10 个标签为 1 分布在第一象限。经 GridSearchCV 在 C∈{0.1,1.0,10.0} 中网格搜索后选出最佳 C,对测试集预测:第 1 个样本 (1.00,1.00) 落在正类区域得到 1;第 2 个样本 (−1.00,−1.00) 落在负类区域得到 0;第 3 个样本 (0.50,0.50) 距离决策超平面靠近正类侧得到 1。