Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kommentar
Versionen med öppen källkod av Hyperopt underhålls inte längre.
Hyperopt ingår inte i Databricks Runtime for strojové učenie efter 16,4 LTS ML. Azure Databricks rekommenderar att du använder antingen Optuna- för ennodsoptimering eller RayTune för en liknande upplevelse som de inaktuella hyperopt-distribuerade hyperparameterjusteringsfunktionerna. Läs mer om hur du använder RayTune i Azure Databricks.
I det här exemplet visar notebook-filen hur man skalar enkelmaskin hyperparameterjustering till ett Azure Databricks-kluster med hjälp av Hyperopt med SparkTrials. När du finjusterar en scikit-learn SVM-klassificerare på Iris-datauppsättningen skapar du först ett arbetsflöde med en enkeldator fmin() och parallelliserar det sedan över Spark-arbetare med MLflow som automatiskt spårar varje testkörning.
Importera nödvändiga paket och läs in datamängden
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
Del 1. Hyperopt-arbetsflöde med en dator
Här följer stegen i ett Hyperopt-arbetsflöde:
- Definiera en funktion som ska minimeras.
- Definiera ett sökutrymme över hyperparametrar.
- Välj en sökalgoritm.
- Kör justeringsalgoritmen med Hyperopt
fmin().
Mer information finns i Hyperopt-dokumentationen.
Definiera en funktion för att minimera
I det här exemplet använder vi en maskinklassificerare för stödvektorer. Målet är att hitta det bästa värdet för regulariseringsparametern C.
Merparten av koden för ett Hyperopt-arbetsflöde finns i målfunktionen. I det här exemplet används stödvektorklassificeraren från scikit-learn.
Om klustret använder Databricks Runtime 11.3 ML redigerar du stödvektorklassificeraren för att ta ett positionellt argument, 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}
Definiera sökutrymmet över hyperparametrar
Mer information om hur du definierar ett sökutrymme och parameteruttryck finns i Hyperopt-dokumenten .
search_space = hp.lognormal('C', 0, 1.0)
Välj en sökalgoritm
De två viktigaste alternativen är:
-
hyperopt.tpe.suggest: Träd för Parzen-skattningar, en bayesisk metod som iterativt och anpassningsbart väljer nya inställningar för hyperparameter att utforska baserat på tidigare resultat -
hyperopt.rand.suggest: Slumpmässig sökning, en icke-adaptiv metod som tar prover inom sökutrymmet
algo=tpe.suggest
Kör justeringsalgoritmen med Hyperopt fmin()
Ange max_evals till det maximala antalet punkter i hyperparameterutrymmet som ska testas, dvs. det maximala antalet modeller som ska passas in och utvärderas.
argmin = fmin(
fn=objective,
space=search_space,
algo=algo,
max_evals=16)
# Print the best value found for C
print("Best value found: ", argmin)
Del 2. Distribuerad justering med Apache Spark och MLflow
Om du vill distribuera justering lägger du till ytterligare ett argument i fmin(): en Trials klass med namnet SparkTrials.
SparkTrials tar två valfria argument:
-
parallelism: Antal modeller som ska passas in och utvärderas samtidigt. Standardvärdet är antalet tillgängliga Spark-taskplatser. -
timeout: Maximal tid (i sekunder) somfmin()kan köras. Standardvärdet är ingen maximal tidsgräns.
I det här exemplet används den mycket enkla objektiva funktion som definierats i Cmd 7. I det här fallet körs funktionen snabbt och omkostnaderna för att starta Spark-jobben dominerar beräkningstiden, så beräkningarna för det distribuerade fallet tar längre tid. För vanliga verkliga problem är målfunktionen mer komplex, och att använda SparkTrails för att distribuera beräkningarna är snabbare än justering med en enda dator.
Automatisk MLflow-spårning är aktiverat som standard. För att använda det, anropa mlflow.start_run() innan du anropar fmin() enligt exemplet.
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)
Om du vill visa MLflow-experimentet som är associerat med notebook-filen klickar du på experimentikonen i notebook-kontextfältet längst upp till höger. Där kan du visa alla utföranden. Om du vill visa körningar i MLflow-användargränssnittet klickar du på ikonen längst till höger bredvid Experimentkörningar.
För att undersöka effekten av justering C:
- Välj de resulterande körningarna och klicka på Jämför.
- I punktdiagrammet väljer du C för X-axel och förlust för Y-axeln.
När du har utför åtgärderna i den sista cellen i notebook-filen ska ditt MLflow-användargränssnitt visa: