找到【SVM】中最优的惩罚项系数C

因为本来SVM是想找到间隔最大的分割面,所以C越大,SVC会选择边际更小的,能够更好的分类所有训练点的决策边界,不过模型的训练时间也会越长。如果C的设定值较小,那SVC会尽量最大化边界,决策功能会更简单,但代价是训练的准确度。

我们先来调线性核函数:

python 复制代码
#调线性核函数
score = []
C_range = np.linspace(0.01,30,50)
for i in C_range:
    clf = SVC(kernel="linear",C=i,cache_size=5000).fit(Xtrain,Ytrain)
    score.append(clf.score(Xtest,Ytest))
print(max(score), C_range[score.index(max(score))])
plt.plot(C_range,score)
plt.show()

输出结果为:0.9766081871345029 1.2340816326530613

可以看到准确率最高是97%以上。接下来我们来看看在rbf上的结果:

python 复制代码
score = []
C_range = np.linspace(0.01,30,50)
for i in C_range:
    clf = SVC(kernel="rbf",C=i,gamma = 0.012742749857031322,cache_size=5000).fit(Xtrain,Ytrain)
    score.append(clf.score(Xtest,Ytest))
    
print(max(score), C_range[score.index(max(score))])
plt.plot(C_range,score)
plt.show()

输出结果为:0.9824561403508771 6.130408163265306

既然最高的得分所对应的C值是6,那么我们可以在5-7之间进一步细化,看能否找到一个更好的局部最优:

python 复制代码
#进一步细化
score = []
C_range = np.linspace(5,7,50)
for i in C_range:
    clf = SVC(kernel="rbf",C=i,gamma = 
0.012742749857031322,cache_size=5000).fit(Xtrain,Ytrain)
    score.append(clf.score(Xtest,Ytest))
    
print(max(score), C_range[score.index(max(score))])
plt.plot(C_range,score)
plt.show()

输出结果为:0.9824561403508771 5.938775510204081

可以看到,98.2456%就是我们最好的得分。

相关推荐
非著名架构师几秒前
破解“AI幻觉”,锁定真实风险:专业气象模型如何为企业提供可信的极端天气决策依据?
人工智能·深度学习·机器学习·数据分析·风光功率预测·高精度气象数据·高精度天气预报数据
jinxinyuuuus4 分钟前
快手在线去水印:短链解析、API逆向与视频流的元数据重构
前端·人工智能·算法·重构
忆~遂愿6 分钟前
昇腾 Triton-Ascend 开源实战:架构解析、环境搭建与配置速查
人工智能·python·深度学习·机器学习·自然语言处理
测试人社区—小叶子7 分钟前
金融系统迁移测试:历时半年的完整实践复盘
运维·网络·人工智能·python·测试工具·金融
deardao9 分钟前
【股票预测】用NLP预测金融趋势的随机时间序列模型
人工智能·自然语言处理·金融
LeeZhao@14 分钟前
【狂飙全模态】狂飙AGI-智能视频生成助手
人工智能·redis·语言模型·音视频·agi
AI营销干货站14 分钟前
2025金融风控:AI实战四步法
大数据·人工智能
十铭忘16 分钟前
SAM2跟踪的理解5——prompt encoder
人工智能
高洁0116 分钟前
向量数据库拥抱大模型
python·深度学习·算法·机器学习·transformer
深度学习lover18 分钟前
<数据集>yolo茶叶嫩芽识别数据集<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·茶叶嫩芽识别