Pazar gunu, bir suredir yanda tuttugum birkac makaleye goz atip, birkac machine learning konusuna egildigim, aralarda birkac video izleyip, podcast dinledigim bir gun oldu. Bugun itibariyle Gunden Geri Kalanlar serisini, Haziran basindan beri iki haftadir eksiksiz iki haftadir yazdigimi fark ettim. Kendime “istikrar” sozu verip, Temmuz sonuna kadar devam etmeye niyetliyim. Bakalim gorecegiz.
Onumuzdeki hafta bir mulakat icin yaptigim hazirliklar cercevesinde biraz Anamoly Detection konularina bakiyorum. Uzaklik ve yogunluk tahmini gibi yaklasimlara biraz asinayim fakat son zamanlarda birkac yerde rastladigim Isolation Forests yontemini merak ettigimden, gecen yil PyData Amsterdam’da verilmis kisa bir konusmayi izledim: Jan van der Vegt: A walk through the isolation forest | PyData Amsterdam 2019
Aslinda fikir cok basit: Elinizdeki veride anamoly esfetmek istiyorsunuz. Bunun icin de veriyi bircok *decision tree** ile parcalara ayiriyorsunuz ve her bir noktayi ayrimlarin sonunda yanliz biraktiginiz ana kadar kac ayrim yaptiginizi kenarda tutuyorsunuz. Bu sayi, bir verinin geri kalandan ne kadar izole oldugunun bir olcusu olacak, bunu “isolation score” olarak tanimliyoruz. Bu skora bakarak, dusuk skorlu noktalarin birkac adimda izole edildiklerini anliyoruz; bu bilgi bize verinin outlier olup olmadigina dair epey bir bilgi veriyor.
Konusmanin sonunda belirtildigi uzere, bu yontem numerik degiskenlerle ile gayet guzel calisirken, kategorik degiskenler ile bazi problemi var. Ayrica verideki
None
degerleri de bir problem. Bu konuda pek deneyimim olmadigi icin onerdigi cozum yontemini tam anlamasam da, bunu asmak icin kendi yazdigi bir skriptten bahsetti, Github sayfasinda mevcut olan.scikit-learn
‘un desklearn.ensmeble
aldindaIsolationForest
modulu var; hatta dokumantasyonda bir ornek uygulamaya da yer vermisler.
Bir suredir, programlama (daha genis anlamda yazilim gelistirme) konusunda bazi “best practice”leri ogrenmeye ve gunluk workflow’uma eklemeye/uyarlamaya calisiyorum. Yaptigim analizlerin, gelitirdigim araclarin belirli standartlari saglamasi, ileride tekrar kullanmak istedigimde, uzerine birseyler eklemek istedigimde, baska biriyle gonul rahatligiyla paylasip onun da tekrarlayabilecegini umdugumda, cikan yazilimi bir urune donusturmek istedigimde karsilasabilecegim tonla problem oldugunu fark ediyorum. Ozellikle mevcut programlama aliskanliklarimla devam edersem ve kazandigim “toksik” becerilerden bir an once kurtulmazsam… Bu becerileri kazanmamda buyuk payi olan Jupyter Notebook‘lara saydirdigim ufak bir tweet zinciri paylastim bugun:
Python ile veri analizine "Jupyter Notebook"larla başladığım güne ne kadar lanet okusam az… Kazandığım toksik becerilerden kurtulamadığıma mı, yoksa "iyi becerileri" kazanmak için, uzun zamandir ugrasmama ragmen, daha aylarımı (belki de de yıllarımı) verecek olmama mı yansam…
— Arif Bayırlı (@arifbayirli) June 14, 2020- Tweet zincirinde de baglantisini verdigim Joel Grus’un gecen yillarda, ustelik Jupyter Con’da yaptigi I dont like Notebooks konusmasinin slaytlarini zamaninda incelemistim, fakat konusma videosunu izlememistim. Bu vesileyle oturup, buyuk bir keyifle izledim. Slaytlarda olmayan, ozellikle kendisinin JupyterNotebook’lara alternatif olarak VSCode ve IPython kullanarak yaptigi demo resmen gozumu acti. Bir haftadir VSCode‘a yeni gecmis biri olarak, ozellikle *exploratory analysis** kismini interakif olarak nasil yaparim derken, cok temiz bir alternatifim oldu. Bir daha Notebook kullanan…
- Tweet zincirinde de baglantisini verdigim Joel Grus’un gecen yillarda, ustelik Jupyter Con’da yaptigi I dont like Notebooks konusmasinin slaytlarini zamaninda incelemistim, fakat konusma videosunu izlememistim. Bu vesileyle oturup, buyuk bir keyifle izledim. Slaytlarda olmayan, ozellikle kendisinin JupyterNotebook’lara alternatif olarak VSCode ve IPython kullanarak yaptigi demo resmen gozumu acti. Bir haftadir VSCode‘a yeni gecmis biri olarak, ozellikle *exploratory analysis** kismini interakif olarak nasil yaparim derken, cok temiz bir alternatifim oldu. Bir daha Notebook kullanan…
“Pazar podcast” keyfinde bu hafta yine Data Skeptic’ten “Robust fit to Nature” baslikli, “beyin yakan” tarzda bir podcast dinledim. Konuk Princeton’dan noro-bilimci, fakat fazlasiyla yapay sinir aglariyla ilgili bir arastirmaci Uri Hasson.
Konusmada yapay sinir aglarinin milyonlarca parametre ile, eldeki veriye bir nevi “over-fit” olma durumunu, bilimdeki gibi eldeki problemi “anlamak” yerine, ortama karsi “act” etme ile acikliyor. Anlama amaciyla yola cikmasan da kararlar verip etrafindaki ortama mudehale etme imkanin olabiliyor. Bu perspektiften yapay sinir aglarinin “nasil calistigini” anlamanin aslinda o kadar kritik bir problem olmadigini dile getiriyor.
Bu perspektifi, biyolojik evrimin altinda “anlama” mekanizmasi olmadan, brute-force bir act etme sureci ile dogadaki islevsey yapilari olusturmasina benzetiyor. Bu cok enteresan bir benzetme. Ayrica soyledigi ilginc bir sey var; evrimsel surecte canlilar kosullara “overfit” etmis durumdalar, cunku doga sartlarini ufacik degistirdigimizde cok buyuk sonuclar cikiyor (ornegin okyanus ortalama sicakliklarindaki birkac derece degisim turlerin %80’inin ortadan kalkmasini tehtid ediyor.)
Beynin calisma mekanizmasini klasik psikoloji ve bilissel bilim perspektifinden gelenler, klasik “anlama” problemi olarak baktiklarindan, yapay sinir aglari yaklasiminin konu icin “irrelevant” oldugunu iddia ediyorlar. Hatta evrimsel sureclerin ortaya cikardigi karmasik yapilardan yola cikarak, beyine tipki zamaninda karmasikligi nedeniyle goze verildigi gibi ayri bir konum veriliyor diyor. Fakat beyin icin yapay sinir aglarindaki gibi milyonlarca parametreli bir “over-fitting” mekanizmasi isliyor olabilir. Tabii ki sadece bu degil ama boyle bir mekanizmanin isleyisinden “emergent” yapilar cikabilir mi acaba?
Olayin bu tarafindaki tartismalari epey ezoterik buluyordum on yargilarim sebebiyle. Bu sekilde holistik bir yaklasim gercekten fazlasiyla kafami acti diyebilirim.
“Pazar okumasi” olarak da birkac makaleye goz attim bugun.
Ilki Real Python’dan bir yazi: How to Use any() in Python. Python’da
iterable
objeler uzerinde calisan bir fonksiyon olan ve bircok seyi kolaylastiran bir fonksyionany()
. Mantiksalor
operasyonu ile cok guzel bir karsilastirilmasi verilmis yazida. Benim anladigim:Eger elimizdeki bir
iterable
uzeride dogrudan bir truth-check yapacaksak epey efektif, fakat icinde bir map fonksiyonu tum elemanlar uzerinde islem yapmamiz gereken bir ifade varsa,or
gibi “lazy-evaluation” yapmadan tum herbirine uygulayip gerekli iterable’i olusturacak, sonra evaluate edecek. bunu asmanin bir yolugenerator
expresion kullanmak:any((meets_criteria(applicant) for applicant in applicants))
`Ikincisi, Python’da bir
int
objesiniiterable
yapip, ornegin birfor
dongusunde sankirange(int)
gibi davranmasini saglamak icin (bunun iyi bir sey olup olmadigindan bagimsiz bir sekilde) CPython’un internal’ina dalip, gerekli degiskenleri gosteren epey aydinlatici bir yazi: Making Python Integers Iterable Python internal’lari her gecen gun daha da ilgimi cekmeye basliyor. Blog yazisinin yazan kisinin benzer yazilarinin da bunda etkisi buyuk.
Gunun videosu ise Two Minute Papers’dan “How Well Can an AI Learn Physics?” Bir akiskanin simulasyonu gibi fizigin en karmasik problemine yapay sinir aglariyla inanilmaz cozumler getirmisler, agzim acik izledim:
Gunun en ilgic tweet’i ise yumurta-tavuk problemine JS’in cozmus oldugu gercegi:
Mystery Solved! pic.twitter.com/bRGuhnvKKx
— Marko ⚡ Denic (@denicmarko) June 13, 2020