Hyperparameterjustering i Python
Alex Scriven
Data Scientist
Liknar rutnätssökning:
MEN vi väljer istället ut rutnätsceller slumpmässigt.
Bengio & Bergstra (2012):
Den här artikeln visar empiriskt och teoretiskt att slumpmässigt valda försök är effektivare för hyperparameteroptimering än försök på ett rutnät.
Två huvudsakliga skäl:
En rutnätssökning:

Hur många modeller behöver vi köra för att ha 95% chans att få med en av de gröna rutorna?
Våra bästa modeller:

Om vi väljer hyperparameterkombinationer jämnt fördelade och slumpmässigt, låt oss se hur osannolikt det är att MISSA varje enskilt försök
Försök 1 = 0,05 chans att lyckas och (1 - 0,05) att missa
Med n försök har vi (1-0,05)^n chans att varje enskilt försök missar det önskade området.
Hur många försök krävs för en hög (95%) chans att hamna inom det området?
Vad innebär det här?
Kom ihåg:
Maximumet är fortfarande bara så bra som det rutnät du definierar!
För en rättvis jämförelse med rutnätssökning behöver du samma modelleringsbudget
Vi kan skapa ett eget slumpmässigt urval av hyperparameterkombinationer:
# Set some hyperparameter lists
learn_rate_list = np.linspace(0.001,2,150)
min_samples_leaf_list = list(range(1,51))
# Create list of combinations
from itertools import product
combinations_list = [list(x) for x in
product(learn_rate_list, min_samples_leaf_list)]
# Select 100 models from our larger set
random_combinations_index = np.random.choice(
range(0,len(combinations_list)), 100,
replace=False)
combinations_random_chosen = [combinations_list[x] for x in
random_combinations_index]
Vi kan också visualisera täckningen för den slumpmässiga sökningen genom att plotta hyperparametervalen på en X- och Y-axel.

Lägg märke till hur spridningen är bred men inte djup?
Hyperparameterjustering i Python