Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Notitie
De opensource-versie van Hyperopt wordt niet meer onderhouden.
Hyperopt is niet opgenomen in Databricks Runtime voor Machine Learning na 16.4 LTS ML. Azure Databricks raadt aan gebruik te maken van Optuna- voor optimalisatie van één knooppunt of RayTune- voor een vergelijkbare ervaring als de afgeschafte hyperparameter-afstemmingsfunctionaliteit van Hyperopt. Meer informatie over het gebruik van RayTune- in Azure Databricks.
In dit voorbeeldnotebook ziet u hoe u hyperparameters van één machine kunt afstemmen op een Azure Databricks-cluster met behulp van Hyperopt met SparkTrials. Door een scikit-learn SVM-classificator af te stemmen op de Iris-gegevensset, bouwt u eerst een werkstroom met één machine fmin() en parallelliseert u deze over Spark-werkers, waarbij MLflow automatisch elke proefversie bijhoudt.
Vereiste pakketten importeren en gegevensset laden
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.svm import SVC
from hyperopt import fmin, tpe, hp, SparkTrials, STATUS_OK, Trials
# If you are running Databricks Runtime for Machine Learning, `mlflow` is already installed and you can skip the following line.
import mlflow
# Load the iris dataset from scikit-learn
iris = iris = load_iris()
X = iris.data
y = iris.target
Deel 1. Hyperopt-werkstroom met één machine
Dit zijn de stappen in een Hyperopt-werkstroom:
- Definieer een functie die u wilt minimaliseren.
- Definieer een zoekruimte boven hyperparameters.
- Selecteer een zoekalgoritmen.
- Voer het afstemmingsalgoritmen uit met Hyperopt
fmin().
Zie de Hyperopt-documentatie voor meer informatie.
Een functie definiëren die moet worden geminimaliseerd
In dit voorbeeld gebruiken we een classificatie voor ondersteuningsvectorcomputers. Het doel is om de beste waarde voor de regularisatieparameter Cte vinden.
De meeste code voor een Hyperopt-werkstroom bevindt zich in de doelfunctie. In dit voorbeeld wordt de support-vector classifier van scikit-learn gebruikt.
Als uw cluster Databricks Runtime 11.3 ML gebruikt, bewerkt u de support vectorclassificatie om een positioneel argument te gebruiken. clf = SVC(C)
def objective(C):
# Create a support vector classifier model
clf = SVC(C=C)
# Use the cross-validation accuracy to compare the models' performance
accuracy = cross_val_score(clf, X, y).mean()
# Hyperopt tries to minimize the objective function. A higher accuracy value means a better model, so you must return the negative accuracy.
return {'loss': -accuracy, 'status': STATUS_OK}
De zoekruimte over hyperparameters definiëren
Zie de Hyperopt-documenten voor meer informatie over het definiëren van een zoekruimte en parameterexpressies.
search_space = hp.lognormal('C', 0, 1.0)
Een zoekalgoritmen selecteren
De twee belangrijkste keuzes zijn:
-
hyperopt.tpe.suggest: Structuur van Parzen Estimators, een Bayesiaanse benadering die iteratief en adaptief nieuwe hyperparameterinstellingen selecteert om te verkennen op basis van eerdere resultaten -
hyperopt.rand.suggest: Willekeurig zoeken, een niet-adaptieve benadering die samplet over de zoekruimte.
algo=tpe.suggest
Het afstemmingsalgoritmen uitvoeren met Hyperopt fmin()
Stel max_evals in op het maximum aantal punten in de hyperparameterruimte dat moet worden getest, dat wil gezegd het maximum aantal modellen dat moet worden aangepast en geëvalueerd.
argmin = fmin(
fn=objective,
space=search_space,
algo=algo,
max_evals=16)
# Print the best value found for C
print("Best value found: ", argmin)
Deel 2. Gedistribueerd afstemmen met Apache Spark en MLflow
Als u afstemming wilt distribueren, voegt u nog een argument toe aan fmin(): een Trials-klasse genaamd SparkTrials.
SparkTrials neemt 2 optionele argumenten:
-
parallelism: Het aantal modellen dat gelijktijdig moet worden aangepast en geëvalueerd. De standaardwaarde is het aantal beschikbare Spark-taaksites. -
timeout: Maximale tijd (in seconden) datfmin()kan draaien. De standaardwaarde is geen maximale tijdslimiet.
In dit voorbeeld wordt de zeer eenvoudige objectieve functie gebruikt die is gedefinieerd in Cmd 7. In dit geval wordt de functie snel uitgevoerd en de overhead van het starten van de Spark-taken overheerst de berekeningstijd, zodat de berekeningen voor de gedistribueerde case meer tijd in beslag nemen. Voor typische problemen in de praktijk is de objectieve functie complexer en is het gebruik SparkTrails om de berekeningen te distribueren sneller dan het afstemmen van één machine.
Automatische MLflow-tracering is standaard ingeschakeld. Als u deze wilt gebruiken, roept u aan mlflow.start_run() voordat u belt fmin() , zoals wordt weergegeven in het voorbeeld.
from hyperopt import SparkTrials
# To display the API documentation for the SparkTrials class, uncomment the following line.
# help(SparkTrials)
spark_trials = SparkTrials()
with mlflow.start_run():
argmin = fmin(
fn=objective,
space=search_space,
algo=algo,
max_evals=16,
trials=spark_trials)
# Print the best value found for C
print("Best value found: ", argmin)
Als u het MLflow-experiment wilt weergeven dat is gekoppeld aan het notebook, klikt u op het pictogram Experiment in de contextbalk van het notitieblok in de rechterbovenhoek. Daar kunt u alle uitvoeringen bekijken. Als u uitvoeringen in de MLflow-gebruikersinterface wilt weergeven, klikt u uiterst rechts naast Experimentuitvoeringen op het pictogram.
Het effect van afstemming Conderzoeken:
- Selecteer de resulterende uitvoeringen en klik op Vergelijken.
- Selecteer in het spreidingsplot C voor X-as en verlies voor Y-as.
Nadat u de acties in de laatste cel in het notebook hebt uitgevoerd, moet de MLflow-gebruikersinterface worden weergegeven: