利用交叉验证寻找SVM最优惩罚因子和松弛因子

 一、案例分析

1.导入所需的库:

import pandas as pd#用于处理数据表格
import numpy as np#处理数组
from sklearn.metrics import classification_report#score的summary
from sklearn.model_selection import cross_val_score,train_test_split
#用于交叉验证,分割数据集
from sklearn.svm import SVC#支持向量机算法
from imblearn.over_sampling import SMOTE#处理标签不平衡的过采样算法

2.读取数据文件:

data = pd.read_excel('data.xls')
X = data.iloc[:, :-1]
y = data.iloc[:, -1]

这段代码使用pandas库读取名为'data.xls'的Excel文件,并将输入特征X和目标变量y分别存储起来。

3.划分训练集和测试集:

x_train, x_test, y_train, y_test = \
    train_test_split(X, y, test_size=0.2, random_state=0)

使用train_test_split函数将数据集划分为训练集和测试集,其中测试集占总数据集的20%。

4.过采样处理:

oversampler = SMOTE(random_state=0)
os_train_x, os_train_y = oversampler.fit_resample(x_train, y_train)

使用SMOTE方法对训练集进行过采样处理,生成平衡的训练数据集os_train_x和对应的目标变量os_train_y

5.输出过采样后的样本数量:

print(len(os_train_y[os_train_y==1]))
print(len(os_train_y[os_train_y==0]))

输出经过过采样处理后的样本数量,显示少数类样本(类别为1)和多数类样本(类别为0)的数量。
 

6.设置SVM模型参数范围:

c_params_range = [0.01, 0.1, 1.0, 10, float('inf')]
g_params_range = [0.1, 1, 10, 'scale']

定义了C参数和gamma参数的取值范围,用于进行交叉验证选择最佳的超参数。

7.使用交叉验证选择最佳参数(详见:交叉验证svm参数):

scores = []
for i in c_params_range:
    for j in g_params_range:
        print(f'c为:{i},gamma为{j})', end='')
        svm = SVC(kernel='rbf', C=i, gamma=j, random_state=0)
        score = cross_val_score(svm, os_train_x, os_train_y, cv=10, scoring='recall')
        #10折交叉验证(k=cv=10)
        score_mean = sum(score) / len(score)
        print(score_mean)
        scores.append(score_mean)

通过嵌套循环遍历参数范围,构建SVC模型,使用交叉验证计算每组参数值的分类器性能(这里以召回率作为评估指标),并将召回率的平均值存储在scores列表中。选择最佳参数值

8.选择最佳参数值:

best_c = c_params_range[np.argmax(scores) // 4]
best_g = g_params_range[np.argmax(scores) % 4]
print(best_c, best_g)

选取召回率最大的组合对应的参数值,即best_cbest_g

9.使用最佳参数值训练分类器并进行预测:

svm = SVC(kernel='rbf', C=best_c, gamma=best_g, random_state=0)
svm.fit(x_test, y_test)
pred = svm.predict(x_test)

创建一个使用最佳参数值的SVC模型,对测试集进行训练,并进行预测。

10.输出分类器性能报告:

print(classification_report(y_test, pred))

输出测试集上的分类性能报告,包括准确率、召回率、F1值等指标。

二、代码结果:

三、总结

总体而言,这段代码使用SMOTE进行过采样处理,然后对过采样后的数据进行交叉验证选择最佳参数的SVM模型,在测试集上进行评估并输出分类性能报告。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
gwo-svm分类算法是一种结合了灰狼优化(GWO)算法支持向量机SVM)的分类算法。它利用灰狼优化算法中的群体智能和搜索能力来自动SVM分类器的参数,以提高分类的准确性和泛化能力。 具体而言,gwo-svm分类代码的实现步骤如下: 1. 数据预处理:首先,对于给定的分类数据集,需要进行数据清洗、缺失值处理和特征择等预处理操作,以使数据集具备可分性和适合SVM使用的特征。 2. 初始化灰狼群体:通过对SVM参数进行随机初始化,生成初始的灰狼群体,并设置适应度函数,该函数度量了每个灰狼个体的性能,即分类准确性或错误率。 3. 灰狼优化迭代:在每一代的迭代中,根据当前的灰狼个体位置和目标函数值,更新每个灰狼个体的位置。通过灰狼之间的协作和竞争,使得灰狼个体逐渐朝着全局最优解的方向移动。 4. 更新SVM参数:在每次迭代中,根据灰狼个体的位置,更新SVM的参数。常见的SVM参数包括核函数类型、惩罚因子C和松弛变量epsilon等。 5. 结束条件判断:通过设定最大迭代次数或达到预先设定的性能准则,判断是否终止算法的运行。如果满足结束条件,则输出最优SVM分类器参数。 6. 分类器性能评估:使用得到的最优SVM分类器参数对测试集进行分类,并评估其分类性能,如准确率、召回率、F1值等。 总结:gwo-svm分类代码的实现过程是通过灰狼优化算法自适应地SVM的参数来提高分类性能。通过灵活调整灰狼个体的位置和搜索策略,使得SVM能够更好地适应实际分类问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值