标签: hyperparameters

将sklearn流水线+嵌套交叉验证放在一起进行KNN回归

我试图弄清楚如何为此构建工作流sklearn.neighbors.KNeighborsRegressor,包括:

  • 归一化特征
  • 特征选择(20个数字特征的最佳子集,无特定总数)
  • 在1到20的范围内交叉验证超参数K
  • 交叉验证模型
  • 使用RMSE作为误差指标

scikit-learn中有很多不同的选项,我在决定我需要的类时有点不知所措。

此外sklearn.neighbors.KNeighborsRegressor,我认为我需要:

sklearn.pipeline.Pipeline  
sklearn.preprocessing.Normalizer
sklearn.model_selection.GridSearchCV
sklearn.model_selection.cross_val_score

sklearn.feature_selection.selectKBest
OR
sklearn.feature_selection.SelectFromModel
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我定义此管道/工作流程的样子吗?我认为应该是这样的:

import numpy as np
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import Normalizer
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import cross_val_score, GridSearchCV

# build regression pipeline
pipeline = Pipeline([('normalize', Normalizer()),
                     ('kbest', SelectKBest(f_classif)),
                     ('regressor', KNeighborsRegressor())])

# try knn__n_neighbors from 1 to 20, and feature count from 1 to len(features)
parameters = {'kbest__k':  list(range(1, X.shape[1]+1)),
              'regressor__n_neighbors': list(range(1,21))}

# …
Run Code Online (Sandbox Code Playgroud)

python pipeline feature-selection scikit-learn hyperparameters

3
推荐指数
1
解决办法
1290
查看次数

网格使用keras搜索隐藏层的数量

我正在尝试使用Keras和sklearn来优化我的NN的超参数.我正在使用KerasClassifier(这是一个分类问题).我正在尝试优化隐藏层的数量.我不知道如何用keras做到这一点(实际上我想知道如何设置函数create_model以最大化隐藏层的数量)有谁可以帮助我?

我的代码(只是重要部分):

## Import `Sequential` from `keras.models`
from keras.models import Sequential

# Import `Dense` from `keras.layers`
from keras.layers import Dense

def create_model(optimizer='adam', activation = 'sigmoid'):
  # Initialize the constructor
  model = Sequential()
  # Add an input layer
  model.add(Dense(5, activation=activation, input_shape=(5,)))
  # Add one hidden layer
  model.add(Dense(8, activation=activation))
  # Add an output layer 
  model.add(Dense(1, activation=activation))
  #compile model
  model.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=
  ['accuracy'])
  return model
my_classifier = KerasClassifier(build_fn=create_model, verbose=0)# Create 
hyperparameter space
epochs = [5, 10]
batches = [5, 10, 100]
optimizers = …
Run Code Online (Sandbox Code Playgroud)

python neural-network hyperparameters keras

3
推荐指数
1
解决办法
3087
查看次数

高斯过程回归的内核参数:如何在 Scikit-learn 中获取它们?

我使用Scikit-learn 的GaussianProcessRegressor在我的回归操作中使用平方指数核或RBF。另外,我使用内部可用的优化器(L-BFGS-B 算法)来优化 Kernel 参数。在我的例子中,内核参数是长度尺度和信号方差。有关的文档如下:'fmin_l_bfgs_b'log_marginal_likelihood

在此处输入图片说明

我按照此文档打印GPML kernellog_marginal_likelihood. 以下是代码片段:

print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
       gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)

在控制台打印以下值:

    GPML kernel: 31.6**2 * RBF(length_scale=1.94)
Log-marginal-likelihood: (-115.33295413296841, array([ 1.01038168e+02, -2.16465175e-07]))
Run Code Online (Sandbox Code Playgroud)

在这里,我无法弄清楚以对数边际似然打印的值。数组中的值是什么?

我关于回归的代码片段如下:

print("GPML kernel: %s" % gp.kernel_)
print("Log-marginal-likelihood:",
       gp.log_marginal_likelihood(gp.kernel_.theta, eval_gradient = True))
Run Code Online (Sandbox Code Playgroud)

我打印内核参数的方法正确吗?

谢谢!

python regression scikit-learn hyperparameters

3
推荐指数
1
解决办法
2614
查看次数

Sklearn MLP 分类器超参数优化(RandomizedSearchCV)

我设置了以下参数:

parameter_space = {
    'hidden_layer_sizes': [(sp_randint(100,600),sp_randint(100,600),), (sp_randint(100,600),)],
    'activation': ['tanh', 'relu', 'logistic'],
    'solver': ['sgd', 'adam', 'lbfgs'],
    'alpha': stats.uniform(0.0001, 0.9),
    'learning_rate': ['constant','adaptive']}
