Bootstrap, bir anakütle hakkında çıkarım yapmak için örneklem verilerini kullanan bir yöntemdir. Bradley Efron bunu ilk kez 1979’da bu makalede tanıttı. Bootstrap, örneklem verilerinden yerine koyarak örnekleme yapmaya dayanır. Bu teknik, herhangi bir istatistiğin standart hatasını tahmin etmek ve onun için bir güven aralığı (GA) elde etmek amacıyla kullanılabilir. GA’nın kapalı bir formu olmadığında veya çok karmaşık olduğunda bootstrap özellikle kullanışlıdır.
n elemandan oluşan bir örneklemimiz olduğunu varsayalım: X = {x1, x2, …, xn} ve bazı bir istatistik için GA ile ilgileniyoruz: T = t(X). Bootstrap çerçevesi basittir. Sadece aşağıdaki şemayı R kez tekrarlarız: i. tekrarda, mevcut örneklemden yerine koyarak n eleman örnekleriz (bazıları birden fazla kez seçilecektir). Bu yeni örnekleme i. bootstrap örneklemi, Xi diyelim ve istenen istatistiği hesaplayalım: Ti = t(Xi).
Sonuç olarak, istatistiğimizin R değerini elde ederiz: T1, T2, …, TR. Bunlara T’nin bootstrap gerçekleşmeleri ya da T’nin bootstrap dağılımı deriz. Buna dayanarak T için GA hesaplayabiliriz. Bunu yapmanın birkaç yolu vardır. Yüzdelikleri almak en kolay görünenidir.
Uygulamada Bootstrap
(Bir kez daha) iyi bilinen iris veri setini kullanalım. İlk birkaç satıra göz atın:
Diyelim ki medyan Sepal.Length, medyan Sepal.Width ve bu ikisi arasındaki Spearman sıra korelasyon katsayısı için GA’ları bulmak istiyoruz. R’nin boot paketini ve adı... boot olan bir fonksiyonu kullanacağız. Bu gücü kullanmak için, yeniden örneklenmiş verilerden istatistiğimizi(lerimizi) hesaplayan bir fonksiyon oluşturmamız gerekir. En az iki argümana sahip olmalıdır: bir dataset ve bir bootstrap örneklemi oluşturmak için veri setinden seçilen öğelerin indices vektörü.
Aynı anda birden fazla istatistik için GA hesaplamak istersek, fonksiyonumuz bunları tek bir vektör olarak döndürmelidir.
foo, data içinden istenen öğeleri (indices içinde numaraları bulunan) seçer ve ilk iki sütunun korelasyon katsayısını hesaplar (method='s', Spearman sıra katsayısını seçer; method='p' Pearson katsayısı ile sonuçlanır) ve bunların medyanlarını döndürür.
Ekstra argümanlar da ekleyebiliriz; örneğin, kullanıcının korelasyon katsayısı türünü seçmesine izin verelim:
Bu eğitimi daha genel hale getirmek için, foo’nun ikinci sürümünü kullanacağım.
Artık boot fonksiyonunu kullanabiliriz. Ona veri setinin adını, az önce oluşturduğumuz fonksiyonu, tekrar sayısını (R) ve fonksiyonumuzun ek argümanlarını (örneğin cor.type) sağlamalıyız. Aşağıda, örneğin tekrarlanabilirliği için set.seed kullanıyorum.
boot fonksiyonu, adı... (evet, doğru bildiniz!) boot olan bir sınıfa ait bir nesne döndürür. İki ilginç öğesi vardır. $t, bootstrap prosedürüyle üretilen istatistiğimizin R değerlerini (T’nin bootstrap gerçekleşmeleri) içerir:
original, $t0 ile aynıdır. bias, bootstrap gerçekleşmelerinin ortalaması (yani $t’den gelen), T’nin bootstrap tahmini ile orijinal veri setindeki değer ($t0’daki) arasındaki farktır.
GA ile başlamadan önce, bootstrap gerçekleşmelerinin dağılımına göz atmak her zaman değerlidir. foo içinde hesaplanan hangi istatistiğe bakmak istediğimizi belirten index ile plot fonksiyonunu kullanabiliriz. Burada index=1 sepal uzunluğu ile genişliği arasındaki Spearman korelasyon katsayısı, index=2 sepal uzunluğunun medyanı ve index=3 sepal genişliğinin medyanıdır.
Bootstrap korelasyon katsayılarının dağılımı oldukça normale benziyor. Bunun için GA bulalım. boot.ci kullanabiliriz. Varsayılan olarak yüzde 95 GA verir, ancak conf parametresiyle değiştirilebilir.
boot.ci(myBootstrap, index=1)## Warning in boot.ci(myBootstrap, index = 1): bootstrap variances needed for## studentized intervals## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS## Based on 1000 bootstrap replicates#### CALL :## boot.ci(boot.out = myBootstrap, index = 1)#### Intervals :## Level Normal Basic ## 95% (-0.3178, -0.0209 ) (-0.3212, -0.0329 ) #### Level Percentile BCa ## 95% (-0.3007, -0.0124 ) (-0.3005, -0.0075 ) ## Calculations and Intervals on Original ScaleAltyapı:
boot.ci 5 tür bootstrap GA sağlar. Bunlardan biri olan studentize aralık özeldir. Bootstrap varyansı tahminine ihtiyaç duyar. Bunu sağlamadık, bu yüzden R bir uyarı yazdırdı: bootstrap variances needed for studentized intervals. Varyans tahminleri ikinci düzey bootstrap ile veya (daha kolay) jackknife tekniğiyle elde edilebilir. Bu konu bu eğitimin kapsamının biraz dışında, bu yüzden kalan dört tür bootstrap GA’ya odaklanalım.
Hepsini görmek istemezsek, type argümanında ilgili olanları seçebiliriz. Olası değerler norm, basic, stud, perc, bca veya bunların bir vektörüdür.
boot.ci(myBootstrap, index=1, type=c('basic','perc'))## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS## Based on 1000 bootstrap replicates#### CALL :## boot.ci(boot.out = myBootstrap, type = c("basic", "perc"), index = 1)#### Intervals :## Level Basic Percentile ## 95% (-0.3212, -0.0329 ) (-0.3007, -0.0124 ) ## Calculations and Intervals on Original ScaleAltyapı:
boot.ci fonksiyonu, adı... (evet, tahmin ettiniz!) bootci olan bir sınıfın nesnesini oluşturur. Öğeleri, type argümanında kullanılan GA türleriyle aynı adları taşır. $norm, güven düzeyini ve GA sınırlarını içeren 3 elemanlı bir vektördür.
Yüzdelik GA genel olarak önerilmez çünkü tuhaf kuyruklu dağılımlarda kötü performans gösterebilir. Temel GA (aynı zamanda pivotal veya empirical GA olarak da adlandırılır) buna çok daha dayanıklıdır. Bunun mantığı, her bir bootstrap yinelemesi ile t0 arasındaki farkları hesaplamak ve bunların dağılımının yüzdeliklerini kullanmaktır. Tüm ayrıntılar örneğin L. Wasserman’ın All of Statistics kitabında bulunabilir.
Temel GA için nihai formül şöyledir:
(2t0 − θ1 − (1 − α)/2, 2t0 − θ(1 − α)/2)
BCα GA
BCα, bias-corrected, accelerated ifadesinden gelir. Formülü çok karmaşık olmasa da biraz sezgisizdir, bu yüzden atlayacağım. Ayrıntılar ilginizi çekiyorsa Thomas J. DiCiccio ve Bradley Efron’un makalesine bakın.
Yöntemin adında geçen hızlandırma, bootstrap gerçekleşmelerinin belirli yüzdeliklerinin kullanılmasını gerektirir. Bazen bunlar uç yüzdelikler, muhtemel aykırı değerler olabilir. BCα bu gibi durumlarda kararsız olabilir.
Petal genişliği medyanı için BCα GA’ya bakalım. Orijinal veri setinde bu medyan tam olarak 3’tür.
boot.ci(myBootstrap, index=3)## Warning in boot.ci(myBootstrap, index = 3): bootstrap variances needed for## studentized intervals## Warning in norm.inter(t, adj.alpha): extreme order statistics used as## endpoints## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS## Based on 1000 bootstrap replicates#### CALL :## boot.ci(boot.out = myBootstrap, index = 3)#### Intervals :## Level Normal Basic ## 95% ( 2.939, 3.046 ) ( 2.900, 3.000 ) #### Level Percentile BCa ## 95% ( 3.0, 3.1 ) ( 2.9, 2.9 ) ## Calculations and Intervals on Original Scale## Warning : BCa Intervals used Extreme Quantiles## Some BCa intervals may be unstableAltyapı:
BCα GA’sı (2.9, 2.9) elde ediyoruz. Bu tuhaf, ama neyse ki R bize extreme order statistics used as endpoints diye uyardı. Burada tam olarak ne olduğuna bakalım:
Bu gibi bir durumda, BCα yöntemindeki “hızlandırma” kolayca uç değerlere “sıçrayabilir”. Burada, BCα GA’sının temelini oluşturan yüzdelik GA (3, 3.1)’dir. Şimdi, bunu “sola” doğru genişlettiğimizde 0,002-yüzdelik kullanmamız gerekir. “Sağa” genişleme de uçlara gider: 0,997-yüzdelik.
Sonuçların Yeniden Üretilmesi
Bazen bootstrap yinelemelerini yeniden oluşturmak gerekir. Bunu yapmak için R’yi kullanabiliyorsak sorun yoktur. set.seed fonksiyonu bu sorunu çözer. Bootstrap yinelemelerini başka yazılımlarda yeniden oluşturmak çok daha karmaşık olacaktır. Dahası, büyük R için, R’de yeniden hesaplama da bir seçenek olmayabilir (örneğin zaman kısıtı nedeniyle).
Bu sorunun üstesinden, her bir bootstrap örneklemini oluşturan orijinal veri seti öğelerinin indekslerini kaydederek gelebiliriz. boot.array fonksiyonu ( indices=T argümanıyla) bunu yapar.
indices=F (varsayılan) ayarlandığında, “Orijinal veri setinin her bir öğesi her bir bootstrap örnekleminde kaç kez göründü?” sorusunun cevabını alırız. Örneğin, ilk örneklemde: veri setinin 1. öğesi bir kez, 2. öğe hiç, 3. öğe bir kez, 4. öğe iki kez vb. görünmüştür.
Bu tür bir tablo, bootstrap gerçekleşmesini R dışında yeniden oluşturmamıza olanak tanır. Ya da set.seed kullanmak istemediğimiz ve tüm hesaplamayı tekrar yapmak istemediğimizde R’de de.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Bootstrap nedir?
Bootstrap, bir anakütle hakkında çıkarım yapmak için örneklem verilerini kullanan bir yöntemdir. Bradley Efron bunu ilk kez 1979’da bu makalede tanıttı. Bootstrap, örneklem verilerinden yerine koyarak örnekleme yapmaya dayanır. Bu teknik, herhangi bir istatistiğin standart hatasını tahmin etmek ve onun için bir güven aralığı (GA) elde etmek amacıyla kullanılabilir. GA’nın kapalı bir formu olmadığında veya çok karmaşık olduğunda bootstrap özellikle kullanışlıdır.
n elemandan oluşan bir örneklemimiz olduğunu varsayalım: X = {x1, x2, …, xn} ve bazı bir istatistik için GA ile ilgileniyoruz: T = t(X). Bootstrap çerçevesi basittir. Sadece aşağıdaki şemayı R kez tekrarlarız: i. tekrarda, mevcut örneklemden yerine koyarak n eleman örnekleriz (bazıları birden fazla kez seçilecektir). Bu yeni örnekleme i. bootstrap örneklemi, Xi diyelim ve istenen istatistiği hesaplayalım: Ti = t(Xi).
Sonuç olarak, istatistiğimizin R değerini elde ederiz: T1, T2, …, TR. Bunlara T’nin bootstrap gerçekleşmeleri ya da T’nin bootstrap dağılımı deriz. Buna dayanarak T için GA hesaplayabiliriz. Bunu yapmanın birkaç yolu vardır. Yüzdelikleri almak en kolay görünenidir.
Uygulamada Bootstrap
(Bir kez daha) iyi bilinen
irisveri setini kullanalım. İlk birkaç satıra göz atın:Diyelim ki medyan
Sepal.Length, medyanSepal.Widthve bu ikisi arasındaki Spearman sıra korelasyon katsayısı için GA’ları bulmak istiyoruz.R’ninbootpaketini ve adı...bootolan bir fonksiyonu kullanacağız. Bu gücü kullanmak için, yeniden örneklenmiş verilerden istatistiğimizi(lerimizi) hesaplayan bir fonksiyon oluşturmamız gerekir. En az iki argümana sahip olmalıdır: birdatasetve bir bootstrap örneklemi oluşturmak için veri setinden seçilen öğelerinindicesvektörü.Aynı anda birden fazla istatistik için GA hesaplamak istersek, fonksiyonumuz bunları tek bir vektör olarak döndürmelidir.
Bizim örneğimiz için şu şekilde görünebilir:
foo,dataiçinden istenen öğeleri (indicesiçinde numaraları bulunan) seçer ve ilk iki sütunun korelasyon katsayısını hesaplar (method='s', Spearman sıra katsayısını seçer;method='p'Pearson katsayısı ile sonuçlanır) ve bunların medyanlarını döndürür.Ekstra argümanlar da ekleyebiliriz; örneğin, kullanıcının korelasyon katsayısı türünü seçmesine izin verelim:
Bu eğitimi daha genel hale getirmek için,
foo’nun ikinci sürümünü kullanacağım.Artık
bootfonksiyonunu kullanabiliriz. Ona veri setinin adını, az önce oluşturduğumuz fonksiyonu, tekrar sayısını (R) ve fonksiyonumuzun ek argümanlarını (örneğincor.type) sağlamalıyız. Aşağıda, örneğin tekrarlanabilirliği içinset.seedkullanıyorum.bootfonksiyonu, adı... (evet, doğru bildiniz!)bootolan bir sınıfa ait bir nesne döndürür. İki ilginç öğesi vardır.$t, bootstrap prosedürüyle üretilen istatistiğimizin R değerlerini (T’nin bootstrap gerçekleşmeleri) içerir:$t0, istatistiğimizin orijinal, tam veri setindeki değerlerini içerir:bootnesnesini konsola yazdırmak daha fazla bilgi verir:original,$t0ile aynıdır.bias, bootstrap gerçekleşmelerinin ortalaması (yani$t’den gelen), T’nin bootstrap tahmini ile orijinal veri setindeki değer ($t0’daki) arasındaki farktır.std. error, bootstrap tahmininin standart hatasıdır ve bootstrap gerçekleşmelerinin standart sapmasına eşittir.Farklı Bootstrap GA Türleri
GA ile başlamadan önce, bootstrap gerçekleşmelerinin dağılımına göz atmak her zaman değerlidir.
fooiçinde hesaplanan hangi istatistiğe bakmak istediğimizi belirtenindexileplotfonksiyonunu kullanabiliriz. Buradaindex=1sepal uzunluğu ile genişliği arasındaki Spearman korelasyon katsayısı,index=2sepal uzunluğunun medyanı veindex=3sepal genişliğinin medyanıdır.Bootstrap korelasyon katsayılarının dağılımı oldukça normale benziyor. Bunun için GA bulalım.
boot.cikullanabiliriz. Varsayılan olarak yüzde 95 GA verir, ancakconfparametresiyle değiştirilebilir.boot.ci5 tür bootstrap GA sağlar. Bunlardan biri olan studentize aralık özeldir. Bootstrap varyansı tahminine ihtiyaç duyar. Bunu sağlamadık, bu yüzdenRbir uyarı yazdırdı:bootstrap variances needed for studentized intervals. Varyans tahminleri ikinci düzey bootstrap ile veya (daha kolay) jackknife tekniğiyle elde edilebilir. Bu konu bu eğitimin kapsamının biraz dışında, bu yüzden kalan dört tür bootstrap GA’ya odaklanalım.Hepsini görmek istemezsek,
typeargümanında ilgili olanları seçebiliriz. Olası değerlernorm,basic,stud,perc,bcaveya bunların bir vektörüdür.boot.cifonksiyonu, adı... (evet, tahmin ettiniz!)bootciolan bir sınıfın nesnesini oluşturur. Öğeleri,typeargümanında kullanılan GA türleriyle aynı adları taşır.$norm, güven düzeyini ve GA sınırlarını içeren 3 elemanlı bir vektördür.$basic,$stud,$percve$bcaise GA’yı hesaplamak için kullanılan yüzdelikleri de içeren 5 elemanlı vektörlerdir (buna birazdan döneceğiz):Biraz gösterim (üzgünüm!)
Farklı GA türlerinin ne olduğunu hissetmek için biraz gösterim tanıtmamız gerekiyor. Şöyle ki:
Yüzdelik (Percentile) GA
Yukarıdaki gösterimle, yüzdelik GA şöyledir:
yani sadece ilgili yüzdelikleri alır. Başka bir şey yok.
Normal GA
Tipik bir Wald GA şöyle olurdu:
ancak bootstrap durumunda, bunu yanlılık için düzeltmeliyiz. Böylece şu hale gelir:
$$ t_0 - b \pm z_\alpha \cdot se^\star \\ 2t_0 - t^\star \pm z_\alpha \cdot se^\star$$
Temel (Basic) GA
Yüzdelik GA genel olarak önerilmez çünkü tuhaf kuyruklu dağılımlarda kötü performans gösterebilir. Temel GA (aynı zamanda pivotal veya empirical GA olarak da adlandırılır) buna çok daha dayanıklıdır. Bunun mantığı, her bir bootstrap yinelemesi ile t0 arasındaki farkları hesaplamak ve bunların dağılımının yüzdeliklerini kullanmaktır. Tüm ayrıntılar örneğin L. Wasserman’ın All of Statistics kitabında bulunabilir.
Temel GA için nihai formül şöyledir:
BCα GA
BCα, bias-corrected, accelerated ifadesinden gelir. Formülü çok karmaşık olmasa da biraz sezgisizdir, bu yüzden atlayacağım. Ayrıntılar ilginizi çekiyorsa Thomas J. DiCiccio ve Bradley Efron’un makalesine bakın.
Yöntemin adında geçen hızlandırma, bootstrap gerçekleşmelerinin belirli yüzdeliklerinin kullanılmasını gerektirir. Bazen bunlar uç yüzdelikler, muhtemel aykırı değerler olabilir. BCα bu gibi durumlarda kararsız olabilir.
Petal genişliği medyanı için BCα GA’ya bakalım. Orijinal veri setinde bu medyan tam olarak 3’tür.
BCα GA’sı (2.9, 2.9) elde ediyoruz. Bu tuhaf, ama neyse ki
Rbizeextreme order statistics used as endpointsdiye uyardı. Burada tam olarak ne olduğuna bakalım:Bootstrap gerçekleşmelerinin dağılımı alışılmadık. Büyük çoğunluğu (yüzde 90’dan fazlası) 3’tür.
Bu gibi bir durumda, BCα yöntemindeki “hızlandırma” kolayca uç değerlere “sıçrayabilir”. Burada, BCα GA’sının temelini oluşturan yüzdelik GA (3, 3.1)’dir. Şimdi, bunu “sola” doğru genişlettiğimizde 0,002-yüzdelik kullanmamız gerekir. “Sağa” genişleme de uçlara gider: 0,997-yüzdelik.
Sonuçların Yeniden Üretilmesi
Bazen bootstrap yinelemelerini yeniden oluşturmak gerekir. Bunu yapmak için
R’yi kullanabiliyorsak sorun yoktur.set.seedfonksiyonu bu sorunu çözer. Bootstrap yinelemelerini başka yazılımlarda yeniden oluşturmak çok daha karmaşık olacaktır. Dahası, büyük R için,R’de yeniden hesaplama da bir seçenek olmayabilir (örneğin zaman kısıtı nedeniyle).Bu sorunun üstesinden, her bir bootstrap örneklemini oluşturan orijinal veri seti öğelerinin indekslerini kaydederek gelebiliriz.
boot.arrayfonksiyonu (indices=Targümanıyla) bunu yapar.Her satır bir bootstrap örneklemidir. Örneğin, ilk örneklemimiz şu öğeleri içerir:
indices=F(varsayılan) ayarlandığında, “Orijinal veri setinin her bir öğesi her bir bootstrap örnekleminde kaç kez göründü?” sorusunun cevabını alırız. Örneğin, ilk örneklemde: veri setinin 1. öğesi bir kez, 2. öğe hiç, 3. öğe bir kez, 4. öğe iki kez vb. görünmüştür.Bu tür bir tablo, bootstrap gerçekleşmesini
Rdışında yeniden oluşturmamıza olanak tanır. Ya daset.seedkullanmak istemediğimiz ve tüm hesaplamayı tekrar yapmak istemediğimizdeR’de de.Sonuçların aynı olup olmadığını kontrol edelim:
Evet, aynılar!
Eğer R’de Makine Öğrenimi hakkında daha fazla bilgi edinmek isterseniz, DataCamp’in Machine Learning Toolbox kursunu alın ve R ile Makine Öğrenimi başlangıç eğiticisine göz atın.