You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现以匹配多索引为真实标签的SVM分类模型?

解决SVM拟合时多索引标签的问题

你这里犯了个很典型的小误区——Scikit-learn的SVM(以及绝大多数分类模型)要求fit()方法的第二个参数是和训练样本一一对应的标签数组,而不是仅传入匹配样本的索引集合。我来帮你把这个问题理顺:

问题核心

你现在传入的golden_matches_index是匹配样本的多索引,但模型需要明确知道每一行训练数据对应的类别(比如用1代表匹配,0代表不匹配),而不是只知道哪些行属于匹配组。

修正步骤

  1. 生成对应训练样本的标签数组
    我们可以用index.isin()方法,为golden_pairs里的每个样本生成0/1标签:

    # 为每个训练样本生成标签:匹配样本标记为1,不匹配为0
    y_train = golden_pairs.index.isin(golden_matches_index).astype(int)
    

    这个y_train是和golden_pairs行数完全一致的一维数组,完全符合模型对输入标签的要求。

  2. 正确拟合模型
    注意训练时要传入的是指定的特征列(columns_to_keep),别把整个DataFrame丢进去(避免混入无关列干扰模型):

    from sklearn.svm import SVC
    
    golden_pairs = filter_tests_new_df[:training_value]
    golden_matches_index = golden_pairs[golden_pairs['ev_2'] == 1].index
    
    svm = SVC(gamma='auto')
    # 用特征列和生成的标签数组完成拟合
    svm.fit(golden_pairs[columns_to_keep], y_train)
    
  3. 执行预测
    预测部分可以保留你的原有逻辑,确保传入同样的特征列即可:

    # 预测所有测试样本的匹配状态
    result_svm = svm.predict(test_pairs[columns_to_keep])
    

额外实用技巧

如果之后需要把预测结果和原数据的多索引关联起来,直接把预测结果赋值给测试集的新列就行:

test_pairs['predicted_match'] = result_svm

这样就能完整保留原有的多索引结构,方便后续的分析或验证工作。

内容的提问来源于stack exchange,提问作者rey don sancho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:18:05