支持向量机的参数调整优化

 一、支持向量机简介

        svm(支持向量机)以感知机为原型,但是它的能力要远远强于感知机,svm在回归,分类和异常检测上都有重要作用,并且可以通过kernel trick实现高维数据的非线性分类。sklearn里面提供了很多svm及其变种,本篇将详细介绍其中的分类器之一svc。

二、SVC变量详解

svc的变量如下所示,显示的皆为默认参数:


C:惩罚系数,用来平衡分类间隔margin和错分样本,默认参数为1.0

kernel:参数选择,有RBF, Linear, Poly, Sigmoid

degree:多项式核函数的阶数

gamma:核函数的系数(只对'Poly', 'RBF' 和 'Sigmoid'生效),如果未专门设置gamma,代表其值为样本特征数的倒数,即1/n_features.

coef0:核函数中的独立项,只对'RBF' and 'Poly'有效,表示其中的参数c

shrinking:是否采用启发式收缩方式,默认为True,用以加速代码运行速度

probablity: 是否启用概率估计。 这必须在调用fit()之前启用,并且会fit()方法速度变慢

tol: svm停止训练的误差精度。这个对泛化能力有影响,可以适当调大,但太大会导致欠拟合。

cache_size:指定训练所需要的内存,单位为MB

class_weight: 是否根据每个类所占据的权重,为不同的类设置不同的惩罚参数C

verbose :是否启用详细输出

max_iter: 最大迭代次数

decision_function_shape:‘ovo’ 一对一, ‘ovr’ 多对多 or None 无

当然,实际操作时上述很多参数均无需调整。依kernel不同产生影响的参数也不相同,影响最终结果的参数如下

核函数需要调整的参数
RBFC,gamma,tol,class_weight
polyC,gamma,tol,degree,coef0,class_weight
sigmoidC, gamma,tol,coef0,class_weight

三、参数优化示例

from sklearn.datasets import make_moons
from sklearn import svm
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import train_test_split

'''数据预处理'''
X,y = make_moons(n_samples=150, noise=0.15, random_state=42)
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)



# 初始化scores列表,用于存储不同参数组合的召回率平均值
scores = []

# 定义参数范围
c_param_range = [0.01, 0.1, 1, 10, 100]
gamma_param_range = [0.1, 0.5, 1, 5, 10]

# 外层循环遍历C参数
for c in c_param_range:
    # 内层循环遍历gamma参数
    for gamma in gamma_param_range:
        # 创建SVC模型实例,使用当前的C和gamma参数
        clf = svm.SVC(C=c, kernel='rbf', gamma=gamma)
        # 使用交叉验证计算召回率
        score = cross_val_score(clf, x_train, y_train, cv=10, scoring='recall')
        # 计算召回率的平均值
        score_mean = sum(score) / len(score)
        # 将当前参数组合的召回率平均值添加到scores列表中
        scores.append((score_mean, (c, gamma)))
        # 打印当前参数组合和对应的召回率平均值
        print(f"C={c}, gamma={gamma}, Mean Recall={score_mean}")  # 找到最佳参数组合和对应的召回率
    best_score = max(scores, key=lambda x: x[0])
    print(f"最佳参数: C={best_score[1][0]}, gamma={best_score[1][1]}, Best Mean Recall={best_score[0]}")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值