标签: hyperparameters

MATLAB中与算法无关的超参数网格搜索

我想比较不同的机器学习算法.作为其中的一部分,我需要能够执行网格搜索以获得最佳超参数.但是,我并没有真正想到为每个固定算法和其超参数的固定子集编写单独的网格搜索实现.相反,我希望它看起来更像是在scikit-learn中,但可能没有那么多功能(例如我不需要多个网格)并且用MATLAB编写.

到目前为止,我试图理解尚未编写的逻辑 grid_search.m

function model = grid_search(algo, data, labels, varargin)
    p = inputParser;
    % here comes the list of all possible hyperparameters for all algorithms
    % I will just leave three for brevity
    addOptional(p, 'kernel_function', {'linear'});
    addOptional(p, 'rbf_sigma', {1});
    addOptional(p, 'C', {1});

    parse(p, algo, data, labels, varargin{:});

    names = fieldnames(p.Results);
    values = struct2cell(p.Results); % a cell array of cell arrays

    argsize = 2 * length(names);
    args = cell(1, argsize);
    args(1 : 2 : argsize) = names; …
Run Code Online (Sandbox Code Playgroud)

algorithm matlab machine-learning hyperparameters

5
推荐指数
1
解决办法
1878
查看次数

Pyspark-获取使用ParamGridBuilder创建的模型的所有参数

我正在使用PySpark 2.0进行Kaggle比赛。我想知道模型(RandomForest)的行为,具体取决于不同的参数。ParamGridBuilder()允许为单个参数指定不同的值,然后执行(我想)整个参数集的笛卡尔积。假设我DataFrame已经定义:

rdc = RandomForestClassifier()
pipeline = Pipeline(stages=STAGES + [rdc])
paramGrid = ParamGridBuilder().addGrid(rdc.maxDepth, [3, 10, 20])
                              .addGrid(rdc.minInfoGain, [0.01, 0.001])
                              .addGrid(rdc.numTrees, [5, 10, 20, 30])
                              .build()
evaluator = MulticlassClassificationEvaluator()
valid = TrainValidationSplit(estimator=pipeline,
                             estimatorParamMaps=paramGrid,
                             evaluator=evaluator,
                             trainRatio=0.50)
model = valid.fit(df)
result = model.bestModel.transform(df)
Run Code Online (Sandbox Code Playgroud)

好的,现在我可以使用手工功能检索简单的信息:

def evaluate(result):
    predictionAndLabels = result.select("prediction", "label")
    metrics = ["f1","weightedPrecision","weightedRecall","accuracy"]
    for m in metrics:
        evaluator = MulticlassClassificationEvaluator(metricName=m)
        print(str(m) + ": " + str(evaluator.evaluate(predictionAndLabels)))
Run Code Online (Sandbox Code Playgroud)

现在我想要几件事:

  • 最佳模型的参数是什么?这篇文章部分回答了这个问题:如何从PySpark中的spark.ml中提取模型超参数?
  • 所有型号的参数是什么?
  • 每个模型的结果(又称为召回率,准确性等)是什么?我只发现print(model.validationMetrics)显示(似乎)包含每个模型准确性的列表,但是我不知道要引用哪个模型。

如果我可以检索所有这些信息,则应该能够显示图形,条形图,并且可以像使用Panda和一样工作sklearn

python machine-learning hyperparameters pyspark apache-spark-ml

5
推荐指数
1
解决办法
4571
查看次数

在hyperopt中设置条件搜索空间时出现问题

我会完全承认我可能在这里设置了错误的条件空间,但是由于某种原因,我根本无法使它发挥作用。我正在尝试使用hyperopt来调整逻辑回归模型,并且取决于求解器,还需要探索其他一些参数。如果选择liblinear解算器,则可以选择惩罚,根据惩罚,您还可以选择对偶。但是,当我尝试在此搜索空间上运行hyperopt时,它一直给我一个错误,因为它通过了整个字典,如下所示。有任何想法吗?我得到的错误是'ValueError:Logistic回归仅支持liblinear,newton-cg,lbfgs和sag求解器,得到了{'solver':'sag'}'这种格式在设置随机森林搜索空间时有效,所以我米茫然。

import numpy as np
import scipy as sp
import pandas as pd
pd.options.display.max_columns = None
pd.options.display.max_rows = None
import matplotlib.pyplot as plt
%matplotlib inline
import seaborn as sns
sns.set(style="white")
import pyodbc
import statsmodels as sm
from pandasql import sqldf
import math
from tqdm import tqdm
import pickle


from sklearn.preprocessing import RobustScaler, OneHotEncoder, MinMaxScaler
from sklearn.utils import shuffle
from sklearn.cross_validation import KFold, StratifiedKFold, cross_val_score, cross_val_predict, train_test_split
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import StratifiedKFold as StratifiedKFoldIt
from sklearn.feature_selection import RFECV, …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn logistic-regression hyperparameters hyperopt

5
推荐指数
1
解决办法
715
查看次数

投票分类器中的超参数

所以,我有一个看起来像的分类器

