Eureqa

Buldum, buldum...

Eureqa, ilk olarak Cornell'in Yapay Zeka Laboratuvarı tarafından üretilen ve daha sonra Nutonian tarafından ticari olarak sunulmaya başlanan yapay zeka temelli bir modelleme motorudur. Yazılım, veri setlerini en basit biçiminde tanımlayan matematik denklemlerini saptamak için evrimsel aramayı kullanır.

1970'lerden beri şirketlerin veri bilimi yapmalarının başlıca yolu, veri bilimci ekiplerini işe almak ve onları tahmin ve istatistiksel modelleme yapmaları için R, Python, SAS, SQL gibi araçlarla donatmak olmuştur.

2007'de Cornell'de Hesaplamalı Biyoloji alanında doktora öğrencisi olan Michael Schmidt, insanların çözebileceği veri hacminin ve problem karmaşıklığının giderek arttığını ama veri bilimcilerinin sayısının bu ölçüde artmadığını gördü.

Schmidt ve danışmanı Hod Lipson, veri bilimindeki bu boşluğu doldurmak için daha çok insana gereksinim duymak yerine, makinelerin verilerden otomatik olarak anlamlar çıkarmaya yarayabileceğine inanarak ismini Arşimet'in ünlü evreka'sından alan Eureqa'yı keşfetti.

Eureqa, otomatik olarak tahmine dayalı ve analitik modeller oluşturan ve alan uzmanlarının bunlarla ilgili tekrarlamalar yapmalarını sağlayan, yapay zekaya dayalı bir sanal veri bilimcisidir. TechCrunch'da Eureqa, verilerden gelen cevapların keşfedilmesini ve açıklanmasını otomatikleştiren bir araç olarak yapay zeka alt alanı makine öğrenmesinin ilk örneklerinden biri olarak gösterilmiştir.

Programın çalışması, evrimsel arama olarak bilinen bir süreç aracılığıyla veriye rastgele denklemler uygulanarak/uydurularak çalışır. Denklemlerin çoğu yararlı bir şey vermez, ancak denklemlerden birkaçı diğerlerinden daha mantıklı olur ve bunlar, bir sonuca ulaşılıncaya kadar birkaç milyar yeni denklemin sonraki bir turunun temeli olarak kullanılır.

Eureqa, GNU/Linux, Windows ve macOS için sunuluyor. Satın alınabileceği gibi akademik amaçlarla kullanılacaksa lisansı ücretsiz olarak da edinilebilir.

Hesapladığım faktöriyeller makalene oldu mu

Eureqa'dan kısaca bahsettikten sonra benim bu yazıyı yazmama, sizinse onu okumanıza neden olan olaylar zincirine bakabiliriz.

Dün yerimlerimde yer alan iki binin üzerindeki girdiden biri olan Stirling Yaklaşımı hakkında biraz araştırma yaptım ve son derece etkilendim. Matematiğe karşı bir sevgim olsa da sanırım böyle bir yaklaşım keşfedemem hiçbir zaman.

Buna üzülmek yerine benim yerime bunu yapabilecek bir program geliştirebileceğimi düşündüm ve her zamanki gibi bunu, yani bir yaklaşım bulucuyu benden önce birinin yapıp yapmadığını araştırırken Eureqa ile karşılaştım.

Tüm bu yazılanlara bir bakıma faktöriyeller neden olduğuna göre yazıyı da onlar için Eureqa'da bir yaklaşım bulmaya çalışarak sonlandırayım. Yazının bundan sonrası eğitsel tadında olacak.

On adımda on iki adım

Takı Töreni (Damadın amcasından on parça veri seti)

İlk olarak LibreOffice Calc'da alt alta üç satıra 0, 1 ve 2 yazarak, sonra bunları seçtikten sonra seçimin altındaki küçük tutamacın altından sürükleyerek 0'dan 100'e kadar sayı oluşturdum. Bunu da Eureqa'nın veri giriş bölümünde birinci sütuna kopyaladım.

Hem programı çözmeye çalışırken hem de en iyi sonucu elde etmek için tahminler yaparken, 20, 50 ve 100'e kadar olan sayıların faktöriyelleriyle ilerlemeyi denedim. Şu an bu satırları yazarken 100'e kadar olan sayıların faktöriyelleriyle işlem yapıyorum.


