TensorFlow Karar Ormanları ( TF-DF ), TensorFlow'da bulunan Karar Ormanı ( DF ) algoritmalarının bir koleksiyonudur. Karar Ormanları Sinir Ağlarından ( NN ) farklı çalışır: DF'ler genellikle geri yayılımla veya mini gruplar halinde eğitilmez. Bu nedenle TF-DF boru hatlarının diğer TensorFlow boru hatlarından birkaç farklılığı vardır.
Bu belge, bu farklılıkların bir listesi ve TF işlem hatlarını TF-DF kullanacak şekilde güncellemeye yönelik bir kılavuzdur
Bu belge başlangıç düzeyindeki ortak çalışmayla ilgili bilgi sahibi olduğunuzu varsayar.
Veri Kümesi ve Özellikler
Doğrulama veri kümesi
Standart Sinir Ağı eğitim paradigmasının aksine, TF-DF modelleri aşırı uyumu izlemek veya eğitimi erken durdurmak için bir doğrulama veri kümesine ihtiyaç duymaz. Zaten bir eğitim/doğrulama/test bölmeniz varsa ve doğrulamayı bu nedenlerden biri için kullanıyorsanız, TF-DF'nizi eğitim+doğrulama konusunda eğitmek güvenlidir (doğrulama bölmesi aynı zamanda başka bir şey için kullanılmadığı sürece, örneğin: hiperparametre ayarı).
- model.fit(train_ds, validation_data=val_ds)
+ model.fit(train_ds.concatenate(val_ds))
# Or just don't create a validation dataset
Gerekçe: TF-DF çerçevesi birden fazla algoritmadan oluşur. Bazıları bir doğrulama veri seti kullanmaz (örn. Rastgele Orman), bazıları ise kullanır (örn. Gradient Boosted Trees). Bunu yapan algoritmalar, farklı tür ve boyuttaki doğrulama veri kümelerinden yararlanabilir. Bu nedenle, bir doğrulama veri kümesine ihtiyaç duyulursa, eğitim veri kümesinden otomatik olarak çıkarılacaktır.
Veri kümesi G/Ç
Tam olarak 1 dönem boyunca antrenman yapın
# Number of epochs in Keras
- model.fit(train_ds, num_epochs=5)
# Number of epochs in the dataset
- train_ds = train_ds.repeat(5)
- model.fit(train_ds)
+ model.fit(train_ds)
Gerekçe: Sinir ağlarının kullanıcıları, SGD'nin doğası gereği genellikle N adımlı bir modeli eğitir (bu, veri kümesi üzerinde > 1 kez döngü yapılmasını içerebilir). TF-DF, tüm veri setini okuyarak ve ardından eğitimi sonunda çalıştırarak eğitim verir. Veri kümesinin tamamını okumak için 1 dönem gereklidir ve herhangi bir ekstra adım, gereksiz veri giriş/çıkışlarının yanı sıra daha yavaş eğitimle sonuçlanacaktır.
Veri kümesini karıştırmayın
Veri kümelerinin karıştırılmasına gerek yoktur (input_fn veri kümesinin yalnızca bir örneğini okumadığı sürece).
- train_ds = train_ds.shuffle(5)
- model.fit(train_ds)
+ model.fit(train_ds)
Gerekçe: TF-DF, tüm veri kümesini belleğe okuduktan sonra verilere erişimi dahili olarak karıştırır. TF-DF algoritmaları deterministiktir (eğer kullanıcı rastgele tohumu değiştirmezse). Karıştırmayı etkinleştirmek yalnızca algoritmayı deterministik olmaktan çıkaracaktır. Giriş veri kümesi sıralanmışsa ve input_fn yalnızca bir örneğini okuyacaksa karıştırma anlamlıdır (örnek rastgele olmalıdır). Ancak bu, eğitim prosedürünü deterministik olmayan hale getirecektir.
Toplu iş boyutunu ayarlamayın
Parti boyutu model kalitesini etkilemez
- train_ds = train_ds.batch(hyper_parameter_batch_size())
- model.fit(train_ds)
# The batch size does not matter.
+ train_ds = train_ds.batch(64)
+ model.fit(train_ds)
Gerekçe: TF-DF, okunduktan sonra her zaman tam veri kümesi üzerinde eğitildiğinden, model kalitesi toplu iş boyutuna göre değişmeyecektir (öğrenme hızı gibi parametrelerin ortak olarak ayarlanması gereken SGD gibi mini toplu eğitim algoritmalarının aksine). Bu nedenle hiperparametre taramalarından çıkarılmalıdır. Toplu iş boyutunun yalnızca veri kümesi G/Ç hızı üzerinde etkisi olacaktır.
Büyük Veri Kümeleri
Büyük bir veri kümesinin mini kümeleri üzerinde sonsuz sayıda döngü yapabilen sinir ağlarının aksine, karar ormanları, eğitim prosedürleri için belleğe uyan sonlu bir veri kümesine ihtiyaç duyar. Veri kümesinin boyutunun performans ve bellek etkileri vardır.
Veri kümesinin boyutunu artırmanın getirileri azalıyor ve DF algoritmalarının yakınsama için büyük YSA modellerine göre muhtemelen daha az örneğe ihtiyacı var. Eğitim adımlarının sayısını (NN'de olduğu gibi) ölçeklendirmek yerine, bilgi işlem ödünleşiminin nerede anlamlı olduğunu görmek için veri miktarını ölçeklendirmeyi deneyebilirsiniz. Bu nedenle, öncelikle veri kümesinin (küçük) bir alt kümesi üzerinde eğitim almayı denemek iyi bir fikirdir.
Alternatif çözüm dağıtılmış eğitim kullanmaktır. Dağıtılmış eğitim, birden fazla makinenin mevcut olması durumunda veri kümesinin boyutunu artırmanın harika bir yoludur. Tüm dağıtılmış algoritmalar hesaplamayı dağıtmak için mevcut olsa da bunların hepsi RAM kullanımını dağıtamaz. Daha fazla ayrıntı için belgelere bakın.
Kaç tane örnek kullanılacak
Modelin eğitim aldığı makinedeki belleğe sığmalıdır :
Bunun diskteki örneklerin boyutuyla aynı olmadığını unutmayın.
Genel bir kural olarak, bir sayısal veya kategorik değer 4 baytlık bellek kullanır. Yani 100 özellik ve 25 milyon örnek içeren bir veri seti ~10GB (= 100 * 25 *10^6 * 4 bayt) bellek alacaktır.
Kategorik olarak ayarlanmış özellikler (örneğin simgeleştirilmiş metin) daha fazla bellek gerektirir (belirteç başına 4 bayt + özellik başına 12 bayt).
Eğitim süresi bütçenizi göz önünde bulundurun
Daha küçük veri kümeleri (örn. <100k örnekler) için genellikle NN'den daha hızlı olmasına rağmen, DF eğitim algoritmaları veri kümesi boyutuyla doğrusal olarak ölçeklenmez; bunun yerine, ~O(features x num_examples x log(num_examples)) çoğu durumda.
Eğitim süresi hiper parametrelere bağlıdır. En etkili parametreler şunlardır: (1) ağaç sayısı (
num_trees
), (2) örnek örnekleme oranı (GBT içinsubsample
) ve (3) özellik örnekleme oranı (num_candidate_attributes_ratio
)Kategorik olarak ayarlanmış özellikler diğer özelliklere göre daha pahalıdır. Maliyet,
categorical_set_split_greedy_sampling
parametresi tarafından kontrol edilir.Seyrek Eğik özellikler (varsayılan olarak devre dışıdır) iyi sonuçlar verir ancak hesaplanması pahalıdır.
Verilerin ölçeğini büyütmek için temel kurallar
Çoğu durumda bir TF-DF modelini saniyeler veya birkaç dakika içinde eğitmenize izin verecek küçük bir veri dilimi (<10 bin örnek) ile başlamanızı öneririz. Daha sonra, doğrulama seti performansı iyileşmediğinde veya veri seti artık belleğe sığmadığında durarak verileri sabit bir oranda (örneğin her seferinde %40 daha fazla) artırabilirsiniz.
Özellik Normalleştirme / Ön İşleme
Verileri özellik sütunlarıyla dönüştürmeyin
TF-DF modelleri, özellik semantiğinin ve dönüşümlerinin açıkça sağlanmasını gerektirmez. Varsayılan olarak veri kümesindeki tüm özellikler (etiket dışında) model tarafından algılanacak ve kullanılacaktır. Özellik semantiği otomatik olarak algılanacak ve gerekirse manuel olarak geçersiz kılınabilecektir.
# Estimator code
- feature_columns = [
- tf.feature_column.numeric_column(feature_1),
- tf.feature_column.categorical_column_with_vocabulary_list(feature_2, ['First', 'Second', 'Third'])
- ]
- model = tf.estimator.LinearClassifier(feature_columns=feature_columnes)
# Use all the available features. Detect the type automatically.
+ model = tfdf.keras.GradientBoostedTreesModel()
Ayrıca giriş özelliklerinin bir alt kümesini de belirtebilirsiniz:
+ features = [
+ tfdf.keras.FeatureUsage(name="feature_1"),
+ tfdf.keras.FeatureUsage(name="feature_2")
+ ]
+ model = tfdf.keras.GradientBoostedTreesModel(features=features, exclude_non_specified_features=True)
Gerekirse bir özelliğin anlamını zorlayabilirsiniz.
+ forced_features = [
+ tfdf.keras.FeatureUsage(name="feature_1", semantic=tfdf.keras.FeatureSemantic.CATEGORICAL),
+ ]
+ model = tfdf.keras.GradientBoostedTreesModel(features=features)
Gerekçe: Bazı modeller (Sinir Ağları gibi) standartlaştırılmış bir giriş katmanı gerektirirken (örneğin, farklı özellik türlerinden eşlemeler → yerleştirmeler), TF-DF modelleri kategorik ve sayısal özellikleri yerel olarak kullanabilir ve özelliklerin anlamsal türlerini otomatik olarak algılayabilir. verilere dayanmaktadır.
Özellikleri önceden işlemeyin
Karar ağacı algoritmaları, Sinir Ağları için kullanılan bazı klasik özellik ön işlemelerinden faydalanmaz. Aşağıda, daha yaygın olan özellik işleme stratejilerinden bazıları açıkça listelenmiştir, ancak güvenli bir başlangıç noktası, sinir ağı eğitimine yardımcı olmak için tasarlanmış tüm ön işlemleri kaldırmaktır.
Sayısal özellikleri normalleştirmeyin
- def zscore(value):
- return (value-mean) / sd
- feature_columns = [tf.feature_column.numeric_column("feature_1",normalizer_fn=zscore)]
Rasyonel: Karar ormanı algoritmaları, bölme algoritmaları girdide herhangi bir sayısal dönüşüm yapmadığından, doğal olarak normalleştirilmemiş sayısal özellikleri destekler. Bazı normalleştirme türleri (örneğin zscore normalleştirmesi) eğitim prosedürünün sayısal istikrarına yardımcı olmaz ve bazıları (örneğin aykırı değerlerin kırpılması) son modelin ifade edilebilirliğine zarar verebilir.
Kategorik özellikleri kodlamayın (örn. karma, tek sıcak veya gömme)
- integerized_column = tf.feature_column.categorical_column_with_hash_bucket("feature_1",hash_bucket_size=100)
- feature_columns = [tf.feature_column.indicator_column(integerized_column)]
- integerized_column = tf.feature_column.categorical_column_with_vocabulary_list('feature_1', ['bob', 'george', 'wanda'])
- feature_columns = [tf.feature_column.indicator_column(integerized_column)]
Gerekçe: TF-DF, kategorik özellikler için yerel desteğe sahiptir ve "dönüştürülmüş" bir kelime dağarcığını kendi dahili sözlüğündeki (model hiperparametreleri aracılığıyla yapılandırılabilen) başka bir öğe olarak ele alacaktır. Bazı dönüşümler (hashing gibi) kayıplı olabilir. Karar Ormanı modelleri türevlendirilemediği için yerleştirmeler önceden eğitilmediği sürece desteklenmez (bkz. ara kolab ). Alana özgü sözcük dağarcığı stratejilerinin (örn. engellenen sözcüklerin kaldırılması, metin normalleştirme) yine de yararlı olabileceğini unutmayın.
Metin özellikleri nasıl kullanılır?
TF-DF , kategorik ayarlı özellikleri yerel olarak destekler. Bu nedenle, tokenize edilmiş n-gram torbalar yerel olarak tüketilebilir.
Alternatif olarak metin, önceden eğitilmiş bir yerleştirme yoluyla da tüketilebilir.
Kategorik kümeler küçük veri kümelerinde örnekleme açısından verimlidir ancak büyük veri kümelerinde eğitilmesi pahalıdır. Kategorik kümeleri ve önceden eğitilmiş yerleştirmeyi birleştirmek, genellikle her ikisinin de tek başına kullanılmasından daha iyi sonuçlar verebilir.
Eksik özellikleri sihirli değerlerle değiştirmeyin
Gerekçe: TF-DF'nin eksik değerler için yerel desteği vardır. Girişte NaN'ler varsa NaN'leri gradyanlara yayabilen sinir ağlarından farklı olarak, TF-DF, algoritmanın eksik değer ile nöbetçi değer arasındaki farkı görmesi durumunda en iyi şekilde eğitim alacaktır.
- feature_columns = [
- tf.feature_column.numeric_column("feature_1", default_value=0),
- tf.feature_column.numeric_column("feature_1_is_missing"),
- ]
Görüntüleri ve Zaman Serilerini İşleme
Karar Ormanlarında görüntü veya zaman serisi özelliklerini tüketmek için standart bir algoritma yoktur, bu nedenle bunları kullanmak için ekstra çalışma yapılması gerekir.
Gerekçe: Evrişim, LSTM, dikkat ve diğer sıra işleme algoritmaları sinir ağına özgü mimarilerdir.
Bu özellikleri aşağıdaki stratejileri kullanarak ele almak mümkündür:
Özellik Mühendisliği
Görseller: Rastgele Orman ile görsel kullanmak bir noktada popülerdi (örn.
Microsoft Kinect , ancak bugün sinir ağları son teknolojidir.
Zaman serileri: [ Hareketli istatistikler ] nispeten az örneği olan zaman serisi verileri için şaşırtıcı derecede iyi çalışabilir (örn. tıbbi alanda yaşamsal belirtiler).
Gömme modülleri: Sinir ağı yerleştirme modülleri, bir karar ormanı algoritması için zengin özellikler sağlayabilir. Ara ortak çalışma, bir tf-hub yerleştirmesi ile bir TF-DF modelinin nasıl birleştirileceğini gösterir.
Eğitim Hattı
GPU, TPU gibi donanım hızlandırıcıları kullanmayın
TF-DF eğitimi donanım hızlandırıcılarını (henüz) desteklememektedir. Tüm eğitim ve çıkarımlar CPU üzerinde yapılır (bazen SIMD kullanılarak).
CPU üzerindeki TF-DF çıkarımının (özellikle Yggdrasil C++ kitaplıkları kullanılarak sunulduğunda) şaşırtıcı derecede hızlı olabileceğini unutmayın (örneğin, işlemci çekirdeği başına mikrosaniyenin altında).
Kontrol noktası oluşturma veya eğitim ortasında kancalar kullanmayın
TF-DF (şu anda) model kontrol noktasını desteklememektedir; bu, modelin eğitim tamamlanmadan önce kullanılabilir olmasını bekleyen kancaların büyük ölçüde desteklenmediği anlamına gelir. Model yalnızca istenen sayıda ağacı eğittikten (veya erken durduktan) sonra kullanılabilir olacaktır.
Eğitim adımına dayanan Keras kancaları da çalışmayacaktır; TF-DF eğitiminin doğası gereği, model ilk dönemin sonunda eğitilir ve bu dönemden sonra da sabit kalacaktır. Adım yalnızca veri kümesi G/Ç'sine karşılık gelir.
Model Determinizmi
TF-DF eğitim algoritması deterministiktir, yani aynı veri seti üzerinde iki kez eğitim tam olarak aynı modeli verecektir. Bu, TensorFlow ile eğitilmiş sinir ağlarından farklıdır. Bu determinizmi korumak için kullanıcılar, veri kümesi okumalarının da deterministik olmasını sağlamalıdır.
Eğitim Yapılandırması
Kayıp yerine bir görev belirtin (örneğin sınıflandırma, sıralama) (örneğin ikili çapraz entropi)
- model = tf_keras.Sequential()
- model.add(Dense(64, activation=relu))
- model.add(Dense(1)) # One output for binary classification
- model.compile(loss=tf_keras.losses.BinaryCrossentropy(from_logits=True),
- optimizer='adam',
- metrics=['accuracy'])
# The loss is automatically determined from the task.
+ model = tfdf.keras.GradientBoostedTreesModel(task=tf_keras.Task.CLASSIFICATION)
# Optional if you want to report the accuracy.
+ model.compile(metrics=['accuracy'])
Gerekçe: Tüm TF-DF öğrenme algoritmaları kayıp kullanmaz. Bunu yapanlar için, kayıp görevden otomatik olarak algılanır ve model özetinde yazdırılır. Ayrıca bunu kayıp hiper parametresiyle de geçersiz kılabilirsiniz.
Hiper parametreler anlamsal olarak kararlıdır
Tüm hiper parametrelerin varsayılan değerleri vardır. Bu değerler denenecek ilk adaylar için makul değerlerdir. Varsayılan hiper parametre değerlerinin hiçbir zaman değişmemesi garanti edilir. Bu nedenle yeni hiper parametreler veya algoritma iyileştirmeleri varsayılan olarak devre dışıdır.
En son algoritmaları kullanmak isteyen ancak hiper parametreleri kendileri optimize etmek istemeyen kullanıcılar, TF-DF tarafından sağlanan "hiper parametre şablonlarını" kullanabilirler. Paketteki güncellemelerle birlikte yeni hiperparametre şablonları yayınlanacak.
# Model with default hyper-parameters.
model = tfdf.keras.GradientBoostedTreesModel()
# List the hyper-parameters (with default value) and hyper-parameters templates of the GBT learning algorithm (in colab)
?tfdf.keras.GradientBoostedTreesModel
# Use a hyper-parameter template.
model = tfdf.keras.GradientBoostedTreesModel(hp_template="winner_1")
# Change one of the hyper-parameters.
model = tfdf.keras.GradientBoostedTreesModel(num_trees=500)
# List all the learning algorithms available
tfdf.keras.get_all_models()
Modelde hata ayıklama
Bu bölümde modele bakmanız/hatalarını ayıklamanız/yorumlamanız için bazı yollar sunulmaktadır. Başlangıç düzeyindeki ortak çalışma, uçtan uca bir örnek içerir.
Basit model özeti
# Text description of the model, training logs, feature importances, etc.
model.summary()
Eğitim Günlükleri ve Tensorboard
# List of metrics
logs = model.make_inspector().training_logs()
print(logs)
Veya TensorBoard'u kullanarak:
% load_ext
tensorboard
model.make_inspector().export_to_tensorboard("/tmp/tensorboard_logs")
% tensorboard - -logdir
"/tmp/tensorboard_logs"
Özellik önemi
model.make_inspector().variable_importances()
Ağaçların planlanması
tfdf.model_plotter.plot_model_in_colab(model, tree_idx=0)
Ağaç yapısına erişme
tree = model.make_inspector().extract_tree(tree_idx=0)
print(tree)
( Gelişmiş ortak çalışmaya bakın)
TensorFlow dağıtım stratejilerini kullanmayın
TF-DF henüz TF dağıtım stratejilerini desteklememektedir. Çok çalışanlı kurulumlar göz ardı edilecek ve eğitim yalnızca yönetici üzerinde gerçekleştirilecektir.
- with tf.distribute.MirroredStrategy():
- model = ...
+ model = ....
İstifleme Modelleri
TF-DF modelleri degradeleri geri yaymaz. Sonuç olarak, YSA'lar önceden eğitilmedikçe YSA modelleri ile oluşturulamazlar.
tf.estimator.BoostedTrees {Classifier/Regressor/Estimator}'dan geçiş yapılıyor
Benzer gibi görünse de, TF-DF ve Tahminci destekli ağaçlar farklı algoritmalardır. TF-DF, klasik Rastgele Orman ve Gradient Boosted Machine (Ağaçlar kullanılarak) kağıtlarını uygular. tf.estimator.BoostedTreesEstimator, bu makalede açıklanan mini toplu eğitim prosedürüne sahip yaklaşık bir Gradient Boosted Trees algoritmasıdır.
Bazı hiper parametreler benzer anlamlara sahiptir (örn. sayı_ağaçları), ancak farklı kalite çıkarımlarına sahiptirler. Hiperparametreleri tf.estimator.BoostedTreesEstimator'ınızda ayarladıysanız, en iyi sonuçları elde etmek için TF-DF içindeki hiperparametrelerinizi yeniden ayarlamanız gerekecektir.
Yggdrasil kullanıcıları için
Yggdrasil Karar Ormanı, TF-DF tarafından kullanılan temel eğitim ve çıkarım kütüphanesidir. Eğitim yapılandırması ve modelleri çapraz uyumludur (yani TF-DF ile eğitilen modeller Yggdrasil çıkarımıyla kullanılabilir).
Ancak Yggdrasil algoritmalarından bazıları (henüz) TF-DF'de mevcut değildir.
- Parçalı örneklemeyle Gradyanla Güçlendirilmiş Ağaç.