Yapay zeka kodlama asistanlarından rastgele bir orman modeli istediğinizde, size döndürdüğü dört satırlık kodun doğru çalıştığını görmek sizi rahatlatır: içe aktarmalar doğrudur, tahmin edici sorunu çözer ve gelen tahminler beklenen biçimde gelir. Oysa siz hiçbir şey belirtmediğiniz argümanlara baktığınızda, asistanın o dört satır kodun sizin istemiş olduğunuzdan çok daha fazla kararı zaten karıştırdığını görürsünüz. Bu metin, üretim ortamlarında ve meslektaşların projelerinde baş ağrısı yaratan, ancak koda düşen izi küçük olduğu için gözden kaçan beş yaygın varsayılanı inceliyor.
Bu argümanlar, kodun temiz çalıştığı ve çıktının tamamen makul göründüğü durumlarda fark edilmeden kabul edildiğinde sorunu başlatır. Kodlama asistanları bu atlamaları ileri taşımayı kolaylaştırır, çünkü tanıdık bir uygulama, arkasındaki varsayımlar üzerine konuşmadan önce bile bütünleşik biçimde elinize ulaşabilir. Asistan o varsayımları değerlendirmenize yardımcı olabilir, ancak “kodu yaz” talimatı, satır sıralaması, başlatma süreci veya ön işlemenin neyin hayatta kaldığı konularında bir görüşmeyi garanti etmez.
Varsayılanların Gücü: Belirtilmeyen Argümanlar Karar Verir
Kodlama asistanından rastgele bir orman modeli isteyip dört satırı incelediğinizde içe aktarmaların doğru, tahmin edicinin uyduğu ve tahminlerin beklenen biçimde geldiğini görürsünüz. Ancak kimse belirtmediği argümanlara baktığınızda, o dört satırın sizden istenenden çok daha fazlasını karıştırdığını fark edersiniz. Her ağacın kaç özelliği değerlendirmesi gerektiği? Model ne kadar düzenlemeli? Doğrulama katmanları verinizin yapısını nasıl yansıtmalı? İşte varsayılanlar şunu yapar: belirsiz bir isteği çalıştırılabilir programa dönüştürmek.
Dil modelleri kodu bir sonraki belirteci tahmin ederek öğrenir ve bu da tanıdık uygulamaları üretimin doğal başlangıç noktası kılar. Bir uygulama bir argümanı atladığında, kütüphane değeri kendisi sağlar; böylece istatistiksel bir seçim, asla sohbetin parçasına dönüşmeden örften sizin hattınıza geçer.
Bir asistan bu seçimi istediğinizde inceleyebilir, ancak çalışan kod almak onun incelenmiş olduğuna kanıt değildir. Bu ihmalın kolayca kaçırılması tam da hiçbir şeyin bozulmamasıdır.
Kaynak metni
Bu metinde geçen beş varsayılan, yazarın kendi üretim işi ve meslektaşlarının projelerinde baş ağrısı yaratan seçimlerdir. Her biri aynı soruyu sorar: Bu argümanı atlamak benim için neyi karıştırdı?
Rastgele Orman Regresyonunda Sessizce Kapanan Rastlantısallık
Rastgele ormanları “satırları örnekle, özellikleri altörnekle, ağaçları ortala” olarak öğrendiyseniz, regresyon modelinin sürprizi vardır: RandomForestClassifier max_features=”sqrt” kullanırken, RandomForestRegressor max_features=1.0 kullanarak her özelliği her bölünmede kullanılabilir kılar.
Bu fark, sıradan poşetleme (bagging) ile usual rastgele orman tarifini ayıran özellik altörnekleme işlevini kapatır. Örnekleme hâlâ mevcuttur, böylece ağaçlar aldıkları satırlar üzerinden rastlantılı kalmaya devam eder; ancak ikinci rastlantısallık katmanı—her bölünmede hangi özelliklerin değerlendirileceğini bilinçli olarak sınırlamak—kaldırılır.
Bunun neden önemli olduğunu düşünün: fiyat veya indirim gibi tek bir güçlü öngörücünün olduğu bir veri setini hayal edin. Her ağaç farklı bir örnekleme alır alsa da, fiyat erken bölünmeleri kazanmaya devam edebilir çünkü öngörü sinyali eğitim satırlarındaki değişimlerden sağ çıkar. Ağaçlar dolayısıyla benzer yapılar geliştirir ve eğitim verisindeki dalgalanmalara benzer şekilde tepki verir; böylece ortalamanın paylaşılan varyansı azaltma kapasitesi sınırlanır.
Özellik altörnekleme, baskın öngörücüyü zaman zaman değerlendirmeden çıkararak bu tekrarı bozar ve ağaçları alternatif bölünmeleri keşfetmeye zorlar. Bu konudaki matematik ve kontrollü bir deney, TDS makalesinde ayrıntılı biçimde ele alınmıştır; temel nokta daha fazla ağacın eklenmesinin, onların korelasyonundan kaynaklanan varyans bileşenini ortadan kaldıramayacağıdır.
Eğer rastgele ormanı kısmen özellik düzeyinde rastlantısallık için seçtiyseniz, neden o rastlantısallığı kapalı bırakıyoruz?
Kaynak metni
max_features=1.0 ile, tahmin edicinin adının zaten çalışıyor olabileceğini varsaymanıza rağmen o ek korelasyonazaltıcı mekanizmayı kullanmadan bırakırsınız. max_features=0.33 gibi bir değer örneğin her bölünmede özelliklerin yaklaşık üçte birini kullanılabilir kılar ve rastgele orman tarifinin bu bölümünü geri getirir.
Düzgelsel Regresyonda Ölçü Biriminin Belirsiz Rolü
Bir düzgelsel regresyon isteyince, gözlemlenen sonuçları en iyi açıklayan katsayıları bulacak bir model bekleyebilirsiniz. Oysa LogisticRegression() aslında L2 cezası içeren, büyük katsayıları caydıran ve bu czanın veriye uyuma ile ne kadar rekabet edeceğini belirleyen varsayılan C=1.0 ile düzenlenmiş bir sürüm uygular.
Düzgelselikleme çoğu zaman yararlıdır, özellikle gürültülü veride veya öngörücüler örtüştüğünde; ancak 1.0 sayısı probleminize dair özel bir bilgi taşımaz. Daha küçük C değerleri daha güçlü düzgelselikleme dayatırken, daha büyük değerler katsayılara daha fazla özgürlük tanır ve argümanı atlamak tek bir ayarı incelenmeden kabul etmek demektir.
Bundan başka, “katsayıların büyük” olması özelliğin nasıl ölçüldüğüne bağlıdır. Gelirin euro cinsinden kaydedildiğini ve katsayısının 0.0001 olduğunu varsayın. Aynı geliri binlerce euro cinsinden ifade ettiğinizde, aynı tahmin-düzgelselikleme katkısını korumak için katsayı 0.1 olmalıdır.
Bilgi değişmemiştir; ancak katsayı şimdi bin kez daha büyüktür ve katsayıları kareleyen L2 czasına katkıları milyon kez daha büyük olur. Modeli aynı C ile yeniden uydurduğunuzda, optimize edici yalnızca birimleri değiştirdiğiniz için farklı bir ödünleşimle karşılaşır.
Sürekli özellikleri bir Pipeline içinde standartlaştırırsanız, ön işleme her eğitim katmanında uydurulur ve C uygun doğrulamayla ayarlanır. Aksi halde euro ile binlerce euro arasındaki seçiminiz, her özelliğin ne kadar düzgelselikleme alacağını sessizce belirlemeye yardımcı olur.
Kaynak metni
Cross-Validation Katmanı: Kaç Kez Değerlendirileceği mi, Nasıl mı?
Bez katmanlı cross-validation (cross_val_score(model, X, y, cv=5)) kapsamlı ve güven verici bir denet gibi gelir: veri dördünde eğitir, beşinci üzerinde değerlendirir ve her gözlem bir kez elden geçirilene kadar tekrarlar. Ancak cv=5 yalnızca katman sayısını belirtirken, o katmanların nasıl oluşturulacağına dair başka bir kararı sessizce scikit-learn’e bırakır.
Regresyon için KFold ile shuffle=False kullanır; yani doğrulama katmanları var olan sıradaki ardışık satır bloklarıdır. Veri çerçeveniz tarih, müşteri veya bölgeye göre sıralıysa, o sıralama isteseniz de istemeseniz de değerlendirme tasarımınızın parçasına dönüşür.
Satışların 100 haftasını kronolojik olarak dizildiğini düşünün. İlk katman, weeks 21–100 üzerinde eğitildikten sonra weeks 1–20 üzerinde değerlendirilir; böylece model geleceği tahmin etmek için daha sonraki gözlemleri kullanır. Kod mükemmel çalışır, ancak deney yalnızca geçmişin mevcut olduğu durumlarda tahmin yapma (forecasting) biçimini yansıtmaz.
Sadece shuffle=True eklemek geçmişi ve geleceği eğitim ile doğrulama arasında karıştırır; bu yüzden doğru bölücü, “görülmemiş veri”nin sizin probleminiz için ne anlama geldiğine bağlıdır. Satır sıralamasının rastlantısal olduğu bağımsız gözlemler için shuffled KFold makul bir seçimdir; tahmin yapma için önceki gözlemlerde eğiten ve sonraki gözlemlerde değerlendiren zaman tabanlı bir şema kullanın; yeni müşteriler hakkındaki tahminler için her müşteriyi tamamen eğitim-doğrulama sınırının bir yanında tutan gruplu bir bölücü kullanın.