İnternetten bir faktöriyel listesi aldım, bunu ilk önce Kate'e aktardım ve blok seçimi kipini kullanarak faktöriyel sonuçlarının başındaki gereksiz kısımlardan kurtuldum. Sonrasında da bu verileri de Eureqa'nın veri giriş bölümünde ikinci sütuna kopyaladım. Kate yerine terminal araçları veya yine LibreOffice Calc da kullanılabilirdi.


Pisti düzenleme

Veri Hazırlama bölümündeki seçenekleri değiştirerek de epey deneme yaptım. Şu anki denememde buradaki hiçbir seçeneği etkinleştirmeden sadece pürüzsüzleştirmeyi etkinleştirerek ilerledim. Seçeneklerin ne olduğuna kısaca bakmak gerekirse:

Pürüzsüzleştirme hem arama hızını hem de doğru çözüm bulma olasılığını büyük ölçüde artırabilir. Bununla birlikte, yalnızca verilerin kaynağının bir şekilde sürekli olduğuna inanmak için bir sebebiniz varsa verilerinizi pürüzsüzleştirmelisiniz.


Eksik değerlerle çalışmak için de çeşitli seçenekler bulunuyor. Bir satır, bir veya daha çok değişken için değer içeriyor ancak sütunda bir veya daha çok değişken için boş bir hücre varsa program durumu çeşitli şekillerde ele alabiliyor:
  • Satırın tamamını yoksay
  • Önceki satırdaki değeri kopyala
  • En yakın satırdaki değeri kopyala
  • Satırlar arasında enterpolasyon yap (bir önceki satırdaki değerin ve sonraki satırdaki değerin ortalamasını ekler)
  • Diğer değişkenleri kullanarak tahmin et (Doğrusal regresyon, değişkenin diğer değişkenler açısından modellenmesi için kullanılır. Eksik değerler, bu modele dayalı olarak doldurulur. Örneğin, y'nin eksik değerlere sahip olduğu x ve y değişkenli bir veri kümesinde y, a * x + b şeklinde modellenecektir ve eksik bir değere sahip her satırda eksik değer, o satıra ait değerler kullanılarak bu ifadenin sonucuyla doldurulur.)
  • Ortalama değere ayarla (değişkenin tüm değerlerinin ortalamasını ekler)
  • Medyan değerine ayarla (değişkenin tüm değerlerinin medyan değerini ekler)
  • Sıfıra ayarla
Değişkenleri normalleştirmek (sayısal değerleri yeniden ölçeklemek) tamamen isteğe bağlı olsa da Eureqa'nın performansını büyük ölçüde artırabilir. Verilerinizi kendi ifadenizi girerek önceden normalleştirebilirsiniz, bununla birlikte Eureqa'da birkaç yaygın normalleştirme seçeneği yerleşik olarak bulunmaktadır.

Eureqa, verilerinizdeki tüm değişkenlerin 1 ila 100 arasında küçük ve orta büyüklükte olması durumunda en iyi sonucu verir. Örneğin, bir milyondan fazla değişkene sahipseniz, değerleri daha büyük birimlerle yeniden ölçeklendirmeniz daha iyi olur.

Veriler ayrıca aykırılıklarına göre de denetlenebiliyor. Geri kalan değerlerle büyük ölçüde orantısız olan herhangi bir değer varsa veri setinizdeki o değerin bulunduğu satırı olduğu gibi kaldırmayı veya o satıra çok düşük bir ağırlık vermeyi seçebilirsiniz.

İnce ararım ince (hişt mori yele lelli yari nina nom)

Arama yapmak için ilk önce hedef ifadenin belirlenmesi gerekiyor. Hedef ifade, Eureqa'ya hangi modelin arandığını bildirmektedir. Öntanımlı olarak, hedef ifade, y'nin (veya y yoksa verilerinizin son sütununda olan herhangi bir değişkenin) diğer tüm değişkenlerin bir fonksiyonu olarak modellendiği bir denklemdir.

Modellemek istediğiniz ilişki türünü belirtmek için formül düzenleyebilirsiniz. Hedef ifadeyi düzenlemek için üzerine tıklayabilir, sonra istenen değişiklikleri yapabilirsiniz. Örneğin, z değişkenini x ve y'nin bir fonksiyonu olarak modellemek istiyorsanız, z = f(x, y) ifadesini girin. y'yi yok saymak isterseniz, sadece z = f(x) değerini girebilirsiniz. Denklem belirleme işini Eureqa'ya bırakmak isterseniz özel işlev f(...) ifadesini kullanabilirsiniz. Eureqa, veri setinizdeki değişkenleri kullanarak parantez içine yazılacak formülü arar.

Daha karmaşık ifadeler de mümkündür ve diferansiyel denklemlerin modellenmesi, polinom denklemleri ve ikili sınıflandırma gibi karmaşık ilişkileri aramak için size güç sağlar. Aşağıda, gelişmiş hedef ifadelerin bazı örnekleri verilmiştir. Örnekler, Eureqa elektronik tablosuna girilen verilerin w, x, y ve z adlı dört değişkene sahip olduğunu varsaymaktadır.
  • y değişkenini, x değişkeninin bir fonksiyonu olarak modelleme: y = f(x)
  • z değişkenini, x ve y değişkenlerinin bir fonksiyonu olarak modelleme: z = f(x, y)
  • z değişkenini, y ve sin(x) ifadesinin bir fonksiyonu olarak modelleme: z = f(y, sin(x))
  • Keyfi ifadeli hedef ifade modelleme: sin(z + 3) = 100 * w + x * f(y, y / (x + 1))
Aşağıdaki ekran görüntüsü farklı bir şey söylese de şu an devam eden testim için y = f(x) ifadesini kullandım. Aşağıda çekmeye çalıştığım kopya, sabitlerden anlaşılacaktır :)


