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

自定义SVM多项式核与sklearn内置poly核准确率不匹配问题

自定义SVM多项式核与sklearn内置核结果差异问题解决

你的实现没有逻辑错误,二者结果差异是因为sklearn内置多项式核的默认参数和你的自定义核参数不匹配导致的,对齐参数后即可得到基本一致的结果。

参数不匹配的具体说明

sklearn内置多项式核的计算公式为:
K(x, y) = (gamma * <x, y> + coef0) ** degree
你的自定义核固定了gamma=1、coef0=1、degree=4,但sklearn的SVC(kernel='poly')默认参数和你的实现不一致:

  • 默认gamma取值为scale,计算逻辑为1 / (特征维度 * 训练集特征方差),不是固定值1
  • 默认coef0取值为0,不是1
  • 你调整阶数测试时没有同步修改自定义核里的幂次,也会导致结果偏差

对齐参数的修改方案

固定阶数测试(以4阶为例)

实例化内置核SVM时显式指定和自定义核一致的参数即可:

# 内置4阶多项式核,参数和自定义核对齐
clfpoly = svm.SVC(kernel='poly', degree=4, gamma=1, coef0=1)
clfpoly.fit(X_train, y_train)
zpoly = clfpoly.predict(X_test)
print("内置4阶多项式核准确率:", accuracy_score(y_test, zpoly)*100,"%")

# 自定义4阶多项式核
def poly_kernel_fn(X, Y):
    return (X.dot(Y.T) + 1)**4

clf = svm.SVC(kernel=poly_kernel_fn)
clf.fit(X_train, y_train)
z = clf.predict(X_test)
print("自定义4阶多项式核准确率:", accuracy_score(y_test, z)*100,"%")

支持多阶数动态切换

如果需要测试3、4、5阶核,可通过闭包封装自定义核的参数:

def get_custom_poly_kernel(degree, gamma=1, coef0=1):
    def poly_kernel(X, Y):
        return (gamma * X.dot(Y.T) + coef0) ** degree
    return poly_kernel

# 测试3阶核
clf_3 = svm.SVC(kernel=get_custom_poly_kernel(degree=3))
# 内置3阶核参数对齐
clf_3_builtin = svm.SVC(kernel='poly', degree=3, gamma=1, coef0=1)

其他注意事项

  • 原代码中的打印信息存在笔误:内置4阶核的打印标注为"3D polynomial kernel",自定义多项式核的打印标注为"custom rbf kernel",修改后可避免结果误判
  • 受浮点数计算精度的微小误差影响,对齐参数后二者准确率可能存在±0.1%左右的偏差,属于正常范围

内容的提问来源于stack exchange,提问作者Sebastian Soler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:54:03