SKLearn中SVM参数自动选择的最简单示例(使用GridSearchCV)

大家都知道,SVM如果在调参比较好的情况下,可以达到很好的分类效果,不过SVM也确实参数比较多,例如在这里介绍的:

https://blog.csdn.net/xiaodongxiexie/article/details/70667101

也有些朋友对调参过程做了比较详细的解释:

https://blog.csdn.net/baidu_15113429/article/details/72673466

据网友介绍,SVM调参过程中应主要调kernel,C 和gamma,对于SKLearn,我们可以使用GridSearchCV对参数进行自动化搜索,有网友对其使用方法进行了详细介绍:

https://blog.csdn.net/cherdw/article/details/54970366

其官网的文档在这里:http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html

不过上面的博客和教程都有些复杂,我这里给出最简单的示例:

from sklearn import svm
from sklearn.model_selection import GridSearchCV

svr = svm.SVC()
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 2, 4], 'gamma':[0.125, 0.25, 0.5 ,1, 2, 4]}
clf = GridSearchCV(svr, parameters, scoring='f1')
clf.fit(X, y)
print('The parameters of the best model are: ')
print(clf.best_params_)

关于scoring这个参数,在这里有更多的介绍:

http://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter

我这里用的是f1,其他的参数值可以参考这个表:

ScoringFunctionComment
Classification  
‘accuracy’metrics.accuracy_score 
‘average_precision’metrics.average_precision_score 
‘f1’metrics.f1_scorefor binary targets
‘f1_micro’metrics.f1_scoremicro-averaged
‘f1_macro’metrics.f1_scoremacro-averaged
‘f1_weighted’metrics.f1_scoreweighted average
‘f1_samples’metrics.f1_scoreby multilabel sample
‘neg_log_loss’metrics.log_lossrequires predict_proba support
‘precision’ etc.metrics.precision_scoresuffixes apply as with ‘f1’
‘recall’ etc.metrics.recall_scoresuffixes apply as with ‘f1’
‘roc_auc’metrics.roc_auc_score 
Clustering  
‘adjusted_mutual_info_score’metrics.adjusted_mutual_info_score 
‘adjusted_rand_score’metrics.adjusted_rand_score 
‘completeness_score’metrics.completeness_score 
‘fowlkes_mallows_score’metrics.fowlkes_mallows_score 
‘homogeneity_score’metrics.homogeneity_score 
‘mutual_info_score’metrics.mutual_info_score 
‘normalized_mutual_info_score’metrics.normalized_mutual_info_score 
‘v_measure_score’metrics.v_measure_score 
Regression  
‘explained_variance’metrics.explained_variance_score 
‘neg_mean_absolute_error’metrics.mean_absolute_error 
‘neg_mean_squared_error’metrics.mean_squared_error 
‘neg_mean_squared_log_error’metrics.mean_squared_log_error 
‘neg_median_absolute_error’metrics.median_absolute_error 
‘r2’metrics.r2_score 

支持向量机(SVM)是一种常用的机器学习算法,用于分类和回归问题。在处理分类问题时,选择合适的参数对于模型性能至关重要。以下是一个基本的使用Scikit-Learn库在Python中实现SVM分类问题,并进行参数优化的示例: 首先,确保安装了必要的库: ```bash pip install scikit-learn numpy matplotlib ``` 然后,我们可以创建一个简单的SVM分类器并使用GridSearchCV进行参数搜索: ```python import numpy as np from sklearn import datasets from sklearn.model_selection import train_test_split, GridSearchCV from sklearn.svm import SVC from sklearn.metrics import classification_report import matplotlib.pyplot as plt # 加载数据集(这里以Iris数据集为例) iris = datasets.load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 初始化SVM分类器 svm = SVC() # 设置参数网格搜索范围(例如,C值和gamma值) param_grid = {'C': [0.1, 1, 10, 100], 'gamma': ['scale', 'auto']} # 创建GridSearchCV实例 grid_search = GridSearchCV(svm, param_grid, cv=5) # 使用交叉验证 # 训练模型 grid_search.fit(X_train, y_train) # 获取最佳参数 best_params = grid_search.best_params_ print(f"Best parameters: {best_params}") # 预测测试集 y_pred = grid_search.predict(X_test) # 评估模型 print(classification_report(y_test, y_pred)) # 可视化结果 plt.figure(figsize=(10, 6)) plt.plot(range(1, len(grid_search.cv_results_['mean_test_score'])+1), grid_search.cv_results_['mean_test_score'], marker='o') plt.xlabel('Parameter sets') plt.ylabel('Cross-validation score') plt.title(f"SVM Parameter Tuning Results ({best_params})") plt.show() ``` 在这个例子中,我们首先加载数据、划分数据集,然后定义了一个SVM分类器并设置了一个参数网格。通过GridSearchCV,我们可以在给定的参数范围内找到最优组合。最后,我们评估了模型在测试集上的性能,并可视化了不同参数组合的平均交叉验证得分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值