Access’den PostgreSQL’e Tablo Aktarma
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
Ham verileri, anlamlı hale getirirken, zafiyetli düğümle yapılan simülasyondan elde edilen veri seti 1 ile, normal düğümlerle yapılan simülasyon 0 ile etiketlendikten sonra bu iki veri seti birleştirilmiştir. Elde edilen bu yeni veri seti ile “sınıflandırma” algoritmaları karşılaştırılacaktır. Karşılaştırılacak makine öğrenmesi algoritmalarının tanımları bu sayfada açıklanmıştır.
Lojistik regresyon için, bir veri setinde sonuca etki eden bir veya birden fazla bağımsız değişken olması gerekmektedir. Lojistik regresyon, bize bir örneklemin bir sınıfa ait olup olmama olasılığını verir. Dolayısıyla lojistik regresyon 1 veya 0 ile etiketlenmiş veriler için uygundur.
Lojistik regresyonun altında yatan matematiksel hesaplama olasılıklara dayanır. Eldeki bağımsız değişkenler, sonucun olup olmamasını etkiliyorsa doğrusal bir denklemle modellenebilir.
Lojistik regresyonu tanımlamak için öncelikle lineer regresyon ile ilgili bilgi vermek gerekir. Y gibi bir bağımlı değişkenin ve x gibi bir bağımsız olduğu bir veri setinde sınıflandırmayı yapabilmek için, denklem 3.1’deki gibi doğrusal bir denklem ile ifade edilebilir.
y_i=\beta_0+\beta_1\ x_i+e_i (3.1.)
Burada y, bağımlı değişken, kesme terimi ve katsayı(eğim), hata ve x bağımsız değişken olarak ifade edilebilir. Veri setinde birden fazla bağımsız değişkenin olması durumunda doğrusal fonksiyon denklem 3.2’deki gibi olacaktır:
y_i=\beta_0+\beta_1x_1+\beta_2x_2+\beta_3x_3+\ldots.+\beta_nx_n+\varepsilon_i (3.2.)
Doğrusal denklemlerin sonucunun 0 ile 1 aralığında olmasını istiyorsak, bu denklemleri sigmoid fonksiyonundan geçirmek gerekecektir. Y bağımsız değişkeninin olma olasılığı denklem 3.3’deki gibi olacaktır.
P\left(y\right)=\frac{1}{1+e^{-\left(\beta_0+\beta_1x_1+\beta_2x_2+\beta_3x_3+\ldots.+\beta_nx_n+\varepsilon_i\right)}} (3.3.)
Denklem 3.3’deki işleme dayanan lojistik regresyon algoritması, 0 ve 1 ile sınıflandırılmış veri setimiz için uygun bir makine öğrenmesi algoritması olacaktır. (Bonaccorso, 2017) 1
Karar ağaçları, veri setindeki sınıflandırmayı etkileyen bağımsız değişkenlerin etki katsayısına göre ağaç yapısı ve dallanma oluşturan güçlü bir algoritmadır. Öncelikle veri setinde en güçlü özellik belirlenir, sonrasında ise dallardan birisi seçilir. Bu prosedür, aranılan sınıflandırma hedefine gelene kadar tekrarlanır.
Seçilen bağımsız değişkenler denklem 3.4’deki gibi tanımlanırsa:
\sigma=\left\langle i;t_k\right\rangle (3.4)
Buradaki ilk eleman, veri kümesini belirli bir düğümde bölmek için kullanmak istediğimiz özelliğin dizinidir (yalnızca başlangıçta tüm veri kümesi olacaktır; her adımdan sonra örnek sayısı azalır), ikincisi ise sol ve sağ dalları belirleyen eşiktir.. En iyi eşiğin seçimi, ağacın yapısını ve dolayısıyla performansını belirlediği için temel bir unsurdur. Amaç, örnek veriler ile sınıflandırma sonucu arasında çok kısa bir karar yoluna sahip olmak için en az sayıda bölünmede artık safsızlığı azaltmaktır. Ayrıca iki branşı dikkate alarak bir toplam safsızlık ölçüsü aşağıdaki gibi tanımlanır:
I\left(D,\sigma\right)=\frac{Nsol}{N_D}I\left(Dsol\right)+NsağNDIDsağ (3.5.)
Burada, D, seçilen düğümdeki tüm veri kümesidir, Dsol ve Dsağ sonuçtaki alt kümelerdir (seçim demetini uygulayarak) ve I, safsızlık ölçüleridir.
Gini safsızlık endeksi denklem 3.6’daki şekilde tanımlanır:
I_{Gini}=\sum{p\left(i\middle| j\right)\left(1-p\left(i\middle| j\right)\right)} (3.6.)
Burada, toplam her zaman tüm sınıflara genişletilir. Bir veri seti verildiğinde, Gini safsızlığı, dalın olasılık dağılımı kullanılarak rastgele bir etiket seçilirse yanlış sınıflandırma olasılığını ölçer. İndeks, bir düğümün tüm örnekleri tek bir kategoride sınıflandırıldığında minimuma (0.0) ulaşır.
Çapraz entropi ölçüsü denklem 3.7’deki şekliyle tanımlanır:
I_{Çapraz-Entropi}\left(j\right)=-\sum_{i}{p\left(i\middle| j\right)\log{p\left(i\middle| j\right)}} (3.7.)
Bu ölçü bilgi teorisine dayanır ve yalnızca tek bir sınıfa ait örnekler bir bölünmede mevcut olduğunda boş değerler alırken, sınıflar arasında tek tip bir dağılım olduğunda maksimumdur (bu, karar ağaçlarındaki en kötü durumlardan biridir çünkü nihai sınıflandırmaya kadar hala birçok karar adımı olduğu anlamına gelir). Bu endeks, Gini safsızlığına çok benzer, ancak daha resmi olarak çapraz entropi, sınıflandırma hakkındaki belirsizliği en aza indiren ayrımı seçmenize izin verirken, Gini safsızlığı yanlış sınıflandırma olasılığını en aza indirir. (Bonaccorso, 2017) 1
Karar ağaçları, elde edilen veri seti için uygun bir sınıflandırma algoritması olacaktır.
Rastgele orman, bir düğümü bölmek için farklı bir politikaya sahip rastgele örnekler üzerine inşa edilen bir dizi karar ağacıdır: Böyle bir modelde en iyi seçeneği aramak yerine, rastgele bir özellik alt kümesi (her ağaç için) kullanılır. Verileri en iyi ayıran eşiği bulur. Sonuç olarak, daha zayıf bir şekilde eğitilmiş birçok ağaç olacak ve her biri farklı bir tahmin üretecektir. Bu sonuçları yorumlamanın iki yolu vardır; daha yaygın yaklaşım çoğunluk oylamasına dayanır (en çok oylanan sınıf doğru kabul edilecektir). Teorik olarak farklı olsalar bile, eğitilmiş rastgele bir ormanın olasılık ortalaması, tahminlerin çoğundan çok farklı olamaz (aksi takdirde, farklı sabit noktalar olmalıdır); bu nedenle iki yöntem genellikle karşılaştırılabilir sonuçlara götürür.
Özellik önemi kavramı, ormandaki tüm ağaçların ortalamasını hesaplayarak rastgele ormanlara da denklem 3.8’deki gibi uygulanabilir: (Bonaccorso, 2017) 1
Özellik Önemi\ (x_i)\ =\ \frac{1}{N_{Trees}}\ \sum\sum\frac{N_k}{N}∆\ I x_i\ ( 3.8)
Rastgele Orman (Random Forest) da veri setimizi eğitmek için uygun bir makine öğrenmesi algoritmasıdır.
Naive Bayes, Bayes teoremini kullanarak bir dizi koşul verilen bir sonucun olasılığını belirleyen güçlü ve eğitilmesi kolay bir sınıflandırıcı ailesidir. Bayes teoremine göre, koşullu olasılıklar tersine çevrilir, böylece sorgu ölçülebilir büyüklüklerin bir fonksiyonu olarak ifade edilebilir. Bayes teoremine göre iki olasılıklı olay A ve B’de, marjinal olasılıklar P (A) ve P (B) ile koşullu olasılıklar P (A | B) ve P (B | A) ile çarpım kuralını kullanarak denkelm 3.9’daki gibi bir korelasyon kurulabilir.
P (A∩B) = P(A|B) P(B)P
(B∩A) = P(B|A) P(A)
(3.9.)
Kesişimin değişmeli olduğu düşünülürse, ilk üyeler eşittir; böylece Bayes teoremi denklem 3.10’da olduğu gibi türetilebilir:
P\left(A\middle| B\right)=\frac{P\left(B\middle| A\right)P\left(A\right)}{P\left(B\right)} (3.10.)
Bu formülün çok derin felsefi sonuçları vardır ve istatistiksel öğrenmenin temel bir unsurudur. (Bonaccorso, 2017) 1
Navie bayes algoritması da veri setimiz için uygun bir makine öğrenmesi algoritmasıdır.
KNN algoritması, benzer sınıfların birbirine yakın olduğunu varsayar. Bu algoritmanın olumlu yanları, uygulaması kolay, gürültülü verilere karşı dirençli ve büyük eğitim setlerinde daha etkin sonuçlar üretmesi olarak sıralanabilir. Ancak, algoritma başlangıcında “k” parametresine ihtiyaç duyması, en iyi sonucun elde edilebilmesi için hangi uzaklık ölçü biriminin seçileceğinin belirgin olmaması ve hesaplama maliyetinin yüksekliği olumsuz yanlarıdır. (Bilgin & Yılmaz, 2018) 2 Başka bir deyişle, benzer şeyler birbirine yakındır. Her noktanın en yakın komşuları basit çoğunluk oyuyla hesaplanır. Genellikle bu oy çoğunluğu Öklid mesafesidir.(Denklem 3.11)
\left|AB\right|=\sqrt{\left(x_2-x_1\right)^2+\left(y_2-y_1\right)^2} (3.11.)
Bir sorgu noktası, noktanın en yakın komşuları içinde en çok temsilciye sahip olan veri sınıfına atanır. Her sorgu noktasının en yakın komşuları, burada kullanıcı tarafından belirtilen bir k tamsayı değeridir. Burada k değerinin optimum seçimi önem arz eder ve veriye bağlıdır. k tamsayı değeri büyüdükçe gürültü artar, ancak sınıflandırma daha belirginleşir. (Bonaccorso, 2017) 1
KNN sınıflandırma algoritması veri seti için uygun bir sınıflandırma algoritmasıdır.
Yapay bir sinir ağı (YSA), bir giriş katmanını bir çıktıya bağlayan yönlendirilmiş bir yapıdır. Yapay sinir ağlarının genel vektör fonksiyonu denklem 3.12’deki gibidir:
y\ \bar=f(x\ \bar\ ) (3.12.)
Burada,
\bar{x}=\left(x_1+x_2+x_3+,\ldots,+x_n\right)\ ve\ \bar{y}=\left(y_1+y_2+y_3+,\ldots,+y_m\right) (3.13.)
“Nöral” kavramı iki önemli unsurdan meydana gelir: temel hesaplama biriminin iç yapısı ve bunlar arasındaki bağlantılardır. Genel anlamda yapay sinir ağlarının şematik gösterimi Şekil 3.8’de verilmiştir.
Bir nöron çekirdeği, her biri sinaptik bir ağırlık wi ile karakterize edilen n giriş kanalına bağlanır. Girdi, bileşenlerine bölünür ve karşılık gelen ağırlık ile çarpılır ve toplanır. Bu toplama isteğe bağlı bir bayes eklenebilir (üniter bir girişe bağlı başka bir ağırlık gibi çalışır). Ortaya çıkan toplam, fa aktivasyon fonksiyonu tarafından filtrelenir ve çıktı üretilir. Yapay sinir ağları, lojistik regresyon gibi doğrusal modelden farklı ve daha etkili bir yol izlemek için ilk Çok Katmanlı Algılayıcıyı oluşturmak gerekir.
Aşağıdaki şekilde, bir Çok Katmanlı Algılayıcıyı’nın n boyutlu bir girdiye, p gizli nöronlara ve bir k boyutlu çıktıya sahip şematik bir temsili şekil de gösterilmiştir:
Burada, alfa terimi (hata deltasıyla orantılıdır) çıktı katmanından gizli olana geri yayılır. Çok sayıda gizli katman varsa, bu prosedür ilk katmana kadar yinelemeli olarak tekrarlanır. Algoritma, gradyan iniş yöntemini benimser; bu nedenle yakınsamaya kadar ağırlıkları yinelemeli olarak günceller. Böylelikle eldeki veri ile makine öğrenimi gerçekleştirilir. (Bonaccorso, 2017) 1
Yapay sinir ağları, çok karmaşık sınıflandırmaları yapmamızı sağlar. Çok güçlü bir algoritmadır. Yalnız yapay sinir ağındaki eğitim süresi diğer algoritmalara göre daha uzundur. Daha fazla işlem gerektirir. Bu tez çalışmasında elde edilen veri setini öğrenmesi ve saldırıyı tespit etmesi çok muhtemeldir. Fakat bu tez çalışmasındaki maksat, basit ve hızlı bir yöntem belirlemektir.
1. Bonaccorso, G. (2017). Machine Learning Algorithms. Birmingham: Packt Publishing Ltd.
2. Bilgin, M., & Yılmaz, A. (2018). Makine Öğrenmesi. İstanbul: Papatya Bilim.
Bu yazıda, excel ve python aracılığıyla Access DB’deki, bir tablonun postgresql’e aktarılması anlatılmaktadır.
Bu bölümde, RPL protokolüne yapılan Taşma Saldırısı, Azaltılmış Rank Saldırısı ve Sürüm Numarası Artırma Saldırısı “Karar Ağacı”, “Lojistik Regresyon”, “Rasgele Orman”, “Naive Bayes”, “K En Yakın Komşu” ve “Yapay Sinir Ağları” algoritmaları ile eğitilmiş ve test edilmiştir.
Taşma Saldırılarının tespitinde %97,2 doğruluk oranı ile Yapay Sinir Ağları algoritması, Sürüm Numarası Artırma Saldırılarının tespitinde %81 doğruluk oranı ile K En Yakın Komşu algoritması, Azaltılmış Rank saldırılarının tespitinde %58 doğruluk oranı ile Yapay Sinir Ağları algoritması başarı gösterdiği tespit edilmiştir.
RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması başlıklı yüksek lisans tezimi nasıl yaptığımı, bu süreçte elde ettiğim tecrübelerimi ve bu tezdeki kodları bir yazı dizisi halinde blog sayfamda paylaşmaya devam ediyorum.
Şimdiye kadar, RPL protokolü ve RPL protokolünde gerçekleşen saldırılarla ilgili detaylı bilgi verdim. Sonrasında, Taşma Saldırıları, Sürüm Numarası Artırma Saldırısı ve Azaltılmış Rank Saldırısı ile ilgili deneyler yapıp, ham verileri elde ettim ve bu ham verileri anlamlı hale getirdim. Zafiyetli düğümlerle yapılan deney sonuçları ile, iyicil düğümlerle yapılan deney sonuçlarını istatistiksel metotlarla karşılaştırdım.
Bu bölümde ise makine öğrenmesi algoritmaları ile tespit ettiğimiz saldırıların sayısal sonuçlarını yorumlayacağım.
“RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması” isimli yüksek lisans tezimi bu blog sayfasını kullanarak açıkladım. Şimdiye kadar, RPL protokolü ve RPL protokolünde gerçekleşen saldırılarla ilgili detaylı bilgi verdim. Sonrasında, Taşma Saldırıları, Sürüm Numarası Artırma Saldırısı ve Azaltılmış Rank Saldırısı ile ilgili deneyler yapıp, ham verileri elde ettim ve bu ham verileri anlamlı hale getirdim. Bu bölümde, zafiyetli düğümlerle yapılan deney sonuçları ile, iyicil düğümlerle yapılan deney sonuçlarını istatistiksel metotlarla karşılaştıracağım. İstatistiksel metotlar bizlere makine öğrenmesi metotlarının düzgün çalışıp çalışmadığı hakkında bilgi verecektir.
RPL Tabanlı IOT Cihazları Zafiyetinin Tespiti İçin Makine Öğrenmesi Algoritmalarının Karşılaştırılması başlıklı yüksek lisans tezimi nasıl yaptığımı, bu süreçte elde ettiğim tecrübelerimi ve bu tezdeki kodları bir yazı dizisi halinde blog sayfamda paylaşmaya devam ediyorum.
Bu yazımızda işlenen verileri eğitip RPL protokolünde saldırıyı makine öğrenmesi algoritmaları ile tespit edeceğiz.
Ham verileri, anlamlı hale getirirken, zafiyetli düğümle yapılan simülasyondan elde edilen veri seti 1 ile, normal düğümlerle yapılan simülasyon 0 ile etiketlendikten sonra bu iki veri seti birleştirilmiştir. Elde edilen bu yeni veri seti ile “sınıflandırma” algoritmaları karşılaştırılacaktır. Karşılaştırılacak makine öğrenmesi algoritmalarının tanımları bu sayfada açıklanmıştır.
Ham veri kümesinden elde edilen bilgiler, makine öğrenimini uygulamak için yeterli olmayacaktır. Zayıf düğümler içeren simülasyonlardan elde edilen ham veriler, normal düğümler içeren simülasyonlardan elde edilen ham verilerden tamamen farklıdır. Bu farkın paket sayısı, mesaj türleri, toplam paket uzunlukları ve oranları olduğu gözlemlenmiştir. Bu anormalliği algılamak için, ham veriler 1 saniyelik karelere bölünmüştür. Her saniyenin çerçeveleri içinde aşağıdaki değerler hesaplanmış ve yeni bir veri kümesi oluşturulmuştur.