Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Azure Databricks'te scikit-learn kitaplığını kullanarak bir makine öğrenimi sınıflandırma modeli nasıl oluşturulacağı gösterilmektedir.
Amaç, bir şarabın "yüksek kaliteli" olarak kabul edilip edilmediğini tahmin etmek için bir sınıflandırma modeli oluşturmaktır. Veri kümesi, farklı şaraplardan (örneğin, alkol içeriği, asitlik ve artık şeker) 11 özellik ve 1 ile 10 arasında bir kalite derecelendirmesi içerir.
Bu örnekte ayrıca model geliştirme sürecini izlemek için MLflow ve hiper parametre ayarlamayı otomatikleştirmek için Hyperopt kullanımı gösterilmektedir.
Veri kümesi UCI Machine Learning Deposu'na ait olup, fizikokimyasal özelliklerden veri madenciliği tarafından şarap tercihlerini modelleme bölümünde sunulmuştur [Cortez ve diğerleri, 2009].
Başlamadan önce
- Unity Kataloğu için çalışma alanınızın etkinleştirilmesi gerekir. Bkz. Unity Kataloğu'nu kullanmaya başlama.
- Machine Learning için Databricks Runtime kullanan bir işlem kaynağı oluşturma veya işlem kaynağına erişim iznine sahip olmanız gerekir.
- Katalog üzerinde USE CATALOG ayrıcalığına sahip olmalısınız.
- Bu katalogda, şemada aşağıdaki ayrıcalıklara sahip olmanız gerekir: USE SCHEMA, CREATE TABLEve CREATE MODEL.
İpucu
Bu makaledeki tüm kodlar, doğrudan çalışma alanınıza aktarabileceğiniz bir not defterinde kullanılabilir. Bkz . Örnek not defteri: Sınıflandırma modeli oluşturma.
1. Adım: Databricks not defteri oluşturma
Çalışma alanınızda not defteri oluşturmak için kenar
çubuğunda Yeni'ye ve ardından Not Defteri'ne tıklayın. Çalışma alanında boş bir not defteri açılır.
Not defterlerini oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Not defterlerini yönetme.
2. Adım: İşlem kaynaklarına bağlanma
Keşif veri analizi ve veri mühendisliği yapmak için bilişim kaynaklarına erişiminiz olmalıdır. Bu makaledeki adımlar, Machine Learning için Databricks Runtime gerektirir. Databricks Runtime'ın ML sürümünü seçme hakkında daha fazla bilgi ve yönergeler için bkz . Machine Learning için Databricks Runtime.
Not defterinizde sağ üstteki Bağlan açılan menüsüne tıklayın. Machine Learning için Databricks Runtime kullanan mevcut bir kaynağa erişiminiz varsa menüden bu kaynağı seçin. Aksi takdirde, yeni bir işlem kaynağı yapılandırmak için Yeni kaynak oluştur... öğesine tıklayın.
3. Adım: Model kayıt defteri, katalog ve şemayı ayarlama
Başlamadan önce iki önemli adım gereklidir. İlk olarak, MLflow istemcisini model kayıt defteri olarak Unity Kataloğu'nu kullanacak şekilde yapılandırmanız gerekir. Not defterinizdeki yeni bir hücreye aşağıdaki kodu girin.
import mlflow
mlflow.set_registry_uri("databricks-uc")
Modelin kaydedileceği kataloğu ve şemayı da ayarlamanız gerekir. Katalog üzerinde USE CATALOG ayrıcalığına ve şema üzerinde USE SCHEMA, CREATE TABLE ve CREATE MODEL ayrıcalıklarına sahip olmanız gerekir.
Unity Kataloğu'nu kullanma hakkında daha fazla bilgi için bkz. Unity Kataloğu nedir?.
Not defterinizdeki yeni bir hücreye aşağıdaki kodu girin.
# If necessary, replace "main" and "default" with a catalog and schema for which you have the required permissions.
CATALOG_NAME = "main"
SCHEMA_NAME = "default"
4. Adım: Verileri yükleme ve Unity Kataloğu tabloları oluşturma
Bu örnekte, databricks-datasets konumunda bulunan ve kullanılabilir olan iki CSV dosyası kullanılır. Kendi verilerinizi nasıl yükleyeceğinizi öğrenmek için bkz. Lakeflow Connect'te Standart Bağlayıcılar.
Not defterinizdeki yeni bir hücreye aşağıdaki kodu girin. Bu kod aşağıdakileri yapar:
-
winequality-white.csvvewinequality-red.csv'den Spark DataFrame'lere veri okuma. - Sütun adlarındaki boşlukları alt çizgilerle değiştirerek verileri temizleyin.
- Unity Kataloğu'nda DataFrame'leri
white_winevered_winetablolarına yazın. Verileri Unity Kataloğu'na kaydetmek hem verileri kalıcı hale getirmekte hem de başkalarıyla nasıl paylaşabileceğinizi denetlemenize olanak tanır.
white_wine = spark.read.csv("/databricks-datasets/wine-quality/winequality-white.csv", sep=';', header=True)
red_wine = spark.read.csv("/databricks-datasets/wine-quality/winequality-red.csv", sep=';', header=True)
# Remove the spaces from the column names
for c in white_wine.columns:
white_wine = white_wine.withColumnRenamed(c, c.replace(" ", "_"))
for c in red_wine.columns:
red_wine = red_wine.withColumnRenamed(c, c.replace(" ", "_"))
# Define table names
red_wine_table = f"{CATALOG_NAME}.{SCHEMA_NAME}.red_wine"
white_wine_table = f"{CATALOG_NAME}.{SCHEMA_NAME}.white_wine"
# Write to tables in Unity Catalog
spark.sql(f"DROP TABLE IF EXISTS {red_wine_table}")
spark.sql(f"DROP TABLE IF EXISTS {white_wine_table}")
white_wine.write.saveAsTable(f"{CATALOG_NAME}.{SCHEMA_NAME}.white_wine")
red_wine.write.saveAsTable(f"{CATALOG_NAME}.{SCHEMA_NAME}.red_wine")
Adım 5. Verileri ön işleme ve bölme
Bu adımda, 4. Adımda oluşturduğunuz Unity Kataloğu tablolarındaki verileri Pandas DataFrames'e yükler ve verileri önceden işlersiniz. Bu bölümdeki kod aşağıdakileri yapar:
- Verileri Pandas DataFrames olarak yükler.
- Kırmızı ve beyaz şarapları ayırt etmek için her DataFrame'e bir Boole sütunu ekler ve ardından DataFrame'leri
data_dfyeni bir DataFrame'de birleştirir. - Veri kümesinde 1 ile 10 arasında şarapları sıralayan ve en yüksek kaliteyi gösteren 10 olan bir
qualitysütunu bulunur. Kod, bu sütunu iki sınıflandırma değerine dönüştürür: yüksek kaliteli şarap (quality>= 7) belirtmek için "True" ve yüksek kaliteli olmayan bir şarabı belirtmek için "Yanlış" (quality< 7). - DataFrame'i ayrı eğitim ve test veri kümelerine böler.
İlk olarak, gerekli kitaplıkları içeri aktarın:
import numpy as np
import pandas as pd
import sklearn.datasets
import sklearn.metrics
import sklearn.model_selection
import sklearn.ensemble
import matplotlib.pyplot as plt
from hyperopt import fmin, tpe, hp, SparkTrials, Trials, STATUS_OK
from hyperopt.pyll import scope
Şimdi verileri yükleyin ve önişle:
# Load data from Unity Catalog as Pandas dataframes
white_wine = spark.read.table(f"{CATALOG_NAME}.{SCHEMA_NAME}.white_wine").toPandas()
red_wine = spark.read.table(f"{CATALOG_NAME}.{SCHEMA_NAME}.red_wine").toPandas()
# Add Boolean fields for red and white wine
white_wine['is_red'] = 0.0
red_wine['is_red'] = 1.0
data_df = pd.concat([white_wine, red_wine], axis=0)
# Define classification labels based on the wine quality
data_labels = data_df['quality'].astype('int') >= 7
data_df = data_df.drop(['quality'], axis=1)
# Split 80/20 train-test
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(
data_df,
data_labels,
test_size=0.2,
random_state=1
)
6. Adım. Sınıflandırma modelini eğitin
Bu adım, varsayılan algoritma ayarlarını kullanarak gradyan yükseltme sınıflandırıcısını eğitir. Ardından elde edilen modeli test veri kümesine uygular ve modelin performansını değerlendirmek için alıcı çalışma eğrisinin altındaki alanı hesaplar, günlüğe kaydeder ve görüntüler.
İlk olarak, MLflow otomatik kaydetmeyi etkinleştirin:
mlflow.autolog()
Şimdi model eğitim çalıştırmasını başlatın:
with mlflow.start_run(run_name='gradient_boost') as run:
model = sklearn.ensemble.GradientBoostingClassifier(random_state=0)
# Models, parameters, and training metrics are tracked automatically
model.fit(X_train, y_train)
predicted_probs = model.predict_proba(X_test)
roc_auc = sklearn.metrics.roc_auc_score(y_test, predicted_probs[:,1])
roc_curve = sklearn.metrics.RocCurveDisplay.from_estimator(model, X_test, y_test)
# Save the ROC curve plot to a file
roc_curve.figure_.savefig("roc_curve.png")
# The AUC score on test data is not automatically logged, so log it manually
mlflow.log_metric("test_auc", roc_auc)
# Log the ROC curve image file as an artifact
mlflow.log_artifact("roc_curve.png")
print("Test AUC of: {}".format(roc_auc))
Hücre sonuçları, eğrinin altındaki hesaplanan alanı ve ROC eğrisinin çizimini gösterir:
7. Adım. MLflow'da deneme çalıştırmalarını görüntüleme
MLflow denemesi izleme, modelleri yinelemeli olarak geliştirirken kod ve sonuçları günlüğe yazarak model geliştirmeyi izlemenize yardımcı olur.
Az önce yürüttüğüniz eğitim çalıştırmasından günlüğe kaydedilen sonuçları görüntülemek için, aşağıdaki görüntüde gösterildiği gibi hücre çıkışındaki bağlantıya tıklayın.
Deneme sayfası, çalıştırmaları karşılaştırmanıza ve belirli çalıştırmaların ayrıntılarını görüntülemenize olanak tanır. Çalıştırmanın parametre ve ölçüm değerleri gibi ayrıntılarını görmek için çalıştırmanın adına tıklayın. Bkz. MLflow denemesi izleme.
Not defterinizin sağ üst kısmındaki Deneme simgesine Deney
tıklayarak da not defterinizin deneme çalıştırmalarını görüntüleyebilirsiniz. Bu, çalıştırma parametreleri ve ölçümler de dahil olmak üzere not defteri deneyimiyle ilişkili her çalıştırmanın özetini gösteren deneme kenar çubuğunu açar. Gerekirse, en son çalıştırmaları getirmek ve izlemek için yenile simgesine tıklayın.
8. Adım: Hiperparametre ayarlaması için Hyperopt'u kullanın
ML modeli geliştirmenin önemli bir adımı, hiper parametreler olarak adlandırılan algoritmayı denetleen parametreleri ayarlayarak modelin doğruluğunu iyileştirmektir.
Databricks Runtime ML, hiper parametre ayarlamaya yönelik bir Python kitaplığı olan Hyperopt'ı içerir. Hyperopt kullanarak hiper parametre taramalarını çalıştırabilir ve birden çok modeli paralel olarak eğiterek model performansını iyileştirmek için gereken süreyi azaltabilirsiniz. MLflow izleme, modellerin ve parametrelerin otomatik olarak kayıtlarını tutmak için Hyperopt ile entegredir. Databricks'te Hyperopt kullanma hakkında daha fazla bilgi için bkz . Hiper parametre ayarlama.
Aşağıdaki kodda Hyperopt kullanma örneği gösterilmektedir.
# Define the search space to explore
search_space = {
'n_estimators': scope.int(hp.quniform('n_estimators', 20, 1000, 1)),
'learning_rate': hp.loguniform('learning_rate', -3, 0),
'max_depth': scope.int(hp.quniform('max_depth', 2, 5, 1)),
}
def train_model(params):
# Enable autologging on each worker
mlflow.autolog()
with mlflow.start_run(nested=True):
model_hp = sklearn.ensemble.GradientBoostingClassifier(
random_state=0,
**params
)
model_hp.fit(X_train, y_train)
predicted_probs = model_hp.predict_proba(X_test)
# Tune based on the test AUC
# In production, you could use a separate validation set instead
roc_auc = sklearn.metrics.roc_auc_score(y_test, predicted_probs[:,1])
mlflow.log_metric('test_auc', roc_auc)
# Set the loss to -1*auc_score so fmin maximizes the auc_score
return {'status': STATUS_OK, 'loss': -1*roc_auc}
# SparkTrials distributes the tuning using Spark workers
# Greater parallelism speeds processing, but each hyperparameter trial has less information from other trials
# On smaller clusters try setting parallelism=2
spark_trials = SparkTrials(
parallelism=1
)
with mlflow.start_run(run_name='gb_hyperopt') as run:
# Use hyperopt to find the parameters yielding the highest AUC
best_params = fmin(
fn=train_model,
space=search_space,
algo=tpe.suggest,
max_evals=32,
trials=spark_trials)
9. Adım: En iyi modeli bulun ve Unity Kataloğu'na kaydedin
Aşağıdaki kod, ROC eğrisinin altındaki alan tarafından ölçülen en iyi sonuçları üreten çalıştırmayı tanımlar:
# Sort runs by their test auc. In case of ties, use the most recent run.
best_run = mlflow.search_runs(
order_by=['metrics.test_auc DESC', 'start_time DESC'],
max_results=10,
).iloc[0]
print('Best Run')
print('AUC: {}'.format(best_run["metrics.test_auc"]))
print('Num Estimators: {}'.format(best_run["params.n_estimators"]))
print('Max Depth: {}'.format(best_run["params.max_depth"]))
print('Learning Rate: {}'.format(best_run["params.learning_rate"]))
En iyi model için tanımladığınız run_id kullanarak, aşağıdaki kod bu modeli Unity Kataloğu'na kaydeder.
model_uri = 'runs:/{run_id}/model'.format(
run_id=best_run.run_id
)
mlflow.register_model(model_uri, f"{CATALOG_NAME}.{SCHEMA_NAME}.wine_quality_model")
Adım 10. Modeli üretim ortamına dağıtma
Modellerinizi sunmak ve dağıtmak için hazır olduğunuzda, Azure Databricks çalışma alanınızda Sunma kullanıcı arabirimini kullanarak bunu yapabilirsiniz.
Örnek not defteri: Sınıflandırma modeli oluşturma
Bu makaledeki adımları gerçekleştirmek için aşağıdaki not defterini kullanın. Not defterini Azure Databricks çalışma alanına aktarma yönergeleri için bkz . Not defterini içeri aktarma.
Databricks ile ilk makine öğrenmesi modelinizi oluşturma
not defteri alma
Daha fazla bilgi edinin
Databricks, ham verilerden sunulan model için her isteği ve yanıtı kaydeden çıkarım tablolarına kadar ML geliştirme ve dağıtımının her adımına hizmet veren tek bir platform sağlar. Veri bilimciler, veri mühendisleri, ML mühendisleri ve DevOps, aynı araçlar kümesini ve veriler için tek bir doğru kaynağını kullanarak işlerini yapabilir.
Daha fazla bilgi edinmek için şunlara bakın:
- Makine öğrenmesi ve yapay zeka öğreticileri
- Databricks'te makine öğrenmesine ve yapay zekaya genel bakış
- Databricks'te makine öğrenmesi ve yapay zeka modellerini eğitenlere genel bakış
- ML modeli yaşam döngüsü için MLflow