Run Code Online (Sandbox Code Playgroud)

除了 hidden_​​layer_sizes 之外的所有参数都按预期工作。但是,拟合这个 RandomizedSearchCV 模型并显示它的详细文本表明它将 hidden_​​layer_sizes 视为:

hidden_layer_sizes=(<scipy.stats._distn_infrastructure.rv_frozen object 然后继续抛出: TypeError: '<=' not supported between instances of 'rv_frozen' and 'int'

这个结果是获得的,而不是预期的 1 层或 2 层 MLP,隐藏层神经元在 100 到 600 之间。任何想法/其他相关提示?

python machine-learning scikit-learn hyperparameters

3
推荐指数
1
解决办法
5839
查看次数

如何在caret包中的指定网格中随机搜索?

我想知道是否可以在预定义的网格中使用随机搜索。例如,我的网格有alphaand lambdaforglmnet方法。alpha介于 0 和 1 之间,lambda介于 -10 到 10 之间。我想使用随机搜索 5 次来随机尝试此范围内的点。我为网格搜索编写了以下代码,它工作正常,但我无法修改它以进行有限的随机搜索。

rand_ctrl <- trainControl(method = "repeatedcv", repeats = 5,
                          search = "random")
grid <- expand.grid(alpha=seq(0,1,0.1),lambda=seq(-10,10,1)) # I think this should be modified
rand_search <- train(Response ~ ., data = train_dat,
                     method = "glmnet",
                     ## Create 20 random parameter values
                     metric = "RMSE",
                     tuneLength = 5,
                     preProc = c("scale"),
                     tuneGrid = grid,
                     trControl = rand_ctrl)
Run Code Online (Sandbox Code Playgroud)

regression r training-data hyperparameters r-caret

3
推荐指数
1
解决办法
1423
查看次数

ap_uniform_sampler() 缺少 1 个必需的位置参数:python 的 Ray Tune 包中的“高”

我正在尝试使用 Ray Tune包对使用纯 Tensorflow 实现的 LSTM 进行超参数调整。我用的超频调度和HyperOptSearch算法这一点,我也使用可训练类的方法。当我尝试运行它时,出现以下错误:

类型错误:ap_uniform_sampler() 缺少 1 个必需的位置参数:“高”

下面显示的是堆栈跟踪:

FutureWarning:不推荐将 issubdtype 的第二个参数从floatto转换np.floating。将来,它将被视为np.float64 == np.dtype(float).type. from ._conv import register_converters as _register_converters Process STDOUT 和 STDERR 被重定向到 /tmp/ray/session_2018-12-19_09-43-46_5469/logs。等待 127.0.0.1:14332 处的 redis 服务器响应... 等待 127.0.0.1:25158 处的 redis 服务器响应... 使用 /dev/shm 启动具有 3.220188364 GB 内存的 Plasma 对象存储。无法启动 UI,您可能需要运行“pip install jupyter”。== 状态 == 使用 HyperBand:num_stopped=0 total_brackets=0 第 0 轮:请求的资源:0/4 个 CPU,0/0 个 GPU 此节点上的内存使用量:3.7/8.1 GB

Traceback (most recent call last):   
File …
Run Code Online (Sandbox Code Playgroud)

python-3.x ray hyperparameters tensorflow hyperopt

3
推荐指数
1
解决办法
1854
查看次数

随机搜索获取参数未实现

我正在一些图像上训练我的 cnn 模型,并想为超参数优化添加随机搜索,但我在使用超参数的随机搜索时遇到了麻烦。我正在分享我的模型和一些代码以及我遇到的错误。

我尝试过 sklearn 文档示例和其他文章,但没有从那里得到任何帮助。也尝试过网格搜索,但遇到了同样的问题

def Model(Classes):
    activation='relu' # or linear
    dropout_rate=0.0 # or 0.2
    init_mode='uniform'
    weight_constraint=0 # or  4
    optimizer='adam' # or SGD
    lr = 0.01
    momemntum=0

    #model
    model=Sequential()
    model.add(Conv2D(20,(2,2),padding="same"))
    model.add(Activation(activation))
    model.add(Conv2D(20,(2,2),padding="same"))
    model.add(Activation(activation))
    model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))



    model.add(Conv2D(80,(5,5),padding="same"))
    model.add(Activation(activation))
    model.add(Conv2D(80,(5,5),padding="same"))
    model.add(Activation(activation))
    model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))



    model.add(Conv2D(100,(5,5),padding="same"))
    model.add(Activation(activation))
    model.add(Conv2D(100,(5,5),padding="same"))
    model.add(Activation(activation))
    model.add(MaxPooling2D(pool_size=(5,5),strides=(2,2)))
    model.add(Dropout(dropout_rate))


    model.add(Flatten())

    model.add(Dense(units=64,activation=activation, 
    kernel_regularizer=regularizers.l2(0.001),
                activity_regularizer=regularizers.l1(0.001)))

    model.add(Dense(units=128,activation=activation, 
    kernel_regularizer=regularizers.l2(0.001),
                activity_regularizer=regularizers.l1(0.01)))

    model.add(Dense(units=Classes,activation=activation))

    model.compile(loss=losses.binary_crossentropy,
                 optimizer=optimizer,
                 metrics=['accuracy'])
    return model




