在Python机器学习中,参数调优是一个重要的步骤,它可以帮助我们找到最佳的模型参数,从而提高模型的性能。以下是一些常用的参数调优方法:
网格搜索是一种穷举搜索方法,它会在指定的参数范围内,对每个参数的所有可能值进行组合,然后训练和评估模型。
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
# 定义参数范围
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf'],
'gamma': ['scale', 'auto']
}
# 创建SVM模型
svc = SVC()
# 创建网格搜索对象
grid_search = GridSearchCV(estimator=svc, param_grid=param_grid, cv=5)
# 执行网格搜索
grid_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters found: ", grid_search.best_params_)
随机搜索是一种基于概率的搜索方法,它会在指定的参数范围内随机选择参数组合进行训练和评估。
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import loguniform
# 定义参数分布
param_dist = {
'C': loguniform(0.1, 10),
'kernel': ['linear', 'rbf'],
'gamma': ['scale', 'auto']
}
# 创建SVM模型
svc = SVC()
# 创建随机搜索对象
random_search = RandomizedSearchCV(estimator=svc, param_distributions=param_dist, n_iter=100, cv=5)
# 执行随机搜索
random_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters found: ", random_search.best_params_)
贝叶斯优化是一种基于概率模型的优化方法,它通过构建一个目标函数的概率模型来预测未知点的性能,并选择最有可能提高性能的点进行评估。
from skopt import BayesSearchCV
from skopt.space import Real, Categorical
# 定义参数空间
param_space = {
'C': Real(0.1, 10),
'kernel': Categorical(['linear', 'rbf']),
'gamma': Categorical(['scale', 'auto'])
}
# 创建SVM模型
svc = SVC()
# 创建贝叶斯优化对象
bayes_search = BayesSearchCV(estimator=svc, search_spaces=param_space, n_iter=50, cv=5)
# 执行贝叶斯优化
bayes_search.fit(X_train, y_train)
# 输出最佳参数
print("Best parameters found: ", bayes_search.best_params_)
还有一些自动化超参数调优工具,如Optuna、Hyperopt等,它们提供了更高级的功能和更好的性能。
import optuna
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
def objective(trial):
# 定义参数
C = trial.suggest_loguniform('C', 0.1, 10)
kernel = trial.suggest_categorical('kernel', ['linear', 'rbf'])
gamma = trial.suggest_categorical('gamma', ['scale', 'auto'])
# 创建SVM模型
svc = SVC(C=C, kernel=kernel, gamma=gamma)
# 计算交叉验证得分
score = cross_val_score(svc, X_train, y_train, cv=5).mean()
return score
# 创建Optuna研究对象
study = optuna.create_study(direction='maximize')
# 运行优化
study.optimize(objective, n_trials=100)
# 输出最佳参数
print("Best parameters found: ", study.best_params)
选择合适的调优方法取决于具体的问题和资源限制。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。