第五章 三种搜索策略和超参数调优


前言

学习数据挖掘,用于记录练习和回顾


一、搜索策略

在这里插入图片描述

原理图

在这里插入图片描述


二、使用步骤

1.引入库

import numpy as np
import pandas as pd
from sklearn import svm
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split, RandomizedSearchCV, GridSearchCV
from sklearn.neural_network import MLPClassifier
from scipy.stats import randint as sp_randint
from skopt import BayesSearchCV
from skopt.space import Real, Categorical, Integer

2.读入数据

# 红酒质量数据
wine_quality = pd.read_csv("./UCI/wine_quality/winequality-red.csv", header="infer", sep=';')
X, Y = wine_quality.iloc[:, :-2], wine_quality.iloc[:, -1]  # 把分类属性与常规属性分开
# lenses.data
#lenses_data = pd.read_csv("./UCI/lenses.data", sep='  ')
#X, Y = lenses_data.iloc[:, 1:], lenses_data.iloc[:, 0] 
# tae.data
#tae_data = pd.read_csv("./UCI/tae.data")
#X, Y = tae_data.iloc[:, :-2], tae_data.iloc[:, -1]  
# 75%训练集,25%测试集,75%训练标签,25%测试标签
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size=0.25, random_state=0)

def report(results):
    for i in range(1, 4):
        candidates = np.flatnonzero(results['rank_test_score'] == i)
        for candidate in candidates:
            print("Model with rank:{0}".format(i))
            print("Mean validation score : {0:.3f} (std: {1:.3f})".
                  format(results['mean_test_score'][candidate],
                         results['std_test_score'][candidate]))
            print("Parameters: {0}".format(results['params'][candidate]))
            print("")


三、超参数调优

1、支持向量机 (网格搜索策略)

注意选择数据量小的数据集进行测试

clf = svm.SVC() 
# 设定搜索的分类器参数搜索范围,值搜索的主要参数
param_svc = {
        'kernel': ['rbf', 'linear', 'poly'],
        'C': [0.001, 0.01, 1, 10, 100],
        'gamma': [0.001, 0.01, 1, 10, 100]
}
grid_search = GridSearchCV(clf, param_grid=param_svc, cv=10)
grid_search.fit(x_train, y_train)
report(grid_search.cv_results_)

2、随机森林(随机搜索)

clf = RandomForestClassifier()
# 设定搜索的分类器参数搜索范围,值搜索的主要参数
param_rdf = {
    'n_estimators': range(10, 101, 10),
    'max_depth': range(3, 12, 1),
    'max_features': sp_randint(1, 5),
    'min_samples_split': sp_randint(2, 11),
    'criterion': ['gini', 'entropy']
}
# RandomizedSearchCV参数说明,clf设置训练的学习器
# param_dist字典类型,放入参数搜索范围
# n_iter=300,训练300次,数值越大,获得的参数精度越大,但是搜索时间越长
# n_jobs = -1,使用所有的CPU进行训练,默认为1,使用1个CPU
rd_search = RandomizedSearchCV(clf, param_rdf, cv=10, n_iter=300, n_jobs=2)

rd_search.fit(x_train, y_train)
report(rd_search.cv_results_)

3、神经网络 (贝叶斯搜索)

clf = MLPClassifier()
param_mlp = {
    'hidden_layer_sizes': tuple(range(10, 101, 10)),
    'solver': Categorical(['sgd', 'adam']),
    'alpha': Real(1e-4, 1e-1, 'log-uniform')
}
by_search = BayesSearchCV(clf, param_mlp, n_iter=300, cv=10)
by_search.fit(x_train, y_train)
report(by_search.cv_results_)

以上搜索策略可运用在不同分类器上,自行根据分类器进行参数设置即可


四、运行结果

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值