Scikit_learn modellerinde fit ile fit_transform arasındaki fark nedir?


110

Veri bilimine yeniyim fitve fit_transformscikit-learn'deki yöntemler ile yöntem arasındaki farkı anlamıyorum . Herhangi biri neden verileri dönüştürmemiz gerektiğini açıklayabilir mi?

Eğitim verisine uydurma modeli ve test verisine dönüştürme ne demektir? Örneğin, kategorik değişkenleri trende sayılara dönüştürmek ve yeni özellik setini test verisine dönüştürmek anlamına mı geliyor?



sds Yukarıdakilerin cevabı bu sorunun bağlantısını verir.
Kaushal28

Biz uygulamak fitüzerinde training datasetve kullanımı transformyöntemi üzerinde both- Eğitim veri kümesini ve test veri kümesi
Prakash Kumar

Yanıtlar:


117

To verileri ortalamak (sıfır ortalama ve birim standart hata var olun), sen ortalama çıkarma ve sonra standart sapma ile sonuç bölün.

x=xμσ

Bunu eğitim setinde yapıyorsunuz. Ancak aynı dönüşümü test setinize (örneğin çapraz onaylamada) veya tahminden önce yeni alınmış örneklere uygulamanız gerekir. Ancak , eğitim setini merkezlemek için kullandığınız iki parametre ve (değerler) kullanmanız gerekir.σμσ

Bu nedenle, her sklearn dönüşümü fit()sadece parametreleri hesaplar (örneğin , StandardScaler durumunda ve ) ve bunları dahili bir nesne durumu olarak kaydeder. Daha sonra, dönüşümü belirli bir örnek gruba uygulamak için yöntemini çağırabilirsiniz .σμσtransform()

fit_transform()bu iki adımı birleştirir ve eğitim setine parametrelerin ilk yerleştirilmesi için kullanılır , ancak aynı zamanda dönüştürülmüş bir döndürür . Dahili olarak, bu sadece ilk çağırır ve sonra aynı veriler üzerinde.x xxfit()transform()


1
Cevabınız için çok teşekkür ederim. Sadece bir şey var. uygun olduğunuzda örneğin hangi metodun uygun metoda yerleştirildiği gibi doğrusal bir regresyon diyelim. Normalleştirme parametreleri veya eğim ve kesişme gibi model parametreleri?
Kaggle

1
Dönüşümlerin içindeki parametreleri (StandardScaler durumunda ve ) kastediyorum . Hangi dönüşümün yöntemi olursa olsun geri döner. Alıntıyla ilgili bu bölüme bakınız, örneğin: scikit-learn.org/stable/modules/…σμσget_params()
K3 --- rnc

2
Önceki yorumum aslında yanlış. Doğrusal regresyon durumunda, takılan parametreler coef_(yani eğim ve kesişme), döndürdüğü değerler değildir get_params()(bunun yerine, model yapıcı argümanları kümesini ilişkili değerleriyle döndürür).
K3 --- rn

Mükemmel cevap! Bu konuyu ararken mesajınıza rastladım, ancak açıklığa kavuşturmam gerekiyor. Bu, müteakip örneklerin her bir kümesini dönüştürmek istediğimizi varsayalım fit_transform(), iç nesneler durumuna erişmemize izin vermeyecek, sonraki örnekleri fit()ilk veri kümesi kullanılarak elde edilen aynı parametrelerle dönüştürmek için asla arayacağımız anlamına mı geliyor ? Bu, örneğin bir test veri setine sahip olduğunuz ve test setini eğitimli sınıflandırıcınıza geçirmek için test setini dönüştürmek istediğinizde ortaya çıkar.
AKKA

Aradığınızda sonra t.fit_transform(train_data), t bir takılmıştır, bu nedenle güvenle kullanabilirsiniz t.transform(test_data).
K3 --- rnc

10

Aşağıdaki açıklama dayanmaktadır fit_transformait Imputersınıfının, ama fikir için aynıdır fit_transformdiğer scikit_learn sınıfları gibi bir MinMaxScaler.


transformeksik olan değerleri bir sayı ile değiştirir. Varsayılan olarak, bu sayı seçtiğiniz bazı verilerin sütunlarını ifade eder. Aşağıdaki örneği düşünün:

imp = Imputer()
# calculating the means
imp.fit([[1, 3], [np.nan, 2], [8, 5.5]])

