Python ile Sınıflandırma Analizleri — Yapay Sinir Ağları
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, insan beyninin bilgi işleme tekniğinden esinlenerek geliştirilmiş Yapay Sinir Ağları (Artificial Neural Networks) ü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.
Yapay Sinir Ağları Nedir ?
Bilimsel çalışmalar ışığında gün geçtikçe gelişen teknolojik çözümler insan hayatında çok çeşitli kolaylıklar sağlamaktadır.
1980’li yıllarda insanların gerçekleştirdiği bazı faaliyetleri-eylemleri yapabilen ya da yapabilecek makinaların olabileceği fikri ortaya atılmıştır.
İlerleyen zaman dilimlerinde ise bu makinaların karar mekanizmaları ve karar algılarını oluşturan yapıların modelleri insan baz alınarak oluşturulmaya başlandı.
İlk olarak ortaya atılan Yapay Sinir Ağı ifadesi-modeli tarihsel olarak;
- 1943 yılında, bir sinir hekimi olan Warren McCulloch ile bir matematikçi olan Walter Pitts tarafından bulunmuştur.
McCulloch ve Pitts, insan beyninin hesaplama yeteneği ve tasarımından esinlenerek, elektrik devreleriyle ilkel bir seviyede sinir ağı modellemişlerdir. - 1954 yılında ise B.G. Farley ve Wesley Allison Clark tarafından bir ağ içerisinde uyarılara tepki veren, uyarılara adapte olabilen temel düzeyde yapay sinir ağı modeli oluşturulmuştur.
- 1960 yılı ise ilk Nöral Bilgisayar’ın (Neural Computer) ortaya çıkışı gerçekleşmiştir.
- 1963 yılında basit modellerin ilk eksiklikleri fark edilmiş, ancak başarılı sonuçların alınması 1970 ve 1980’lerde termodinamikteki teorik yapıların doğrusal olmayan ağların geliştirilmesinde kullanılmasına kadar gecikmiştir.
- 1985 yapay sinir ağlarının oldukça tanındığı, yoğun araştırmaların başladığı yıl olmuştur.
köşe taşlarına sahiptir.
Yapay Sinir Ağı (YSA — Artficial Neural Networks / ANN); insan beyninin bilgi işleme tekniğinden esinlenerek geliştirilmiş bir bilgi işlem teknolojisidir.
İnsan beyninin özelliklerinden olan öğrenme yolu ile yeni bilgiler türetebilme, yeni bilgiler oluşturabilme ve keşfedebilme gibi yetenekleri, herhangi bir yardım almadan otomatik olarak gerçekleştirebilmek amacı ile geliştirilmiştir.
Yapay sinir ağlarının model esin kaynağı insan beyninde bulunan Nöron yapıları ve faaliyetleri olarak ifade edilmektedir.
Görselleştirerek ifade edecek olursak;
A — Nöron (Sinir Hücresi): Sinir sisteminin en temel fonksiyonel birimi olarak ifade edilir.
- Dentrit: Nöronda, diğer nörondan alınan elektrokimyasal uyartının Somaya ( hücre gövdesine) iletilmesini sağlayan, dal benzeri yapılar olarak ifade edilmektedir.
- Hücre Gövdesi: Hücresel faaliyetlerin gerçekleştirildiği merkezi birimi olarak ifade edilmektedir.
- Akson: Nöronların birincil uyarı iletim hattı olarak ifade edilmektedir.
- Terminal Akson: Nöron üzerindeki elektriksel olarak iletilen uyarının sonlanıp, kimyasal uyarıya dönüşerek diğer sinir hücresine aktarımın gerçekleştiği alan olarak ifade edilmektedir.
B — Fonksiyon f(x): Mantıksal olarak; girdi değerleri (x1, x2, . . . , xn) alan ve bunların sonucunda bir çıktı oluşturan (yi) işlem türüdür.
Matematiksel olarak ise; A ve B boş olmayan iki küme olsun. A’nın her elemanı B’de yalnız bir elemanla eşleyen f bağıntısına A dan B ye bir fonksiyon denir.
f: A→B ya da A f B biçiminde gösterilir.
C — Sinaps: Nöronların diğer nöronlara ya da nöron olmayan hücrelere mesaj iletmesine olanak tanıyan özelleşmiş bağlantı noktaları olarak ifade edilmektedir.
D — Yapay Sinir Ağı Modeli: Belirli girdi değerleri alarak bir çıktı oluşturan, nöronların işleme ve faaliyet yapısı baz alınarak oluşturulmuş basit bir yapay sinir ağı modeli.
Nöronlar (Sinir Hücreleri) üzerinden baz alınan ve Yapay Sinir Ağı üzerine modellenen işlevsel yapılar aşağıdaki şekilde birbirine karşılık geldiği ifade edilmektedir (fikren);
Nöron — Sinir Hücresi
- Nöron
- Dentrit
- Hücre Gövdesi
- Akson
- Sinaps
- Miyelin Kılıf
Yapay Sinir Ağı
- Genel İşlemci Elemanları
- İşlem Toplama Fonksiyonu
- Transfer İşlemleri Fonksiyonu
- Yapay Nöron İşlem Çıkışı Yapısı
- Ağırlık* Değerleri
- Kısıtlayıcı işlemler (Hızlı Sonuç Adına)
*Ağırlık: Yapay Sinir Ağı Hücresi üzerine gelen bilginin önem değerini ve üzerindeki etkisini belirten ifade.
Yapay sinir ağları genel işlem-işleyiş adımları olarak;
- İleti Alımı — Parametre Alımı (Receiving Message)
- İleti Analizi — Parametrelerin İşlenmesi ve Analizi (Message Analysis)
- Mesaj Aktarımı — Analizin Sonuçlanması ve Çıktı Değerleri (Message Transmit-Transfer)
işlem akışı gerçekleştirmektedir.
Yapay Sinir Ağları;
- Tek Katmanlı Yapay Sinir Ağları,
- Çok Katmanlı Yapay Sinir Ağları
olarak ikiye ayrılmaktadır.
Tek Katmanlı Yapay Sinir Ağları
Sadece girdi ve çıktılardan değerlerinden oluşan sinir ağı yapıları Tek Katmanlı Yapay Sinir Ağları olarak ifade edilmektedir.
Temsili olarak;
Doğrusal Sınıflandırıcı (Linear Classifier) yapıda kullanılan tek katmanlı algılayıcı yapay sinir ağlarında, çıkış fonksiyonu ikili (Binary) yapıda değer üreten fonksiyon olarak yer almaktadır.
Çıkış değerleri kullanılan Nöron modeline (Perceptron*, Adaline**) bağlı olarak {1, 0} veya {-1, 1} değerlerini almaktadır.
*Perceptron Modeli
Perceptron; algılayıcı ikili sınıflandırıcıların denetimli öğrenimi için geliştirilmiş bir algoritmadır. İkili Sınıflandırıcı; bir sayı vektörü ile temsil edilen bir girdinin belirli bir sınıfa ait olup olmadığına karar verebilen bir işlevdir.
Algılayıcı algoritması 1958’de Cornell Havacılık Laboratuvarı‘nda Frank Rosenblatt tarafından icat edildi
**Adeline Modeli
Adaline; erken tek katmanlı bir yapay sinir ağı ve bu ağı uygulayan fiziksel cihazın adıdır.Ağ memistor kullanmaktadır.
1960 yılında Profesör Bernard Widrow ve lisansüstü öğrencisi Ted Hoff tarafından Stanford Üniversitesi’nde geliştirilmiştir. McCulloch-Pitts nöronuna dayanır.
Çok Katmanlı Yapay Sinir Ağları
Birden fazla nöron ve katmandan oluşan yapay sinir ağları Çok Katmanlı Yapay Sinir Ağları olarak ifade edilmektedir.
Temsili olarak;
Çok Katmanlı Yapay Sinir Ağları öğrenmesi, En Küçük Kareler Kuramına dayalı genelleştirilmiş bir model olan Genelleştirilmiş Delta Kuralı/Modeli üzerinde gerçekleştirilmektedir.
Genelleştirilmiş Delta Kuralı ikiye ayrılmaktadır;
- İleriye Doğru Hesaplama — İleri Beslemeli Ağlar (Feed Forward)
- Geriye Doğru Hesaplama — Geri Beslemeli Ağlar (Back Propogation)
İleri Doğru Hesaplama — İleri Beslemeli Ağlar (Feed Forward)
Tek yönlü sinyal akışının gerçekleştiği, gelen verilerin-sinyallerin Girdi ve Çıktı tabakası üzerinde işlenip sonrasında çıkışa aktarıldığı yapay sinir ağı modelidir.
Geriye Doğru Hesaplama — Geri Beslemeli Ağlar (Back Propogation)
Geri beslemeli sinir ağı modeli; çıkış ve ara katlardaki çıkışların, giriş birimlerine ya da önceki ara katmanlara geri beslendiği bir ağ yapısıdır. (Çift yönlüdür.)
Özet olarak Yapay Sinir Ağı modelini genelleyerek temsili olarak görselleştirecek olursak;
(İleri Yönlü Hesaplamalı — İleri Yönlü Beslemeli)
şeklindedir.
Yapay Sinir Ağı Örneği
Yapay Sinir Ağı modeli örneği adına; önceki Pyhton model analizimize yönelik örnek uygulamamızda kullandığımız Iris Veri Seti‘ni bu uygulama örneğimizde de kullanacağız.
İlgili veri setine ait csv. uzantılı dosyasına buradan ulaşabilirsiniz.
Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım.
1-Gerçekleştireceğimiz analizler için kullanacağımız kütüphaneleri sırası ile projemize dahil edelim; (Pandas)
>>> import pandas as pan
2-Veri kümemizi web üzerinden işleme alanımıza dahil edelim;
# Veri Kümesi Konumu
>>> url = “https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data”
3-Veri kümemiz üzerinde alanları adlandırıp, ilgili adlandırmaları ilgili sütunlara atayalım;
# Veri Kümesine ait Sütün Adları Ataması
>>> names = [‘sepal-length’, ‘sepal-width’, ‘petal-length’, ‘petal-width’, ‘Class’]
>>> irisdata = pan.read_csv(url, names=names)
4-Iris veri kümemizin genel önizlemesini gerçekleştirelim ;
# Iris Veri Setini Görüntüleyelim (Onizleme)
>>> irisdata.head()
5-Çiçeklere ait ilk dört parametreyi X değişkenimize atayalım;
# Ciceklere Ait Değişken olan İlk Dört Parametreyi X Değişkenine Atayalım
>>> X = irisdata.iloc[:, 0:4]
6-X parametremize atanan değerlerin genel ön izlemesini gerçekleştirelim;
# X Parametresine Atanan Değerleri Goruntuleyelim (Onizleme)
>>> X.head()
7-Sınıflara ait sütunu, y değişkenine atayalım;
# Siniflara Ait Sütunu y Değişkenine Atayalım
>>> y = irisdata.select_dtypes(include=[object])
8-y parametremize atanan değerlerin genel ön izlemesini gerçekleştirelim;
# y Parametresine Atanan Değerleri Goruntuleyelim (Onizleme)
>>> y.head()
9-y parametremize atanan değerlerin tekil-benzersiz ön izlemesini gerçekleştirelim;
# y Parametremize Atanan Değerleri Tekil-Benzersiz Olarak Goruntuleyelim (Onizleme)
>>> y.Class.unique()
10-y parametremize atanan ifadesel-metinsel değerleri sayısal değerlere dönüştürelim;
# Scikit-Learn Kütüphanesini Kullanarak y Parametresine ait Değerleri
# Sayisal Değerlere Dönüştürelim
>>> from sklearn import preprocessing
>>> labEnc = preprocessing.LabelEncoder()
>>> y = y.apply(labEnc.fit_transform)
11-y parametremize atanan ifadesel-metinsel değerlerin dönüşüm sonrası tekil-benzersiz ön izlemesini gerçekleştirelim;
# y Parametremize Değer Dönüşümünün Sonucunu Atanan Değerleri Tekil-Benzersiz Olarak Goruntuleyelim (Onizleme)
>>> y.Class.unique()
12-Genel veri kümemizi %75 Eğitim Verisi %25 Test Verisi olarak parçalayıp, ayıralım;
# Verilerimizi %75 Test %25 Egitim Verisi Olarak Parcalayalim
>>> from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
13-Verilerimizin (Eğitim Verileri) nihai sonuçlara ulaşabilmesi için özelliklerin aynı hassaslıkla değerlendirilebilmesi adına özelliklerimizi ölçeklendirelim*;
# Ozelliklerimizi Olceklendirelim
>>> from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
*Veri setimiz içerisinde birden fazla değişkenimiz mevcut ise bu değişkenleri en doğru şekilde ele alıp analiz edebilmemiz gerekmektedir.
Verilerde bulunan bağımsız özellikleri sabit bir aralıkta standartlaştırıp gerçek hayata uygun olarak ele aldığımız yöntem-teknik Özellik Ölçeklendirme (Feature Scaling) olarak ifade edilmektedir.
15-Tahminleme yapımızı oluşturmak için yapay sinir ağımızı eğitmeye başlayalım.
10’ar düğümden oluşan 4 katlı bir Gizli Katman Ağı oluşturalım;
# Yapay Sinir Ağı Modelimizi Olusturalım, Gizli Katmanımızı Yapilandiralim
>>> from sklearn.neural_network import MLPClassifier
>>> mlpcl = MLPClassifier(hidden_layer_sizes=(10, 10, 10, 10), max_iter=10000)
>>> mlpcl.fit(X_train, y_train.values.ravel())
16-Ve; test verilerimiz üzerinde tahminlemede bulunalım;
# Test Verilerimiz Uzerinde Tahminlemelerde Bulunalim
>>> predictions = mlpcl.predict(X_test)
17-Son olarak tahminlememizin — algoritmamızın performansını ölçümleyelim;
# Tahminlememizin — Algoritmamizin Performansını Olcumleyelim
>>> from sklearn.metrics import classification_report, confusion_matrix
>>> print(confusion_matrix(y_test,predictions))
>>> print(classification_report(y_test,predictions))
Modelimizin-Algoritmamızın performansı %92 olarak ölçümleniyor. (Fena değil gibi.)
Modelimiz üç tip çiçek üzerinde sadece birini %100 olarak (1.00–0.cı bitki) sınıflandırdı.
train_test_split ile verileri rastgele olarak eğitim ve test setlerine ayırdığımız için sonuçlarınız farklı varyasyonlarda farklı çıktılara neden olabilmektedir.
(Sinir ağlarımız aynı veriler üzerinde eğitilmemiş ve test edilmemiş olabilir)
Görselleştirme işlemleri için dilerseniz Python üzerinde ki çeşitli kütüphaneleri kullanarak dilerseniz de geçmiş dönemlerde uygulamış olduğumuz Power BI ile görselleştirme (1–2) çalışmalarından faydalanabilirsiniz.
Günlük Hayatta Yapay Sinir Ağları Uygulamaları
- Bankacılık Sektörü:
Kredi Kartı Kayıpları,
Kredi ve Kredi Başvurusu Değerlendirmesi,
Dolandırıcılık ve Risk Değerlendirmesi,
Kredi Temerrütleri - Yazılım Sektörü (İş Analitiği/Analizi — İş Geliştirme):
Müşteri Davranışı Modellemesi,
Müşteri Bölümlemesi (Segmentasyonu) ,
Dolandırıcılık Eğilimi Takibi,
Pazar Araştırması,
Pazar Karması,
Pazar Yapısı ve Yıpranma Analizi,
Temerrüt,
Satın alma ve yenileme modelleri - Savunma Sanayi Sektörü :
Terörle Mücadele,
Yüz Tanıma,
Özellik Çıkarma,
Gürültü Bastırma,
Nesne Ayırt Etme,
İleri Düzey Sensör Teknolojileri,
Sonar,
Radar ve Görüntülü Sinyal İşleme,
Hedef İzleme ve Takip - Eğitim Sektörü :
Uyarlanabilir Öğrenme Yazılımları,
Eğitim Sistemi Analizi ve Tahmini,
Öğrenci Performans Modellemesi ve Kişilik Profili Oluşturma - Finansal Sektör :
Kurumsal Tahvil Derecelendirmeleri,
Kurumsal Finansal Analiz,
Kredi Hattı Kullanım Analizi,
Para Birimi Fiyat-Değer Tahmini,
Kredi Danışmanlığı,
İpotek Taraması,
Emlak Değerlendirmesi ve Portföy Ticareti - Sağlık Sektörü (Tıp) :
Kanser Hücresi Analizi,
EKG ve EEG analizi,
Acil Servis Testi Tavsiyesi,
Hastane Sistemleri için Maliyet Azaltma ve Kalite İyileştirme,
Nakil Süreci Optimizasyonu ve Protez Tasarımı - Borsa Sektörü (Menkul Kıymetler) :
Otomatik Tahvil Derecelendirme,
Piyasa Analizi ve Hisse Senedi Alım-Satım Danışmanlık Sistemleri - Taşımacılık Sektörü (Lojistik- Ulaşım) :
Yönlendirme Sistemleri,
Fren Teşhis Sistemleri ve Araç Planlama
Avantaj ve Dezavantaj
Yapay Sinir Ağları avantajları olarak;
1-Birkez eğitildiklerinde yeni bir veri kümesini doğrudan analiz edebilirler, (Örüntü Deneyimleri)
2-Yüksek hassaslıkta örüntülü ilişkilendirme ve genel sınıflandırma için ideal bir yöntem olarak nitelendirilmektedirler,
3-Ağırlık ve Ağ Yapısı gibi analiz modelindeki dinamiklerin değişiminde kendilerini yeni modele adapte edebilirler,
4-Doğrusal olmayan analizler için yüksek doğruluk değerleri sağlamaktadırlar,
(YSA hücreleri doğrusal değildir.),
5-Algılamaya ve eğitilmeye yönelik güçlü bir algoritma olarak görülmektedirler.
dile getirilebilir.
Yapay Sinir Ağları dezavantajları olarak;
1-Yüksek nitelikte donanım bağımlı algoritmalardır,
(Yetersizlikte güvenilirlik sağlamaz.)
2-Analiz edilecek probleme yönelik ağ yapısını deneme yanılma yöntemi ile elde edebilmektesiniz,
(Zaman kaybı oluşturabilir.)
3-Ele alınacak girdi parametreleri-değerleri için herhangi bir kural bulunmamaktadır,
4-Algoritmanın çıktı oluşturma süresi önceden net olarak öngörülememektedir,
5-Her durumda yüksek doğruluk değeri elde edileceği garantisi verilememektedir.
dile getirilebilir.
Bu bölümde genel manada Sınıflandırma metoduna ait ve Yapay Sinir Ağı yöntemine (algoritmasına) değinmeye çalıştım.
Gelecek yazımda Genetik Algoritmaları (Genetic Algorithm) ele almaya çalışacağım.
Ek yazılar için; www.miracozturk.com
İyi günler, iyi çalışmalar…