cv=5 geçerek modeli kaç kez değerlendireceğinizi seçtiniz, ancak o değerlendirmenin yapısını örtük bıraktınız. Asistan geçerli bir cross-validation çağrısı sağlayabilir; ancak modelin hangi durumlara genelleşebilmesi gerektiğini siz tanımlamanız gerekir.
Kaynak metni
Sıradan ikili veya çok sınıflı sınıflandırma için scikit-learn bunun yerine StratifiedKFold kullanır; sınıf oranlarını yaklaşık olarak korur, ancak yine varsayılan olarak shuffle yapmaz ve müşteri gruplarını ya da zamanı otomatik biçimde dikkate almaz.
KMeans Başlatmada Otomatiğin Anlaşılması Gereken Anlamı
“auto” sözcüğü, özellikle bir algoritmanın iyi bir çözüm bulmak için kaç kez deneme yapacağını kontrol eden bir parametre için güven vericidir. Kütüphanenin bu kararı kendisi hallettiğini varsayarak onu olduğu gibi bırakabilirsiniz; ancak varsayılan init=”k-means++” ile n_init=”auto” tam olarak tek bir tam çalışmayı ifade eder.
Bunun neden önemli olduğunu görmek için KMeans’in nasıl çalıştığını hatırlayın: küme merkezlerinden oluşan bir başlangıç kümesiyle başlar, her gözlemi en yakın merkeze atar ve yakınsamaya ulaşana kadar o merkezleri tekrarlı biçimde günceller. Merkezlerin nereden başladığı, nereye ulaşıklarını etkileyebilir; çünkü algoritma daha fazla iterasyonun kaçamayacağı bir yerel minimuma oturabilir.
Birden fazla başlatma, tüm prosedürü farklı başlangıç pozisyonlarından tekrarlayarak bunu giderir. n_init=10 ile KMeans on çalıştırır ve en küçük içertiliği (inertia)—gözlemler ile atanmış küme merkezleri arasındaki kareli mesafelerin toplamını—tutanı tutar.
Varsayılan k-means++ başlatma, basit rastlantısal seçimden daha dikkatlice merkez seçer; bu da tek bir çalışmayı daha makul bir hesaplama kısayolu yapar; ancak başka bir başlamanın daha iyi bir çözüm üretmeyeceğine dair garanti vermez. “auto” ayarı, başlatma yöntemine dayalı sabit bir kural izler; sonuçlarınızı inceler ve kararlı göründüklerinde yeniden başlatmaya devam etmez.
Birden fazla deneme istiyorsanız, ek hesaplama kabul ederek bunları n_init=10 gibi açık bir değerle isteyin. Aksi halde miras aldığınız otomatik seçim, alternatif başlangıçlarla karşılaştırılmadan tek bir başlamanın sonucunu kabul etmektir.
Kaynak metni
max_iter’i arttırmak bu eksik yeniden başlatmaları geri getirmez; çünkü yalnızca her çalışmadaki güncellemeleri artırır. Benzer şekilde random_state=42 ayarı başlatmayı tekrarlanabilir kılar, böylece aynı çözeume tutarlı biçimde dönebilirsiniz; ancak başka bir başlangıcın onu iyileştirebilecek olup olmadığını öğrenmeden.
Sade İmputer ve Ön İşlemenin Sessizce Kaydırdığı Özellikler
Pipeline’inize SimpleImputer() ekleyip eksik değerleri doldurmasını beklersiniz; ancak varsayılanları aynı zamanda tüm sütunları kaldırmasına da olanak tanır. Varsayılan ortalamalı stratejiyle, uydurma sırasında yalnızca eksik içeren herhangi bir özellik hesaplayacak ortalama sahip değildir; bu yüzden imputer onu dönüştürülmüş çıktidan düşürür.
20 özelliği olan bir eğitim veri setini hayal edin; bunlar arasında eğitim gözlemlerinin hiçbiri için kaydedilmemiş bir ölçüm içeriyor. Imputer o sütunu kaldırır ve aşağıdaki model geri kalan 19 özellik üzerinde eğitilir; oysa siz hattınızı hâlâ 20 örnekleimli bir model olarak düşünüyor olabilirsiniz.
Şimdi önceki boş sütunda gerçek değerler olan yeni veri gelir. Uydurulmuş imputer onu yine kaldırır, çünkü karar eğitim sırasında verilmişti; yeni ölçümler modele hiç ulaşmaz.
Bir özellik sayısı hatası bekleyebilirsiniz; ancak tutarlı bir hattında böyle biri olmaz: model eğitimde 19 özellik aldı ve tahminde aynı 19 özelliği alır. Her şey normal çalışır; bu da yalnızca ön işlemeye başlamadan önce veriyi incelediğinizde değişikliği kolayca kaçırmanıza yol açar.
Bu aynı zamanda cross-validation içinde de olabilir: seyrek doldurulmuş bir sütun, veri setinin geri kalanında içerdiği halde tek bir eğitim katmanında tamamen eksik olabilir.
Kaynak metni
keep_empty_features=True ayarı o sütunları korur; ortalamalı varsayılan stratejiyle eksik değerleri sıfırla doldurur. Bu özellik yapısını korur, ancak modele eğitim verisinde mevcut olmayan bir ilişki öğretemez; bu nedenle sütunu tutmak onun gelecekteki değerlerinin otomatik olarak yararlı olacağı anlamına gelmez.
Nokta, ön işlemenin aşağıya gerçekten ne ilettiğini incelemektir; buna çıktı özellik adları ve biçimi de dahildir. Eksik girdileri doldurmak için eklenen bir adım, hangi özelliklerin hayatta kalacağını da belirleyebilir; başarılı bir .predict() çağrısı birinin kaybolduğunu söylemez.
Son Nokta: Dört Satırın Cevaplamadığı Soruları Bilmek
Bunların hiçbiri hata değildir ve varsayılanların varoluşunun iyi nedenleri vardır; bunlar arasında hesaplama verimliliğinden yaygın iş akışlarını çalıştırmayı kolaylaştırmaya kadar şeyler yer alır. Sorun, bu seçimlerin yaptığı kararları fark etmeden kabul ettiğimizde başlar; özellikle kod temiz yürütüldüğünde ve çıktı tamamen makule göründüğünde.
Bunların hepsi üretim işinde karşılaştığım davranışlardır; ya kendi hattılarımda ya da meslektaşlarının projelerinde, koda düşen küçük izden daha fazla baş ağrısı yaratan. Bir argümanın atlanması, veriye, modele ve beklenmedik bir sonucun açıklayabileceği her şeye odaklandığınızda kolayca gözden kaçırılır.
Kodlama asistanları bu ihmalları ileri taşımayı kolaylaştırır; çünkü tanıdık bir uygulama, arkasındaki varsayımlar üzerine konuşmadan önce bile bütünleşik biçimde elinize ulaşabilir. Asistant o varsayımları değerlendirmenize yardımcı olabilir; ancak “kodu yaz” talimatı satır sıralaması, başlatma ya da ön işlemenin neyin hayatta kaldığı konularında bir görüşmeyi garanti etmez.
Sorun hiç de dört satırı typlamak değildi; o dört satırın cevaplamadığı soruları bilmekti. Deney hâlâ burada önemlidir:
Bu Gelişmeyi Toplulukta Değerlendirin
Haber hakkındaki düşüncelerinizi, donanım deneyimlerinizi ve teknik sorularınızı topluluk üyeleriyle anlık olarak tartışın.





Söz sizde.
Deneyiminizi, sorularınızı ve katkılarınızı paylaşın. E-posta adresiniz yayımlanmaz.