Şimdi, kullanıcı, iki sütunlu verilere uygulandığında ilk sütun için bir ortalama (1 + 8) / 2 = 4.5 ve ikinci sütun için ortalama (2 + 3 + 5.5) / 3 = 3.5 kullanmayı öğrendi:

X = [[np.nan, 11], 
     [4,      np.nan], 
     [8,      2],
     [np.nan, 1]]
print(imp.transform(X))

alırız

[[4.5, 11], 
 [4, 3.5],
 [8, 2],
 [4.5, 1]]

Böylece, kullanıcı tarafından fitbazı verilerden elde edilen kolonların araçlarını hesaplar ve transformbu sayede bazı araçları bu araçlara uygular (bu sadece eksik değerleri araçlarla değiştirir). Her iki verinin de aynı olması durumunda (yani, araçların hesaplanması için veriler ve araçlara uygulanan veriler) fit_transform, fitbunu temelde a transform.

Şimdi sorularınız:

Neden verileri dönüştürmemiz gerekebilir?

"Çeşitli nedenlerle, gerçek dünyada pek çok veri kümeleri ancak. Sıklıkla boşlukları, NaN'ler veya diğer tutucu olarak kodlanmış, bu tür veri setlerini eksik değerleri içeren bir dizideki tüm değerler sayısal olduğunu kabul kestiricilerini scikit-öğrenme ile uyumsuz" ( kaynak )

Eğitim verisine uydurma modeli ve test verisine dönüştürme ne demektir?

fitBir imputer ait olan ilgisi yoktur fituydurma modelinde kullanılan. Böylece, imputer'ın fitantrenman verilerini kullanmak sadece her antrenman verisi sütununun araçlarını hesaplar. transformTest verilerinin kullanılması , test verilerinin eksik değerlerini, eğitim verilerinden hesaplanan araçlarla değiştirir.


3

Layman'ın terimiyle, fit_transform bir hesaplama yapmak ve sonra dönüşüm yapmak demektir (bazı verilerden sütunların hesaplanmasını ve sonra eksik değerlerin yerini almayı diyelim). Bu yüzden eğitim seti için hem dönüşüm hem de hesaplama yapmanız gerekiyor.

Ancak, test seti için, Makine öğrenmesi, eğitim seti sırasında öğrenilenlere dayanarak tahmin uygular ve bu yüzden hesaplamaya gerek duymaz, sadece dönüşümü gerçekleştirir.


3

Bu yöntemler, scikit-learn'deki veri kümesi dönüşümleri için kullanılır:

Veri kümesindeki Ölçekleme değerleri için bir örnek ele alalım:

Burada fit metodu, eğitim veri setine uygulandığında, model parametrelerini öğrenir (örneğin, ortalama ve standart sapma). Daha sonra , dönüştürülmüş (ölçeklendirilmiş) eğitim veri setini elde etmek için dönüşüm yöntemini eğitim veri setine uygulamamız gerekir. Eğitim veri setinde fit_transform uygulayarak bu adımların her ikisini de bir adımda gerçekleştirebiliriz .

Öyleyse neden 2 ayrı yönteme ihtiyacımız var - uyum ve dönüşüm ?

Uygulamada, ayrı bir eğitim ve test veri setine ihtiyacımız var ve bu, ayrı bir uyum ve dönüşüm yöntemine sahip olmanın yardımcı olduğu yerdir . Biz uygulamak uygun eğitim veri kümesi üzerinde ve kullanımı dönüşümü hem yöntemi - Eğitim veri kümesini ve test veri kümesi. Böylece, eğitim veri setinin yanı sıra eğitim, uygun veri yönteminin eğitim veri setinin uygulanmasında öğrenilen model parametreleri kullanılarak dönüştürülür (ölçeklenir) .

Örnek kod:

scaler = preprocessing.StandardScaler().fit(X_train)
scaler.transform(X_train) 
scaler.transform(X_test) 

2

Bu teknik bir cevap değil ama umarım sezgimizi geliştirmemize yardımcı olur:

İlk olarak, tüm tahminciler bazı eğitim verileri üzerinde eğitilmektedir (veya “uygun”). Bu kısım oldukça basittir.

