我正在使用Scikit-Learn自定义管道(sklearn.pipeline.Pipeline
)和RandomizedSearchCV
超参数优化.这非常有效.
现在我想插入一个Keras模型作为管道的第一步.应优化模型的参数.然后,计算(拟合)的Keras模型应该在管道中通过其他步骤使用,因此我认为我必须将模型存储为全局变量,以便其他管道步骤可以使用它.这是正确的吗?
我知道Keras为Scikit-Learn API提供了一些包装器,但问题是这些包装器已经进行了分类/回归,但我只想计算Keras模型而没有别的.
如何才能做到这一点?
例如,我有一个返回模型的方法:
def create_model(file_path, argument2,...):
...
return model
Run Code Online (Sandbox Code Playgroud)
该方法需要一些固定的参数,如文件路径等,但不需要(或可以忽略)X和y.应优化模型的参数(层数等).
pipeline machine-learning scikit-learn hyperparameters keras
我有一个非常简单的ANN使用Tensorflow和AdamOptimizer来解决回归问题,现在我正在调整所有超参数.
现在,我看到了许多不同的超参数,我必须调整:
我有两个问题:
1)你看到我可能忘记的任何其他超参数吗?
2)目前,我的调音非常"手动",我不确定我是不是以正确的方式做所有事情.是否有特殊的顺序来调整参数?例如学习率首先,然后批量大小,然后......我不确定所有这些参数是否独立 - 事实上,我很确定其中一些参数不是.哪些明显独立,哪些明显不独立?我们应该把它们调在一起吗?是否有任何纸张或文章谈论正确调整特殊订单中的所有参数?
编辑:这是我得到的不同初始学习率,批量大小和正则化参数的图表.紫色曲线对我来说是完全奇怪的...因为成本随着其他方式慢慢下降,但它却以较低的准确率陷入困境.该模型是否可能陷入局部最小值?
对于学习率,我使用了衰变:LR(t)= LRI/sqrt(epoch)
谢谢你的帮助 !保罗
为Pytorch模型执行超参数优化的最佳方法是什么?实施例如自己随机搜索?使用Skicit Learn?或者还有什么我不知道的?
我遇到的问题是我的超参数svm.SVC()
太宽,以至于GridSearchCV()
永远不会完成!一个想法是改为使用RandomizedSearchCV()
.但同样,我的数据集相对较大,因此500次迭代需要大约1小时!
我的问题是,为了阻止浪费资源,GridSearchCV(或RandomizedSearchCV)的一个好的设置(就每个超参数的值范围而言)是什么?
换句话说,如何判断C
100以上的值是否有意义和/或1的步长既不大也不小?很感谢任何形式的帮助.这是我目前正在使用的设置:
parameters = {
'C': np.arange( 1, 100+1, 1 ).tolist(),
'kernel': ['linear', 'rbf'], # precomputed,'poly', 'sigmoid'
'degree': np.arange( 0, 100+0, 1 ).tolist(),
'gamma': np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
'coef0': np.arange( 0.0, 10.0+0.0, 0.1 ).tolist(),
'shrinking': [True],
'probability': [False],
'tol': np.arange( 0.001, 0.01+0.001, 0.001 ).tolist(),
'cache_size': [2000],
'class_weight': [None],
'verbose': [False],
'max_iter': [-1],
'random_state': [None],
}
model = grid_search.RandomizedSearchCV( n_iter = 500,
estimator = svm.SVC(),
param_distributions = parameters,
n_jobs = 4, …
Run Code Online (Sandbox Code Playgroud) 我之前使用过Scikit-learn的GridSearchCV来优化我的模型的超参数,但只是想知道是否存在类似的工具来优化Tensorflow的超参数(例如,时期数,学习率,滑动窗口大小等)
如果没有,我如何实现一个有效运行所有不同组合的片段?
我通过网格搜索CV为我的KNN估算器找到了一组最好的超参数:
>>> knn_gridsearch_model.best_params_
{'algorithm': 'auto', 'metric': 'manhattan', 'n_neighbors': 3}
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我想用这些新发现的参数训练我的最终估算器.有没有办法直接提供上面的超参数字典?我试过这个:
>>> new_knn_model = KNeighborsClassifier(knn_gridsearch_model.best_params_)
Run Code Online (Sandbox Code Playgroud)
但相反,希望的结果new_knn_model
只是将整个字典作为模型的第一个参数,并将其余的作为默认值:
>>> knn_model
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',
metric_params=None, n_jobs=1,
n_neighbors={'n_neighbors': 3, 'metric': 'manhattan', 'algorithm': 'auto'},
p=2, weights='uniform')
Run Code Online (Sandbox Code Playgroud)
确实令人失望.
python machine-learning scikit-learn hyperparameters grid-search
如何在objective
Optuna 功能内同时优化多个指标。例如,我正在训练 LGBM 分类器,希望为所有常见分类指标(如 F1、精度、召回率、准确度、AUC 等)找到最佳超参数集。
def objective(trial):
# Train
gbm = lgb.train(param, dtrain)
preds = gbm.predict(X_test)
pred_labels = np.rint(preds)
# Calculate metrics
accuracy = sklearn.metrics.accuracy_score(y_test, pred_labels)
recall = metrics.recall_score(pred_labels, y_test)
precision = metrics.precision_score(pred_labels, y_test)
f1 = metrics.f1_score(pred_labels, y_test, pos_label=1)
...
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我正在为Tensorflow(不是Keras或Tflearn)中直接编写的代码搜索超参数调整包.你能提一些建议吗?
optimization machine-learning bayesian hyperparameters tensorflow
这篇文章是关于LogisticRegressionCV,GridSearchCV和cross_val_score之间的区别。请考虑以下设置:
import numpy as np
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression, LogisticRegressionCV
from sklearn.model_selection import train_test_split, GridSearchCV, \
StratifiedKFold, cross_val_score
from sklearn.metrics import confusion_matrix
read = load_digits()
X, y = read.data, read.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3)
Run Code Online (Sandbox Code Playgroud)
在惩罚逻辑回归中,我们需要设置控制正则化的参数C。scikit-learn中有3种通过交叉验证找到最佳C的方法。
clf = LogisticRegressionCV (Cs = 10, penalty = "l1",
solver = "saga", scoring = "f1_macro")
clf.fit(X_train, y_train)
confusion_matrix(y_test, clf.predict(X_test))
Run Code Online (Sandbox Code Playgroud)
旁注:文档指出,SAGA和LIBLINEAR是L1惩罚的唯一优化器,而SAGA对于大型数据集则更快。不幸的是,热启动仅适用于Newton-CG和LBFGS。
clf = LogisticRegression (penalty = "l1", solver = "saga", warm_start = True)
clf …
Run Code Online (Sandbox Code Playgroud) python machine-learning scikit-learn cross-validation hyperparameters
我想将 optuna 的 Study.optimize verbosity 设置为 0。我想optuna.logging.set_verbosity(0)
可能会这样做,但我仍然得到Trial 0 finished with value ....
每次试验的更新
这样做的正确方法是什么?不幸的是,对文档的大量搜索仍然只能得到上述方法。
提前谢谢了
hyperparameters ×10
scikit-learn ×5
python ×4
tensorflow ×3
optuna ×2
bayesian ×1
convolution ×1
grid-search ×1
keras ×1
optimization ×1
pipeline ×1
pytorch ×1
svm ×1