clf = VotingClassifier(estimators=[ 
        ('nn', MLPClassifier()), 
        ('gboost', GradientBoostingClassifier()),
        ('lr', LogisticRegression()),

        ], voting='soft')
Run Code Online (Sandbox Code Playgroud)

我想基本上调整每个估算器的超参数.

有没有办法调整分类器的这些"组合"?谢谢

python machine-learning scikit-learn hyperparameters grid-search

5
推荐指数
1
解决办法
2156
查看次数

如何在深度学习中选择CNN的窗口大小?

在卷积神经网络(CNN)中,选择滤波器用于权重共享.例如,在以下图片中,选择具有步幅(相邻神经元之间的距离)1的3×3窗口.

在此输入图像描述

在此输入图像描述

所以我的问题是:如何选择窗口大小?如果我使用4x4,步幅是2,它会产生多大的差异?非常感谢提前!

machine-learning deep-learning hyperparameters conv-neural-network data-science

5
推荐指数
1
解决办法
3401
查看次数

张量流对象检测API中的超参数优化

有没有办法在对象检测API的配置文件中指定Hyperopt等超参数优化来微调模型?

object-detection hyperparameters tensorflow object-detection-api

5
推荐指数
1
解决办法
413
查看次数

使用Keras和GPU执行超参数搜索的最佳方法?

我目前想在我拥有的简单Keras神经网络上进行超参数搜索。我目前的计划是使用sklearn GridSearchCV功能,并使用keras.utils.multi_gpu_model将其拆分到我可以访问的2个GPU中。我相信这会很好,但是可能仍需要很长时间才能完成搜索。

有没有更有效的方法可以做到这一点?我似乎无法将GridSearch中的n_jobs标志设置为-1,这将使作业并行运行,我只是无法在GPU上执行此操作?

gpu scikit-learn hyperparameters keras

5
推荐指数
0
解决办法
155
查看次数

基于模型的优化(以mlrMBO为单位)需要多少次迭代?

我想在R(mlrMBO)的mlr-Package中使用基于模型的优化来调整我的超参数.这里推荐多少次迭代?我已经读过MBO中必要的迭代次数取决于超参数的数量,应该乘以某个因子?

performance r hyperparameters mlr

5
推荐指数
1
解决办法
125
查看次数

如何将 hparams 与估计器一起使用?

要在不使用Keras 的情况下记录 hparams ,我正在按照此处的 tf 代码中的建议执行以下操作:

with tf.summary.create_file_writer(model_dir).as_default():
    hp_learning_rate = hp.HParam("learning_rate", hp.RealInterval(0.00001, 0.1))
    hp_distance_margin = hp.HParam("distance_margin", hp.RealInterval(0.1, 1.0))
    hparams_list = [
        hp_learning_rate,
        hp_distance_margin
    ]
    metrics_to_monitor = [
        hp.Metric("metrics_standalone/auc", group="validation"),
        hp.Metric("loss", group="train", display_name="training loss"),
    ]
    hp.hparams_config(hparams=hparams_list, metrics=metrics_to_monitor)
    hparams = {
        hp_learning_rate: params.learning_rate,
        hp_distance_margin: params.distance_margin,
    }
    hp.hparams(hparams)
Run Code Online (Sandbox Code Playgroud)

请注意,params这里是一个字典对象,我将传递给估算器。

然后我像往常一样训练估计器,

config = tf.estimator.RunConfig(model_dir=params.model_dir)
estimator = tf.estimator.Estimator(model_fn, params=params, config=config)
train_spec = tf.estimator.TrainSpec(...)
eval_spec = tf.estimator.EvalSpec(...)

tf.estimator.train_and_evaluate(estimator, train_spec=train_spec, eval_spec=eval_spec)
Run Code Online (Sandbox Code Playgroud)

训练后,当我启动 tensorboard 时,我确实记录了 hparams,但我没有看到任何针对它们记录的指标

在此处输入图片说明

我进一步确认它们在scalars页面中显示为具有相同标签名称的训练和验证 ie …

python hyperparameters tensorflow tensorboard

5
推荐指数
1
解决办法
875
查看次数

如何分解大型网格搜索?

我希望为不同的神经网络配置运行一个非常大的网格搜索。就其完整性而言,使用我当前的硬件运行是不切实际的。我知道可能有比朴素网格搜索(例如随机、贝叶斯优化)更好的技术,但是我的问题是我们可以对首先包含的内容做出哪些合理的假设。具体来说,就我而言,我希望在

  • A:隐藏层数
  • B:隐藏层的大小
  • C:激活函数
  • D:L1
  • 乙:L2
  • F:辍学

我有一个想法是将(1)标识的网络结构c通过运行AC网格搜索,(2)选择 c具有最低(例如MSE)误差(对测试数据集),和(3)的运行与配置网络c通过DF 上的单独网格搜索,以确定最合适的正则化策略。

在这种情况下,这是一种明智的方法,还是理论上我可以通过使用在第一次网格搜索(即 AC)中显示更高错误的网络配置来获得更低的最终错误(即在正则化之后)?

machine-learning neural-network regularized hyperparameters

5
推荐指数
1
解决办法
112
查看次数