1.基本环境
编译器:PyCharm 2019.1.2
虚拟环境:Anaconda虚拟环境
scikit-learn版本: 0.22.2.post1

2.数据归一化

1
2
3
4
5
6
from sklearn.preprocessing import StandardScaler  # 归一化

# 归一化操作
scaler = StandardScaler()
x_train_data = scaler.fit_transform(x_train_data)
x_test_data = scaler.transform(x_test_data)

3.模型调参

1
2
3
4
5
6
7
8
9
10
11
12
13
from sklearn.model_selection import GridSearchCV  # 在sklearn中主要是使用GridSearchCV调参

svc_model = svm.SVC(kernel='rbf')
param_grid = {'C': [1e-3, 1e-2, 1e-1, 1, 10, 100, 1000], 'gamma': [0.001, 0.0001]} # param_grid:我们要调参数的列表(带有参数名称作为键的字典),此处共有14种超参数的组合来进行网格搜索,进而选择一个拟合分数最好的超平面系数。
grid_search = GridSearchCV(svc_model, param_grid, n_jobs=8, verbose=1) # n_jobs:并行数,int类型。(-1:跟CPU核数一致;1:默认值);verbose:日志冗长度。默认为0:不输出训练过程;1:偶尔输出;>1:对每个子模型都输出。
grid_search.fit(x_train_data, y_train_data.ravel()) # 训练,默认使用5折交叉验证
best_parameters = grid_search.best_estimator_.get_params() # 获取最佳模型中的最佳参数
print("cv results are" % grid_search.best_params_, grid_search.cv_results_) # grid_search.cv_results_:给出不同参数情况下的评价结果。
print("best parameters are" % grid_search.best_params_, grid_search.best_params_) # grid_search.best_params_:已取得最佳结果的参数的组合;
print("best score are" % grid_search.best_params_, grid_search.best_score_) # grid_search.best_score_:优化过程期间观察到的最好的评分。
# for para, val in list(best_parameters.items()):
# print(para, val)
svm_model = svm.SVC(kernel='rbf', C=best_parameters['C'], gamma=best_parameters['gamma']) # 最佳模型