İkincisi, scikit-öğrenme tahmin edicilerin hepsi bir boru hattında kullanılabilir ve bir boru hattı ile fikir veri akışlarını olduğu aracılığıyla boru hattı. Boru hattında belirli bir seviyeye sığdıktan sonra, veriler boru hattında bir sonraki aşamaya aktarılır, ancak belli ki verilerin bir şekilde değiştirilmesi (dönüştürülmesi) gerekir; Aksi takdirde, boru hattındaki o aşamaya hiç ihtiyacınız olmaz. Dolayısıyla, dönüştürme, boru hattındaki bir sonraki aşamadaki ihtiyaçları karşılamak için verileri dönüştürmenin bir yoludur.

Eğer bir boru hattı kullanmıyorsanız, hala bile en basit sınıflandırıcı edilir çünkü bu şekilde bu makine öğrenme araçları hakkında düşünmek yararlı olduğunu düşünüyorum hala bir sınıflandırma işlevi yerine. Bazı verileri girdi olarak alır ve bir çıktı üretir. Bu da bir boru hattıdır; sadece çok basit bir tane.

Özet olarak, uygunluk eğitimi gerçekleştirir, dönüştürme , boru hattındaki verileri boru hattındaki bir sonraki aşamaya geçirmek için değiştirir ve fit_transform , hem uygunluğu hem de en uygun hale getirilmiş adımda hem fittingi hem de dönüşümü yapar.


"" Eğitim veri setine uygun şekilde uyguluyoruz ve her ikisinde de dönüşüm yöntemini kullanıyoruz - eğitim veri kümesi ve test veri kümesi "" :) Güzel
Prakash Kumar

2
Bence aşağıya yorum yapmak istedin. Bunu Prasad Nageshkar'a ileteceğim. (Şey ... Şöhretim olsaydı çok iyi olurdu.)
Eric McLachlan

1

Dönüşümleri uygulayarak verilerinizin normal çalışmasını sağlamaya çalışıyorsunuz, örneğin ve iki değişkeniniz varsa, ikisi de mesafeleri ölçer ancak santimetre cinsinden ve Kilometre cinsinden birime sahipse, bu ikisini karşılaştırmak için Onları aynı birimlere dönüştürmek zorundasınız ... tıpkı Dönüştürme'nin benzer davranışlarda bulunması veya normal dağılım gibi davranması gibiV1V2V1V2

Başka bir soruya gelince, ilk önce modeli (yani eğitim verilerinden davranışlarını öğrenir) ve eğitim setindeki davranışını öğrenir ve aynı modeli test setinde çalıştırdığınızda benzer kalıpları veya davranışları tanımlamaya çalışır. Bir kez belirlediğinde, sonuçları çıkarır ve buna göre eğitim verisine göre sonuçlar verir.


0

Verileri normalleştirmemizi gerektiren bir görev düşünün. Örneğin, bir min-maks normalizasyon veya z-skor normalleştirme kullanabiliriz. Modelde bazı doğal parametreler var. Min-max normalizasyonunda minimum ve maksimum değerler ve z-skor normalleşmesinde ortalama ve standart sapma. Fit () işlevi bu parametrelerin değerlerini hesaplar.

Fit'in Etkisi ()

Dönüştürme işlevi, gerçek verilerdeki parametrelerin değerlerini uygular ve normalleştirilmiş değeri verir.

Dönüşümün etkisi ()

Fit_transform () işlevi her ikisini de aynı adımda gerçekleştirir.

Fit_transform () etkisi

Aynı değerin 2 adımda mı yoksa tek adımda mı yapıldığına dikkat edin.


0

"fit", daha sonra ölçeklendirme için kullanılacak ortalamayı ve std'yi hesaplar . (bir hesaplama), size hiçbir şey verilmez .

"Dönüştürme" , verileri otomatik olarak ölçeklendirmek için önceden hesaplanmış bir ortalama ve std kullanır (tüm değerlerden ortalamayı çıkarın ve sonra std'ye bölün).

"fit_transform" her ikisini de aynı anda yapar. Böylece 2 yerine 1 kod satırı ile yapabilirsiniz.

Şimdi pratikte bakalım:

For X eğitim seti de kötü ve std hesaplamak ve sonra veriyi AutoScale için kullanmak gerekir çünkü biz "fit_transform" yok. For X test kümesi parçasını, iyi, biz zaten ortalama ve std var, bu yüzden sadece "dönüştürmek" yoktur.

Süper basit. İyi gidiyorsun. İyi çalışmaya devam et arkadaşım :-)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.