model=Model(2)

activation =  ['relu', 'tanh', 'sigmoid', 'hard_sigmoid', 'linear'] 
optimizer=['adam','adagrad']
epochs = [1, 10] # add 50, 100, 150 etc
batch_size …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn deep-learning hyperparameters keras

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

随机森林的tuneRF与插入符调谐

我尝试使用 randomForest 包中包含的uneRF工具来调整随机森林模型,并且我还使用插入符包来调整我的模型。问题是我正在尝试进行 mtry,并且每种方法都会得到不同的结果。问题是我如何知道哪种方法是最好的方法以及基于什么?我不清楚我是否应该期待类似或不同的结果。

uneRF:通过这种方法,我得到的最佳 mtry 是 3

t <- tuneRF(train[,-12], train[,12],
        stepFactor = 0.5,
        plot = TRUE,
        ntreeTry = 100,
        trace = TRUE,
        improve = 0.05)
Run Code Online (Sandbox Code Playgroud)

插入符号:通过这种方法,我总是得到最好的 mtry 是这种情况下的所有变量 6

control <- trainControl(method="cv", number=5)
tunegrid <- expand.grid(.mtry=c(2:6))
set.seed(2)
custom <- train(CRTOT_03~., data=train, method="rf", metric="rmse", 
                tuneGrid=tunegrid, ntree = 100, trControl=control)
Run Code Online (Sandbox Code Playgroud)

r random-forest hyperparameters r-caret

3
推荐指数
1
解决办法
4480
查看次数

使用 python 网格搜索进行高斯过程回归高参数优化

我开始使用 Sklearn 库使用我自己的数据点学习高斯回归,如下所示。虽然我得到的结果是不准确的,因为我没有进行超参数优化。我做了一些谷歌搜索并编写了gridsearch代码。但代码没有按预期运行。我不知道我在哪里犯了错误,请帮助并提前致谢。

输入和输出数据的样本如下

X_tr= [10.8204  7.67418 7.83013 8.30996 8.1567  6.94831 14.8673 7.69338 7.67702 12.7542 11.847] 
y_tr= [1965.21  854.386 909.126 1094.06 1012.6  607.299 2294.55 866.316 822.948 2255.32 2124.67]
X_te= [7.62022  13.1943 7.76752 8.36949 7.86459 7.16032 12.7035 8.99822 6.32853 9.22345 11.4751]
Run Code Online (Sandbox Code Playgroud)

X_tr, y_trX_te是训练数据点,是重塑值,并且具有“float64 数组”类型

这是我的网格搜索代码

from sklearn.model_selection import GridSearchCV

                tuned_parameters = [{'kernel': ['rbf'], 'gamma': [1e-3, 1e-4],   
                     'C': [1, 10, 100, 1000]},
                    {'kernel': ['linear'], 'C': [1, 10, 100, 1000]}]

scores = ['precision', 'recall']

for score in scores: …
Run Code Online (Sandbox Code Playgroud)

python numpy scikit-learn hyperparameters gaussian-process

3
推荐指数
1
解决办法
6579
查看次数

查找C和gamma值以优化SVM

我在某些数据集中应用了SVM(scikit-learn),并希望找到可以为测试集提供最佳准确性的C和gamma值。

我首先将C固定为某个整数,然后遍历许多伽玛值,直到获得使该C达到最佳测试设置精度的伽玛为止。然后我修复了在上述步骤中获得的伽玛并遍历值的C并找到可以给我最好的精度的C,依此类推...

但是上述步骤永远无法给出产生最佳测试设置精度的伽玛和C的最佳组合。

谁能帮助我找到一种在sckit-learn中获得此组合(gamma,C)的方法?

python machine-learning svm scikit-learn hyperparameters

2
推荐指数
1
解决办法
4242
查看次数