Python, Veri Bilimi / 2 Mayıs 2021 / Miraç ÖZTÜRK
Merhaba, iyi günler.
Bugün; çeşitli veri kümeleri üzerinde özel işlemler ile farklı çözümlemeler için yapılandırılmış gözetimli öğrenme algoritmalarından, doğada gözlemlenen evrimsel sürece benzer bir şekilde çalışan-gelişen arama ve eniyileme yöntemlerinden esinlenerek geliştirilmiş Genetik Algoritmalar (Genetic Algorithm) üzerine çeşitli bilgi ve çözümlemeler aktarmaya çalışacağım.
Genel konu özetinin bulunduğu Python Veri Analizi yazısına link üzerinden ulaşabilirsiniz.
Makalede Neler Var ?
Genetik Algoritmalar Nedir ?
Günümüzde gelişen teknolojik imkanlar-çözümler ve sorun çözme sorunsalı üzerinde duran insan beyni; kendisini birçok derin problem kümeleri içerisinde bulmaktadır.
Gün geçtikçe karşılaşılan problemler ve sorunlar geçmişe nazaran daha komplike, bir o kadar da karmaşık olmaktadır.
Genetik algoritmalar, doğada gözlemlenen evrimsel sürece benzer bir şekilde çalışan arama ve eniyileme yöntemi olarak ifade edilmektedir.
Sezgisel bir algoritma türüdür, yapı taşında sezgi vardır.
Genetik algoritmaların temel ilkeleri ilk kez Michigan Üniversitesi‘nde John Holland tarafından atılmıştır.
John Holland; 1975 yılında yaptığı çalışmaları Adaptation in Natural and Artificial Systems adlı kitabında bir araya getirmiştir.Genetik algoritmaları ilk olarak evrim yasaları içinde eniyileme problemleri için kullanmıştır.
Algoritma bir bilgisayar üzerinde kullanılırken (uygulama akışı içerisinde) takip ettiği ana prensipleri evrimsel süreç üzerinden alarak birebir modellemeler oluşturur.
(Biyolojik adımların mantığı doğrultusunda-En İyileme Prensibi)
Genel hedefi-amacı ise; bir probleme yönelik çözümler içerisinden en uygun olanını
(En faydalısını – En iyisini) bulmaya çalışmaktır.
Bunu ise aşağıdaki temel döngüyü baz alarak gerçekleştirmektedir;
- Başlangıç Popülasyonu Oluştur: Genetik algoritma akışına yönelik gerekli popülasyon* kümesinin oluşturulmasını ifade eder.
*Popülasyon: Her türlü canlı varlığın sayısal yoğunluk ve dağılımıdır. - Uygunluk Değerlerini Hesapla: Popülasyon kümesindeki değerlere yönelik uygunluk (Amaç Fonksiyonu*) değerleri hesaplanmasını ifade eder.
*Amaç Fonksiyonu: Karar değişkenlerinden ve bu değişkenlerin parametrelerinden oluşan en ideal çözümün (Maksimum – Minimum) elde edilmesini sağlayan doğrusal fonksiyondur. - Maksimum İterasyon Sayısı: Gerçekleştirilen maksimum iterasyon* sayısının elde edilip edilmediğinin sorgulanmasını ifade etmektedir.
*İterasyon: Matematiksel olarak fonksiyon yineleme işlem işlemidir.
(Fonksiyonu yineleyerek uygulamak.) - Optimal Çözüm: Karar değişkenlerinin mevcut kısıtlamalar altında amaç fonksiyonunda optimum düzeye ulaşması ile almış olduğu değerler olarak ifade edilmektedir.
Optimal çözüme ait amaç fonksiyonunda elde edilmiş değer ise Optimal Değer olarak adlandırılır. - Seleksiyon: Maksimum iterasyon sayısına ulaşmak için yeniden hesaplama yapısının düzenlenmesi olarak ifade edilmektedir.
- Çaprazlama: Maksimum iterasyon sayısına ulaşmak için; veri havuzunun potansiyelini keşfedilmesi adına çaprazlama operatörleri ile değerler üzerinde gerçekleşen işlemleri ifade etmektedir.
- Mutasyon: Çaprazlama işlemleri ile mevcut veri havuzunun potansiyellerini araştırmak üzere gerçekleşen işlemleri ifade etmektedir.
Genetik Algoritma Uygulama Örneği
Genetik Algoritma modeli örneği adına herhangi bir hazır veri setini kullanmaktan ziyade, doğasına uygun bir yapıda verilerini oluşturduğumuz örneğimizi kullanacağız.
Temel amacımız insana (Doğal herhangi bir canlı) ait biyolojik tüm takip mekanizmasına dokunarak uyarlamalara yönelik fikirlere yer vermek.
Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım.
*eleman=birey, insan olarak nitelendirilebilir.
1-Demomuz/Örneğimiz için gerekli olan kütüphaneleri çalışmamıza dahil edelim;
>>> import numpy as np
2-Rastegele değerlerden oluşan (0-1) bir *eleman oluşturalım;
>>> def İNSAN(n):
return [np.random.choice([0,1]) for i in range(n)]
>>> def İNSAN1(n):
return [np.random.choice([0,1]) for i in range(n)]
Genetik yapı baz alındığından, *elemanı temsil eden Genotip oluşturulur.
-*-
Kurgusal olarak eleman/temsil yapısı değişken olarak düşünülüp veri kümenizdeki analizlere uyarlanacak tüm *elemanlar baz alınabilir.
(Müşteri, Personel, … etik kurallar dahilinde.)
3-*Eleman üzerindeki uyum yapısını analiz edelim;
>>> def UYUM(n):
return np.mean(İNSAN_)
Elamanlarınız; kurmuş olduğunuz eleman yapısındaki niteliklere ait sayıca öz değerlerin üst sınır değeri kadar uyum sağlamaktadır/göstermektedir.
Uyum ile; elemanların ilerleyen süreçlerdeki evrimsel adaptasyon, mutasyon ve doğal seçilime ait toplumsal zemini hazırlanmaktadır. (Güçlülerin ortaya çıkması vb.)
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında belirlenmiş kurallar dahilinde müşterilerin segmentasyonlarının oluşması baz alınabilir.
(En Değerli-Değerli-Değersiz… vb.)
4-Çeşitli zaman dilimlerindeki belirli/belirsiz etkilerden dolayı *elemanların yapısındaki gerçekleşebilecek değişiklikleri kurgulayalım (Temel Seviye);
>>> def MUTASYON(İNSAN_, p):
if np.random.rand() < p:
m = np.random.choice(len(İNSAN_))
if( İNSAN_[m] == 0):
İNSAN_[m] = 1
else:
İNSAN_[m] = 0
*Elemanların çeşitli zaman dilimlerinde maruz kaldıkları/kalabilecekleri belirli/belirsiz etkilerden dolayı genotip yapısı değişebilir.
(Dizilimdeki 0-1 yapısı değişebilir.)
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin çeşitli zaman dilimlerindeki bir anlık işlemleri ile segmentasyonlarının değişmesi baz alınabilir.
5-Toplumsal değişiklikler sonrası (Mutasyon), toplumdaki uyumsal değerlerin değişiminin olasılıklarını hesaplayalım;
>>> def OLASILIK(TOPLUM_, UYUM_ = UYUM, elitist = True):
UYUMLAR_ = np.array([UYUM_(TOPLUM_[i]) for i in range(len(TOPLUM_))])
if elitist:
UYUMLAR_ = np.exp(UYUMLAR_ / UYUMLAR_.mean())
GENELOLASILIK_ = UYUMLAR_ / UYUMLAR_.sum()
return GENELOLASILIK_
*Elemanlarınızın çeşitli zaman dilimlerinde maruz kaldıkları/kalabilecekleri belirli/belirsiz etkilerden dolayı genotip yapısı değiştikten sonra toplumsal uyum değerleri de değişmektedir.
(Dizilimdeki 0-1 yapısı sonrası toplumsal uyum olasılıkları değişmektedir.)
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin çeşitli zaman dilimlerindeki bir anlık işlemleri ile segmentasyonlarının değişmesine yönelik sektörel yerlerinin/konumlarının değişmesi ihtimalleri/olsılıkları baz alınabilir.
6-Rastegele bir parametre oluşturularak ‘p’; toplum içerisinden ‘p’ parametresine bağlı olarak *elemanların rastgele seçilmesi durumlarını kurgulayalım;
(‘p’ değerleri yüksek olana bireylerin seçimi olasılıklar dahilinde daha baskın olacaktır.
” ‘0-1’ yoğunluğu yüksek olan *elemanların.”)
>>> def SEÇİM(GENELOLASILIK_):
SEÇİM = np.random.choice(len(GENELOLASILIK_), 2, replace= False, p=GENELOLASILIK_)
return SEÇİM
Elemanlarınızın toplumsal rastgele seçimleri; parametrik değerlere bağlı olup genel olasılık değerini doğrudan etkilemektedir.
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin segmentasyonlarının öz nitelik farklılıkları baz alınabilir.
(Çalışma/İşlem ömürleri-yoğunlukları vb.)
7-Seçimlerden çıkan her başarılı iki *elemanın rastgele çaprazlanarak yeni bir *eleman oluşturulmasını sürecini kurgulayalım;
>>> def ÇAPRAZLAMA(TOPLUM_, SEÇİM):
İNSAN0 = TOPLUM_[SEÇİM[0]]
İNSAN1 = TOPLUM_[SEÇİM[1]]
n = len(TOPLUM_[SEÇİM[0]])//2
return np.hstack((İNSAN0 [:n],İNSAN1[n:]))
Elemanlarınızın rastgele seçimleri ile çaprazlanması sonucu genotip (öz nitelikleri) yapısı farklı bireyler oluşmaktadır.
(İhtimal dahilinde aynı bireylerde oluşabilir.)
-*-
8-‘p’ parametresine bağlı baskın bireylerin seçilip, çaprazlamalar sonucu yeni *elemanların oluşması ile toplum yapısı ve genel genotip havuzu değişir.
Bu yeni birey oluşum süreci devam ettikçe ‘p’ parametresine bağlı baskın olmayan bireylerin yoğunluğu toplum içerisinde azalacaktır.
(Burada ilgili *elemanları toplumumuzdan çıkartalım.)
>>> def YENİ_TOPLUM(TOPLUM_, OLASILIKLAR_, MUTASYON = MUTASYON, p = 0.05):
k = len(TOPLUM_)//2
ÇEKİNGEN = OLASILIKLAR_.argsort()[:k] # ÇEKİNGEN_ – ETKİSİZ_
for i in range(k):
s = SEÇİM(OLASILIKLAR_)
YENİ_İNSAN_ = ÇAPRAZLAMA(TOPLUM_, s)
MUTASYON(YENİ_İNSAN_, p)
TOPLUM_[ÇEKİNGEN_[i]]= YENİ_İNSAN_
return TOPLUM_
Elemanlarınızın rastgele seçimleri ile çaprazlanması sonucu; genotip (öz nitelikleri) yapısı farklı bireyler oluşup toplum yapısını değiştirmektedir.
Toplumun genotip havuzu zamana bağlı olarak farklılaşmaktadır.
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin öz niteliklerinin farklılaşarak yeni gruplamalar ortaya çıkması baz alınabilir.
(Çalışma/İşlem ömürleri-yoğunlukları vb. parametrelerin farklılaşıp yeni segmentasyonların oluşması değerlendirilebilir.)
9-Toplumdaki en iyi bireyler baz alınarak analiz gerçekleştirilir, sonrasında bu bireyler seçilerek yeni toplum bir üst seviyeye çıkartılır.
(İlgili olmayan *elemanlar toplumdan çıkartılabilir, işlem mevcut kurguya ve yapıya bağlıdır.)
>>> def EN_İYİ(TOPLUM_, OLASILIKLAR_):
ENİYİ_ = OLASILIKLAR_.argsort()[-1]
return TOPLUM_[ENİYİ_]
En iyi *elemanlar seçilerek toplum üst seviyeye çıkartılır, toplumsal genotip havuzu tekrardan yenilenir/yenilenebilir.
-*-
Yeni ortaya çıkan müşteri segmentasyonları sonucu, en alt segmentte olan müşterilerin göz ardı edilmeye başlanıp verim adına değerlilerin ön plana çıkartılması baz alınabilir.
(Değer ayrışımı vb.)
10-Rastegele değerlerden (Genotip) oluşan 10 *eleman oluşturalım ve toplumsal uyumunu değerlendirelim;
>>> N = 10
n = 10
TOPLUM_ = np.array([İNSAN1(n) for i in range(N)])
OLASILIKLAR_ = OLASILIK(TOPLUM_)
if N < 20:
print(TOPLUM_)
print(OLASILIKLAR_)
print(EN_İYİ(TOPLUM_, OLASILIKLAR_))
İlgili genetik algoritmamız üzerindeki rastgele değerlere sahip bireyler oluşturulup analiz edildiğinde toplumsal uyuma sahip en iyi birey ve ideal birey ihtimallerine ulaşırız.
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin segmentasyonlarının farklılaşması, süreçlere adaptasyonları ve farklılaşan koşullar karşısındaki öz nitelik değerlerindeki değişimleri baz alınıp, örnek olarak gösterilebilir.
11-Rastegele değerlerden oluşan bir toplumu olasılıklar dahilinde güncel olarak yeniden analiz edelim ve oluşan toplumu ideal uyum üzerinde değerlendirelim;
>>> for i in range(1000):
TOPLUM_ = YENİ_TOPLUM(TOPLUM_, OLASILIKLAR_)
OLASILIKLAR_ = OLASILIK(TOPLUM_)
if N < 20:
print(TOPLUM_)
print(OLASILIKLAR_)
print(EN_İYİ(TOPLUM_, OLASILIKLAR_))
Tüm *elemanları ele alarak, analiz edip son olarak değerlendirdikten sonra topluma ait olasılıklar ve en iyi birey analizi gerçekleştirilebilir.
-*-
Kurgusal olarak; kurumsal dünyadaki şirket bazında bulunan müşterilerin genel olarak analiz edilmesi örnek olarak gösterilebilir.
Genetik Algoritma performansını etkileyen faktörler;
- Toplum/Popülasyon Büyüklüğü,
- *Elemanların Yapısal Kompleksliği,
- Mutasyon Sayısı ve Oranı,
- Çaprazlamadaki Nokta Sayısı,
- Mutasyon ve Çaprazlama Sonucu *Elemanların Değerlendirilme Yöntemi,
- Kod Sistematiğinin Kurgusu,
- Sonuç Değerlendirmeleri
Genetik Algoritmalar temel itibari ile; canlılardaki evrimden etkilenerek, gerçekleşen bu genetik evrim ve değişim sürecini bilgisayar ortamına aktararak genetik süreçler sonunda üstün yeni birey ve toplumların elde edilebileceğini gösteren çalışmalar olarak nitelendirilmektedir.
Rekabetin, değişen koşulların, davranışsal eğilimlerin ve dinamik gruplaşmanın olduğu alanlarda sıkça başvurulmaktadır.
Genetik Algoritmaların genel olarak kullanıldığı alanlara örnek olarak ise;
Günlük Hayatta Genetik Algoritma Uygulama Alanları
- Bankacılık Sektörü:
-Finansal Eğilim Analizleri (Davranışsal Eğilimler),
-Müşteri Değerlendirmeleri (Hareket-Davranış ve Gelişim Analizi). - Yazılım Sektörü (İş Analitiği/Analizi – İş Geliştirme):
-Müşteri Davranışı Modellemesi,
-Müşteri Bölümlemesi (Segmentasyonu),
-Optimizasyon,
-Otomatik Programlama ve Bilgi Sistemleri,
-Mekanik Öğrenme*.
*Canlılara ait öğrenme yeteneğinin bilgisayarlar üzerinde taklit edilmesi olarak ifadelendirilmektedir.(Makine Öğrenmesi) - Spesifik Problemler:
-Sistem Güvenilirliği Problemi (Farklılaşan Tepkilere Karşı Gelişim),
-Rota (Yön) Problemi,
-Çizelgeleme Problemi*,
*Çizelgeleme Problemi; belli bir performans ölçütünü eniyileyecek optimum iş akış sırasını (işlerin yapılma sırasını) belirlemek olarak ifadelendirilmektedir.
-Montaj Hattı Dengeleme Problemi,
-Arazi/Tesis Yerleşim Problemi,
–Gezgin Satıcı Problemi*.
*Gezgin Satıcı Problemi; yöneylem araştırması ve teorik bilgisayar bilimi alanlarında incelenen bir kombinatorik optimizasyon problemi olarak ifadelendirilmektedir.
-Atama Problemleri (İnsan Kaynakları vb. Değerlendirme Analizleri)
Avantaj ve Dezavantaj
Genetik Algoritmalar avantajlar olarak;
1-Bir probleme ait olası en iyi çözümü bulmayı hedeflemektedir, (İdeal çözüm arayışı)
2-Popülasyon değişimleri ile en iyi çözüme yönelik arayış içerisindedir,
3-Ağırlıklı olarak çok çözümlü problemler için kullanılmaktadır,
4-Çözüm uzayını eş zamanlı inceleyerek yerel olarak en iyi çözümlere takılmadan daha iyisini arama eğilimindedir
dile getirilebilir.
Genetik Algoritmalar dezavantajlar olarak;
1-Çözüm uzayının sadece bir kısmını incelemektedirler ve kısmi çözüm uzayında çalışsa da incelemeler zaman almaktadır,
2-Probleme yönelik faktörlerin çok olduğu durumlarda kullanılmaktadır, analizler zaman almaktadır,
3-Evrimsel süreç adım adım ve detaylı ilerlediği için, ilerleyen süreç zaman almaktadır,
4-Salt olasılık bazlı çalıştıkları için ne kadar iyi çalışacakları önceden belirlenememektedir
dile getirilebilir.
Bu bölümde genel manada Sınıflandırma metoduna ait Genetik Algoritmalar yöntemine değinmeye çalıştım.
Gelecek yazımda K-En Yakın Komşu (K-Nearest Neighbor) ele almaya çalışacağım.
İyi günler, iyi çalışmalar…