Eureqa, iyi çözümler ararken birkaç trilyon farklı yolu inşa etmek için şu an sayısı kırk altı olan ve giderek artan yapı taşları kullanır. Bu yapı taşları arasında toplama, çıkarma, modül, taban, faktöriyel, Gauss, If-Then-Else gibi işlemler bulunur. Karışıma dahil etmek istediğiniz yapı taşlarının yanındaki kutucukları işaretlemeniz yeterli olacaktır.

Peki hangi yapı taşlarını seçmelisiniz? Uzman bilgisi burada size yardımcı olacaktır. Alanınızda hangi yapı taşları görülme eğilimindedir? Sizinkiyle ilgili sorunların çözümünde hangileri bulunur? Bunların hangileri, verilerinizin grafiklerinden çıkarılabilir/kullanılabilir/elde edilebilir? Sezgilerinize dayanarak bunlardan hangileri size iyi aday gibi geliyor?

Akılda tutulması gereken ödünleşim şudur: yapı taşlarının sayısının sınırlandırılması aramanızı hızlandıracak ve Eureqa'nın kesin bir çözüm bulma ihtimalini artıracaktır; öte yandan, çok fazla yapı taşını devre dışı bırakmak, gerekli bir işlem devre dışı bırakıldıysa kesin bir çözüm bulunmasını engelleyebilir.

O zaman dans

Bu bölüm arama kısmını anlatacak ve elde edilen ifadeleri gösterecek şekilde güncellenecek. Aramanın yarına biteceğini bilsem bekleyeceğim ama bilemiyorum işte.


Sonuç

"Bu projenin amacı, herkesi matematiksel bir dehaya dönüştürmektir. Verilerinizi uygulamaya verin, sizin için tüm detayları bulup bütün işi o yapsın. Siz de araştırmalarınızı hızlandırmak, yeni keşifler ve yeni atılımlar yapmak için doğru soruları bulmanıza yardımcı olacak bir model ve verileriniz hakkında daha derin bir anlayış elde edin."

Belki geliştiricisinin söylediği ve yukarıda yaklaşık bir çevirisini yapmaya çalıştığım gibi bir matematik dahisi olmanıza yardımcı olamasa bile matematikle birlikte eğlenmek için güzel bir araç. Tabii böyle bir uygulama geliştirmek mi yoksa onu kullanmak mı daha eğlenceli tartışılır.

Kaynaklar ve Ek Okumalar


Yorumlar

Bu blogdaki popüler yayınlar

Diğer Dillerde Hoşçakal

Mızıka Tabları Nasıl Okunur

conio.h