Python İle İzinsiz Sisteme Girme Analiz Yapayzekası

ÖZET: Yapay zeka algoritmaları kullanılarak sistemde oluşan trafik verileri incelenebilir ve anormal ya da tehlikeli olarak değerlendirilen veriler belirlenebilir. Bu sayede sistemdeki güvenliği artırılabilir ve izinsiz girişler en aza indirilebilir. Ayrıca, yapay zeka algoritmaları kullanılarak sistemdeki trafik verilerinin daha iyi anlaşılması ve yönetimi sağlanabilir.

Analizler için kullanılabilecek öğrenme türleri arasında sınıflandırma, regresyon ve kümeleme gibi yapay zeka algoritmaları bulunur. Bu algoritmalar ağ trafiği verilerini analiz etmek için kullanılabilir ve izinsiz girişleri tespit etmek için kullanılabilir.

Modeller arasında en yaygın olarak kullanılanlar arasında çok katmanlı sinir ağları (MLP) ve destek vektör makine (SVM) bulunur. MLP ağ trafiği verilerini analiz etmek için kullanılan popüler bir model olarak kabul edilirken, SVM ise sınıflandırma problemlerinde oldukça etkilidir.

Ancak, ağ trafiği verilerinin çok fazla olduğu ve hızlı değiştiği düşünüldüğünde, yapay zeka tabanlı sistemlerin yanı sıra veri yoğunluğunu azaltmak ve hızlı analiz yapmak için veri madenciliği teknikleri ve veri yoğunluğunu azaltmak için özel olarak tasarlanmış veri yoğunluğu azaltma algoritmaları da kullanılabilir. Bu sistemlerin kullanımı, izinsiz girişleri hızlı bir şekilde tespit etmeye ve önlem almaya olanak tanır.

Anahtar Kelimeler: İzinsiz Giriş Tespit Sistemleri, Yapay Zeka

  1. Ağ Adli Bilişiminde Yapay Zeka Kullanımı​

Yapay Zeka (AI) alanında son dönemde yaşanan gelişmeler, bu teknolojinin şirketler ve kuruluşlar tarafından benimsenmesine ve bu alana teknolojik yatırımlar yapılmasına yardımcı olmuştur. Akıllı telefonlar, otonom arabalar, akıllı saatler, televizyonlar gibi gündelik hayatta kullanılan cihazların yanısıra birçok üretim endüstrileri, finans, eğlence gibi sektörlerde Yapay Zeka’nın kullanımı rahatlıkla gözlemlenebilir. Siber Güvenlik ve Adli Bilişim alanları da siber güvenlik olaylarının tespit, ve analizi için yapay zeka teknolojilerinden faydalanmaktadır.

Dijital cihazların kullanımının günden güne artması ile birlikte siber suçlardaki büyüme, Adli Bilişim alanının da önünü açmıştır. Adli Bilişim dijital verilerin ve cihazların mahkemeler tarafından yasal olarak kabul edilecek şekilde analiz edilmesini ve soruşturulmasını içerir. Bu inceleme ve analiz süreçleri dijital kanıtların tanımlanması, toplanması, doğrulanması, analizi, yorumlanması, belgelenmesi ve sunulması süreçlerini içerir.

Cisco tarafından yayınlanan “Yıllık Internet Raporu”na göre, 2023 yılı sonunda internet ağına bağlı olacak cihaz sayısı 29.3 milyar olacak ve bir sistem tarafından yönetilen ortalama trafik hacmi aylık 50 GB olacaktır.

  1. İzinsiz Giriş Tespit Sistemleri (Intrusion Detection System)​

İzinsiz Giriş Tespit Sistemi (IDS), ağ trafiğini şüpheli etkinlik açısından izleyen ve bu tür etkinlikler keşfedildiğinde uyarı veren bir sistemdir. Zararlı etkinlik veya politika ihlali için bir ağı veya sistemi tarayan bir yazılımdır. Herhangi bir kötü niyetli girişim veya ihlal, normalde bir yöneticiye bildirilir veya bir güvenlik bilgileri ve olay yönetimi (SIEM) sistemi kullanılarak merkezi olarak toplanır. Bir SIEM sistemi, birden çok kaynaktan gelen çıktıları birleştirir ve kötü amaçlı etkinlikleri yanlış alarmlardan ayırt etmek için alarm filtreleme tekniklerini kullanır.

011923_1629_PYTHONLEZN1.png

Şekil 1 : İzinsiz Giriş Tespit Sistemleri

Ana Bilgisayar Tabanlı IDS (Host Based IDS): Ana bilgisayar tabanlı IDS (Intrusion Detection System), herhangi bir kötü niyetli veya şüpheli etkinliği tespit etmek için belirli bir bilgisayar üzerindeki etkinliği izleyen ve analiz eden bir güvenlik sistemidir. Potansiyel güvenlik tehditlerini veya ihlallerini belirlemek için ana bilgisayar (izlenen bilgisayar veya ağ) tarafından oluşturulan verileri analiz eder. Ana bilgisayar tabanlı IDS, belirli sistemleri veya ağları hedef alan saldırılara karşı koruma sağlamak için kullanılır ve bir tehdit algılandığında kullanıcıyı veya güvenlik ekibini uyaracak şekilde yapılandırılabilir.

Ağ tabanlı IDS (Network Based IDS) : Ağ üzerinde bulunan güvenlik açıklarını ve potansiyel tehditleri tespit etmek amacıyla kullanılan bir güvenlik sistemidir. Bu sistem ağ üzerinde gerçekleşen trafikleri inceler ve belirli bir kurallar setine göre bu trafikleri değerlendirir. Eğer bir trafik potansiyel bir tehdit olarak algılanırsa, sistem bu tehdidi bildirir ve gerekli önlemleri alır. Ağ tabanlı IDS sistemleri, ağ üzerinde bulunan sunucular, switchler ve routerlar gibi ağın herhangi bir yerinden gelen trafikleri inceleyebilir.

2.1 İzinsiz Giriş Yöntemi Tespit Metodları​

  • İmza Tabanlı Tespit Yöntemi: İmza tabanlı IDS, ağ trafiğindeki bayt boyutu, 1 veya 0 sayısı gibi belirli kalıplara dayalı olarak saldırıları tespit eder. Ayrıca, kötü amaçlı yazılım tarafından kullanılan zaten bilinen kötü amaçlı talimat dizisini temel alarak da algılar. IDS’de tespit edilen kalıplar, imzalar olarak bilinir. İmza tabanlı IDS, sistemde deseni (imzası) mevcut olan saldırıları kolayca tespit edebilir ancak yeni kötü amaçlı yazılım saldırılarını deseni (imzası) bilinmediği için tespit etmek oldukça zordur..
  • Anomali Tabanlı Tespit Yöntemi: Kötü amaçlı yazılımlar hızla geliştirildiğinden, bilinmeyen kötü amaçlı yazılım saldırılarını tespit etmek için anomaly tespit tabanlı IDS yapıları ortaya çıkmıştır. Anomali tabanlı IDS’de, güvenilir bir etkinlik modeli oluşturmak için makine öğrenimi kullanılır ve gelen her şey bu modelle karşılaştırılır ve modelde bulunmazsa şüpheli ilan edilir. Makine öğrenimi tabanlı yöntem ile bu modeller uygulamalara ve donanım yapılandırmalarına göre eğitilebildiğinden, imza tabanlı IDS’ye kıyasla daha iyi genelleştirilmiş bir özelliğe sahiptir.​
  1. Python ile İzinsiz Giriş Tespit Sisteminin Analizi​

Yapay Zeka, katmanlı bir güvenlik modelinde ağın izlenmesine, güvenliğinin sağlanmasına ve gerektiği durumlarda araştırma yapılabilmesine yardımcı olabilir.

Yapay Zeka tabanlı İzinsiz Giriş Tespit Sistemleri (IDS) gibi teknolojiler aracılığı ile güvenlik olaylarının proaktif olarak izlenmesi, kritik verilerin kurtarılmasında önemli bir rol oynayabilir. Ağ trafiğinin büyük miktarda veri içermesi, bu verinin yapay zeka ile işlenmesini ve bu iki unsurun uyumlu bir şekilde çalışmasını mümkün kılacaktır.

Araştırma yapılan yerel ağ ortamlarında ya da bulut ortamlarındaki çeşitli kaynaklardan dijital kanıtlar elde edilebilir. Dosya sistemlerinin yapısı, cihazlar üzerindeki silinmiş verilere erişim sağlanmasına imkan tanır. İşletim sistemleri üzerindeki olay günlükleri, sistem, güvenlik ve uygulama loglarını kayıt altına alır.Olay günlükleri kullanılarak cihazın nasıl kullanıldığı çıkarımı yapılabilir. Ağ trafiği,dijital kanıt araştırması yapan kişiye ağ üzerinden erişilen uygulamalar, oturum açma kayıtları gibi verilerin toplanmasını sağlar. Bulut ortamları ise, yerel bir bilgisayar ya da bilgisayar ağı üzerinde depolanmayan kanıtları veya birden fazla cihaz arasında paylaşılan verileri tutar.

Ağ Adli Bilişimi, güvenlik olaylarının incelenmesini, veri ve güvenlik ihlallerinin araştırılması için ağ trafiğindeki paketlerin incelenmesini temel alan bir bilim olarak bilinir. Ağ paketleri cihazların birbiri ile iletişimi için gerekli yönlendirme bilgisinden fazlasını içermektedir. Örneğin; bazı durumlarda ağdaki paket akışları, gönderilen ve alınan dosyaların yeniden oluşturulması için kullanılabilir.

Bir dijital soruşturma kapsamında ağ trafiğindeki veriler iki şekilde toplanabilir:

  • Proaktif yaklaşım olarak bilinen bu yöntem ile ağ üzerindeki trafiğin sürekli izlendiği ve analiin o an gerçekleştirildiği modeldir.
  • Reaktif yaklaşım olarak bilinen bu yöntemde ise, tespit edilen bir saldırı sonrasında, ağ trafiğinin daha sonra ya da çevrimdışı analiz edilmesi esasına dayanır.
Ağ Adli Bilişimi, kendi kendini koruyan sistemlerin daha önce karşılaşılmamış bir saldırının bilinmeyen etki ve etkenlerinin analiz edilmesini ve anlaşılmasını sağlar. Bunu yapabilmesi ve sınıflandırma performansının geliştirilmesi için ağdan geçen tüm trafiği izlenmesi ve kayıt altına alınması gerekir. Ağ güvenliğini tehlikeye atan ve en çok karşılaşılan saldırıları aşağıdaki gibi sıralayabiliriz.

  • Botnet
  • Buffer Overflow Saldırıları
  • E-posta hesaplarının ele geçirilmesi
  • Cros-Site Scripting (XSS)
  • Cryptojacking
  • DDoS (Dağıtık Hizmet Dışı Bırakma) Saldırıları
  • Ransomeware
  • DNS Tunelleme
  • SQL Injection
  • Oltalama Saldırıları


3.1 Python Kütüphanelerinin Kurulumu ve İçe Aktarılması​

Öncelikle pyton ile geliştirilecek uygulama için gerekli kütüphanelerin kurulması ve içeri aktarılması sürecinin gerçekleştirilmesi gerekmektedir.

3.1.1 NumPy (Numerical Python)​

Bilimsel hesaplamaları hızlı bir şekilde yapmamızı sağlayan bir matematik kütüphanesidir. Numpy’ın temelini numpy dizileri oluşturur. Numpy dizileri python listelerine benzer fakat hız ve işlevsellik açısından python listelerinden daha kullanışlıdır. Ayrıca python listelerinden farklı olarak Numpy dizileri homojen yapıda olmalıdır yani dizi içindeki tüm elemanlar aynı veri tipinden olmalıdır.

3.1.2 Pandas​

Python programlama dili için yüksek performanslı, kullanımı kolay veri yapıları ve veri analiz araçları sağlayan açık kaynaklı bir kütüphanedir. ‘.csv’ ve ‘.txt’ dosyalarını açmak ve içerisinde bulunan verileri okuyarak istenen sonuca kolayca ulaşmak için kullanılmaktadır. Yani Pandas sayesinde bir excel dosyasını açarak içerisinde bulunan bir sütunu veya satırı seçip işlem yapabiliriz. Numpy kütüphanesinde yapılan verilerin şekillendirilmesi işlemi daha detaylı bir biçimde kullanılabilmektedir.

3.1.3 Seaborn​

Seaborn, Matplotlib kütüphanesine yüksek seviye arayüz sağlayan bir kütüphanedir. Seaborn ile;
  • Estetik olarak hoş olan varsayılan temaları kullanma
  • Özel olarak renk paleti belirleme
  • Göz alıcı istatistiksel grafikler yapma
  • Dağılımları kolayca ve esnek bir şekilde sergileme
  • Matris ve DataFrame içindeki bilgileri görselleştirme
yapılabilir.

3.1.4 Matplotlib​

Matplotlib; veri görselleştirmesinde kullandığımız temel python kütüphanesidir. 2 ve 3 boyutlu çizimler yapmamızı sağlar. Matplotlib genelde 2 boyutlu çizimlerde kullanılırken, 3 boyutlu çizimlerde başka kütüphanelerden yararlanılır.

Çizgi grafikler, dağılım grafikleri, histogramlar, çubuk grafikler, hata grafikleri, pasta grafikler, kutu grafikler ve diğer birçok görselleştirme stili oluşturabilir. Matplotlib ile 3D grafikler de mümkündür.


3.1.5 Optuna​

Hiperparametre optimizasyonu noktasında kendini kanıtlamış birçok algoritma vardır. Optuna hem makine öğrenimi hem de derin öğrenme algoritmaları ile uyumlu çalışabilen açık kaynak kodlu optimizasyon algoritmalarından biridir. Kısaca Optuna, hiperparametre optimizasyonu sürecini otomatize etmek için geliştirilmiş, Python kullanan ve en iyi performans için deneme yanılma yoluyla optimum değerleri otomatik olarak arayıp bulan bir yazılım çerçevesidir.

3.1.6 SKLearn​

Scikit-learn, veri bilimi ve machine learning için en yaygın kullanılan Python paketlerinden biridir. Birçok işlemi gerçekleştirmenizi sağlar ve çeşitli algoritmalar sağlar. Scikit-learn ayrıca sınıfları, yöntemleri ve işlevleri ile kullanılan algoritmaların arka planıyla ilgili belgeler sunar.

Scikit-learn Özellikleri :

  • Veri İşleme,
  • Boyutsal Küçülme,
  • Model Seçimi,
  • Regresyon,
  • Sınıflandırılması,
  • Küme Analizi.

3.1.7 XGBoost​

XGBoost(eXtreme Gradient Boosting), Gradient Boosting algoritmasının çeşitli düzenlemeler ile optimize edilmiş yüksek performanslı halidir. Tianqi Chen ve Carlos Guestrin’in 2016 yılında yayınladıkları “XGBoost: A Scalable Tree Boosting System” adlı makale ile hayatımıza dahil olmuştur. Algortimanın en önemli özellikleri yüksek tahmin gücü elde edebilmesi, aşırı öğrenmenin önüne geçebilmesi, boş verileri yönetebilmesi ve bunları hızlı yapabilmesidir. Tianqi’ye göre XGBoost diğer popüler algoritmalardan 10 kat daha hızlı çalışmaktadır.

Daha az kaynak kullanarak üstün sonuçlar elde etmek için yazılım ve donanım optimizasyon tekniklerini uygulanmıştır. Karar ağacı tabanlı algoritmaların en iyisi olarak gösterilir.


3.1.8 Catboost​

Catboost, Yandex şirketi tarafından geliştirilmiş olan Gradient Boosting tabanlı açık kaynak kodlu bir makine öğrenmesi algoritmasıdır. Gradient Boosting’in performansını arttırmak amacıyla geliştirilen XGBoost ve LightGBM’e alternatif olarak Nisan 2017 tarihinde “CatBoost: unbiased boosting with categorical features” makalesiyle tanıtılmıştır. Adı “Category” ve “Boosting” kelimelerinin birleşiminden gelmektedir.

3.1.9 Lightgbm​

LightGBM, Microsoft DMTK (Distributed Machine Learning Toolkit) projesi kapsamında 2017 yılında geliştirilmiş bir boosting algoritmasıdır. Diğer boosting algoritmaları ile karşılaştırıldığında yüksek işlem hızı, büyük verileri işleyebilmesi, daha az kaynak(RAM) kullanımı, yüksek tahmin oranı, paralel öğrenme ve GPU öğrenimini desteklemesi gibi avantajları vardır. Modelin tanıtıldığı “LightGBM: A Highly Efficient Gradient Boosting Decision Tree” makalesine göre, yapılan çalışmalarda LightGBM’in diğer modellere göre 20 kat daha hızlı olduğu sonucuna ulaşılmıştır.


Kod:
%pip install numpy pandas seaborn matplotlib optuna sklearn xgboost catboost lightgbm
Kod:
import numpy as np

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

from pandas.api.types import is_numeric_dtype

import warnings

import optuna

from sklearn import tree

from sklearn.model_selection import train_test_split

from sklearn.neighbors import KNeighborsClassifier

from sklearn.linear_model import LogisticRegression

from sklearn.preprocessing import StandardScaler, LabelEncoder

from sklearn.tree  import DecisionTreeClassifier

from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier, VotingClassifier, GradientBoostingClassifier

from sklearn.svm import SVC, LinearSVC

from sklearn.naive_bayes import BernoulliNB

from lightgbm import LGBMClassifier

from sklearn.feature_selection import RFE

import itertools

from catboost import CatBoostClassifier

from xgboost import XGBClassifier

from tabulate import tabulate

import os

warnings.filterwarnings(‘ignore’)

optuna.logging.set_verbosity(optuna.logging.WARNING)

for dirname, _, filenames in os.walk(‘abyznids’):

    for filename in filenames:

        print(os.path.join(dirname, filename))

3.2 Veri Önişleme

Veri bilimi projelerinde sahip olunan veriler düzensiz halde bulunabilir, bozuk kayıtlar içerebilir ya da uygulayacağınız analize uygun halde bulunmayabilirler. Dahası daha iyi sonuçlar elde edebilmek üzere çeşitli filtrelerden geçirmek, anomalilerden işin başında kurtulmak istenilebilir. Bu ve benzeri birçok duruma müdahaleyi içeren yöntemler bütününe veri ön işleme denir.

Veri Ön İşlemede Kullanılan Bazı Python Kütüphaneleri

NumPy
Matplotlib
Pandas
Scikit-Learn


Kod:
egitim=pd.read_csv(‘Egitim_Datasi.csv’)

test=pd.read_csv(‘Test_Datasi.csv’)

egitim

011923_1629_PYTHONLEZN2.png


Kod:
egitim.info()

egitim.head()

egitim.describe()

egitim.describe(include=‘object’)

3.3 Eksik Veri Kontrolü

Veri manipülasyonu işlemlerinde istatistik teorilerini bilmenin avantajları yadsınamaz bir gerçektir. Eksik veriyi, yansız tamamlamak ciddi bir bilgi birikimi gerektirir ama cankurtaran görevi gören istatistik bilimi sayesinde işimiz kolaylaşmaktadır. İstatistik teorileriyle geliştirilen birçok algoritma sayesinde bu büyük sorun büyük ölçüde araştırmacının işini kolaylaştırmaktadır.

Kod:
total = egitim.shape[0]

missing_columns = [col for col in egitim.columns if egitim[col].isnull().sum() > 0]

for col in missing_columns:

    null_count = egitim[col].isnull().sum()

    per = (null_count/total) * 100

    print(f“{col}: {null_count} ({round(per, 3)}%)”)

3.4 Yinelenen Veri Kontrolü


Kod:
print(f“Number of duplicate rows: {egitim.duplicated().sum()}“)

3.5 Aykırılık Kontrolü

Verideki genel eğilimin dışına çıkan değerlere aykırı değer denir.

Kod:
# for col in df:

#     if col != ‘class’ and is_numeric_dtype(df[col]):

#         fig, ax = plt.subplots(2, 1, figsize=(12, 8))

#         g1 = sns.boxplot(x = df[col], ax=ax[0])

#         g2 = sns.scatterplot(data=df, x=df[col],y=df[‘class’], ax=ax[1])

#         plt.show()

3.6 IDS Paketi Isı Haritası

Değişkenler (öznitelikler) arasındaki korelasyon katsayısı değerlerini gösterirken en çok kullanılan yöntemlerden birisi de ısı haritası ile görselleştirme yapmaktır.

Isı haritası grafiği, negatif yönlü ilişkinin şiddeti arttıkça rengin koyulaştığını, pozitif yönlü ilişkinin şiddeti arttıkça rengin krem rengine doğru açıldığını ifade etmektedir.


Kod:
plt.figure(figsize=(40,30))

sns.heatmap(egitim.corr(), annot=True)

# import plotly.express as px

# fig = px.imshow(df.corr(), text_auto=True, aspect=”auto”)

# fig.show()

011923_1629_PYTHONLEZN3.png

3.7 Kategorik Değerleri Dönüştürme

Bilgisayar bilimlerinde kategorik verilerle çalışmak, hesaplama ve bilgisayarın bu değerleri anlaması açısından zorluklar içerir. Özellikle makine öğrenmesi modellerinin doğru çalışabilmesi için kategorik verileri, sayısal karşılıklarına (temsillerine) dönüştürmemiz gerekmektedir. Bunu yapmanın en yaygın iki yolu Sklearn kütüphanesi altında yer alan LabelEncoder veya OneHotEncoder (ya da Pandas.get_dummies) sınıflarını kullanmaktır.

Label Encoder, elimizdeki verileri direk sayısal temsillerine dönüştürmeye yarar ve kategorik her veriye sayısal bir değer atar. Genelde sadece iki değere sahip özniteliklerde kullanılır.


Kod:
sns.countplot(x=egitim[‘class’])

011923_1629_PYTHONLEZN4.png


Kod:
def le(df):

    for col in df.columns:

        if df[col].dtype == ‘object’:

                label_encoder = LabelEncoder()

                df[col] = label_encoder.fit_transform(df[col])

le(egitim)

le(test)

Kod:
egitim.drop([‘num_outbound_cmds’], axis=1, inplace=True)

test.drop([‘num_outbound_cmds’], axis=1, inplace=True)

egitim.head()

011923_1629_PYTHONLEZN5.png

3.8 Özellik Seçimi

Makine öğrenme modellerinde daha iyi bir doğruluk elde etmek için, ilgili özellikleri (Öznitelikleri) bir veri kümesinden tespit etmek, ilgisiz veya daha az önemli olan özellikleri kaldırmak projenin büyük bir zamanını aldığı kesindir. Özellik Seçimi, makine öğreniminde modelinizin performansını büyük ölçüde etkileyen temel kavramlardan biridir. Modelimizi eğitmek ve problemi öğretmek için kullanılan veri özellikleri, başarabileceğiniz performans üzerinde büyük bir etkiye sahiptir.

Kod:
X_egitim = egitim.drop([‘class’], axis=1)

Y_egitim = egitim[‘class’]

Kod:
rfc = RandomForestClassifier()

rfe = RFE(rfc, n_features_to_select=10)

rfe = rfe.fit(X_egitim, Y_egitim)

feature_map = [(i, v) for i, v in itertools.zip_longest(rfe.get_support(), X_egitim.columns)]

selected_features = [v for i, v in feature_map if i==True]

selected_features

X_egitim = X_egitim[selected_features]

3.9 Verilerin Bölünmesi ve Ölçeklendirilmesi

Veri setleri genel olarak ikiye bölünür.

Eğitim Seti: Eğitim seti makine öğrenmesi algoritmasının eğitilmesi için verileri tanıması ve tahminlerini bu veriler üzerinden yapması için oluşturulan settir. Buna kısaca bundan sonraki verilere belli şekillerde önyargılı olmasını sağlayan veri seti diyebiliriz.

Test Seti: Eğitim seti kullanılarak oluşturulan algoritmanın ne derece doğru çalıştığını test etmek için daha önce kenara ayırdığımız veri setidir.



Kod:
scale = StandardScaler()

X_egitim = scale.fit_transform(X_egitim)

test = scale.fit_transform(test)

x_egitim, x_test, y_egitim, y_test = train_test_split(X_egitim, Y_egitim, train_size=0.70, random_state=2)

3.10 K En Yakın Komşular (KNN) sınıflandırma modeli

K En Yakın Komşular (KNN) sınıflandırma modeli, verilen bir giriş verisi hakkında etiket bilgisi olmayan diğer veriler ile karşılaştırılarak verilen giriş verisinin hangi sınıfa ait olduğunu tahmin etmek için kullanılan bir yöntemdir. Bu yöntem, veri setinde mevcut olan verilerin etiketlerini kullanarak verilen giriş verisinin hangi sınıfa ait olduğunu tahmin etmeye çalışır.

KNN algoritmasının çalışma şekli şu şekildedir:

  • KNN algoritmasının çalıştırılması için öncelikle veri seti içinde mevcut olan verilerin etiketleri ile birlikte bir eğitim seti oluşturulur.
  • Daha sonra, verilen giriş verisi için en yakın komşuları bulunur. Bu, veri setinde mevcut olan diğer veriler ile verilen giriş verisinin benzerliklerine göre hesaplanır.
  • En yakın komşuların etiketlerine bakılarak, verilen giriş verisinin hangi sınıfa ait olabileceği tahmin edilir.
KNN algoritması, veri seti içinde mevcut olan verilerin etiketlerini kullanarak verilen giriş verisinin hangi sınıfa ait olduğunu tahmin etmeye çalıştığı için, bu algoritma öğrenme sırasında herhangi bir model oluşturmaz. Bu nedenle, KNN algoritması “öğrenme sırasında model oluşturmayan” (lazy learning) sınıflandırma yöntemleri arasında sayılır.

Kod:
def objective(trial):

    n_neighbors = trial.suggest_int(‘KNN_n_neighbors’, 2, 16, log=False)

    classifier_obj = KNeighborsClassifier(n_neighbors=n_neighbors)

    classifier_obj.fit(x_egitim, y_egitim)

    accuracy = classifier_obj.score(x_test, y_test)

    return accuracy

study_KNN = optuna.create_study(direction=‘maximize’)

study_KNN.optimize(objective, n_trials=1)

print(study_KNN.best_trial)

Kod:
KNN_model = KNeighborsClassifier(n_neighbors=study_KNN.best_trial.params[‘KNN_n_neighbors’])

KNN_model.fit(x_egitim, y_egitim)

KNN_egitim, KNN_test = KNN_model.score(x_egitim, y_egitim), KNN_model.score(x_test, y_test)

print(f“Egitim Skoru: {KNN_egitim}“)

print(f“Test Skoru: {KNN_test}“)

 

3.11 Lojistik Regresyon Modeli

Lojistik regresyon, bir sınıflandırma modelidir ve bir çok veri özelliğini (input değişkenleri) kullanarak bir çıktı değişkeninin binary (iki kategori) olduğu bir sınıflandırma problemine odaklanır. Örneğin, bir banka müşterilerine bir kredi verirken müşterinin kredi değerlendirme puanını tahmin etmek isteyebilir. Bu durumda, çıktı değişkeni “kredi verilecek” veya “kredi verilmeyecek” olarak iki kategoriye ayrılır.

Lojistik regresyon modeli, veri özelliklerini kullanarak bir lojistik fonksiyonu oluşturur. Bu fonksiyon, bir giriş değişkeninin kategoriye ait olasılığını tahmin eder. Örneğin, bir müşterinin kredi değerlendirme puanı yüksekse, olasılıkları daha yüksektir ve bu nedenle daha yüksek bir kredi verme olasılığı vardır.

Lojistik regresyon modeli, veri kümesinde eğitilerek oluşturulur ve daha sonra test verileriyle doğrulanır. Bu model, diğer sınıflandırma modellerine göre daha yüksek bir doğruluk oranına sahip olabilir ve çok sayıda giriş değişkeni kullanabilir. Ancak, bu modelin tahminleri sadece binary çıktı değişkenleri için geçerlidir ve çok sayıda eksik veriye sahip veri kümelerinde zayıf performans gösterebilir.


Kod:
lg_model = LogisticRegression(random_state = 42)

lg_model.fit(x_egitim, y_egitim)

Kod:
lg_egitim, lg_test = lg_model.score(x_egitim , y_egitim), lg_model.score(x_test , y_test)

print(f“Egitim Skoru: {lg_egitim}“)

print(f“Test Skoru: {lg_test}“)

3.12 Karar Ağacı Sınıflandırıcı

Karar ağacı modeli, bir veri kümesine dayalı olarak bir karar verme sürecini gösterir. Bu model, bir karar verme sürecinde kullanılmak için tasarlandı ve verilerin birbirleriyle ilişkisini göstermek için bir ağaç şeması kullanır.

Bu model, bir veri kümesine dayalı olarak bir karar verme sürecinde iki önemli elemandan oluşur:
  • Sorgulamalar : Verileri inceler ve bir sonuç çıkarmaya yardımcı olur.​
  • Kararlar : Sorgulamaların sonucuna göre verilen kararlardır.​
Bu model, verileri inceleyerek bir karar verme sürecini aşağıdaki adımları takip ederek gösterir:
  • Veri kümesini incele: Bu adım, veri kümesine bakarak ilk sorgulamayı yapar. Bu sorgulama, verilerin hangi özelliklerine göre sınıflandırılacağını belirler.​
  • Özellikleri sınıflandır: Bu adım, veri kümesinde bulunan özellikleri sınıflandırır. Özellikler, verilerin hangi özelliklerine göre sınıflandırılacağını belirler.​
  • Sorgulamaları yap: Bu adım, sorgulamaları yapar ve verileri inceler. Bu sorgulamalar, verilerin hangi özelliklerine göre sınıflandırılacağını belirler.​
  • Karar ver: Bu adım, sorgulamaların sonucuna göre bir karar verir. Bu karar, verilerin hangi özelliklerine göre sınıflandırılacağını belirler.​
Bu model, verileri inceleyerek bir karar verme sürecini gösterir ve bu sürecin her adımında sorgulamalar yapılır ve kararlar verilir. Bu sayede, verilerin birbirleriyle ilişkisini anlamaya yardımcı olur ve doğru kararlar verilir.

Kod:
def objective(trial):

    dt_max_depth = trial.suggest_int(‘dt_max_depth’, 2, 32, log=False)

    dt_max_features = trial.suggest_int(‘dt_max_features’, 2, 10, log=False)

    classifier_obj = DecisionTreeClassifier(max_features = dt_max_features, max_depth = dt_max_depth)

    classifier_obj.fit(x_egitim, y_egitim)

    accuracy = classifier_obj.score(x_test, y_test)

    return accuracy

study_dt = optuna.create_study(direction=‘maximize’)

study_dt.optimize(objective, n_trials=30)

print(study_dt.best_trial)

Kod:
dt = DecisionTreeClassifier(max_features = study_dt.best_trial.params[‘dt_max_features’], max_depth = study_dt.best_trial.params[‘dt_max_depth’])

dt.fit(x_egitim, y_egitim)

dt_egitim, dt_test = dt.score(x_egitim, y_egitim), dt.score(x_test, y_test)

print(f“Egitim Skoru: {dt_egitim}“)

print(f“Test Skoru: {dt_test}“)

Kod:
fig = plt.figure(figsize = (192,96))

tree.plot_tree(dt, filled=True);

plt.show()

011923_1629_PYTHONLEZN6.png


Kod:
from matplotlib import pyplot as plt

def f_importance(coef, names, top=-1):

    imp = coef

    imp, names = zip(*sorted(list(zip(imp, names))))

    # Tum ozelliklerin gosterilmesi

    if top == -1:

        top = len(names)

    plt.barh(range(top), imp[::-1][0:top], align=‘center’)

    plt.yticks(range(top), names[::-1][0:top])

    plt.title(‘Karar Agaci Siniflandirmasi için Onemli Veriler’)

    plt.show()

# ozellik adi farketmeksizin

features_names = selected_features

# Görselleştirmek istediğiniz ilk n özelliğinizi belirtin.

# abs() işlevini de atabilirsiniz

# Ozelliklerin olumsuz etkisini de gormek istiyorsaniz.

f_importance(abs(dt.feature_importances_), features_names, top=10)

011923_1629_PYTHONLEZN7.png

3.13 Rassal Orman Algoritması

Rassal Orman modeli, bir çevre içinde yer alan nesneler arasındaki etkileşimleri modelleme amacıyla kullanılan bir yöntemdir. Bu model, nesnelerin birbirlerine benzer özellikler taşıdığı ve bu özellikler aracılığıyla birbirlerine bağlı olduğu bir orman gibi düşünülebilir.

Modelin temel öğesi, bir nesnenin çevresinde bulunan diğer nesnelerdir. Bu nesneler arasındaki etkileşimler sayesinde nesne, çevresindeki nesnelerin özelliklerini taşır. Örneğin, bir ağaç çevresindeki diğer ağaçların boyutlarını, rengini ve diğer özelliklerini etkilemektedir.

Bu model, çeşitli çalışmalarda kullanılmaktadır. Örneğin, sosyal ağların yapısını anlamaya yardımcı olmak için kullanılabilir. Ayrıca, ekonomik sistemlerin nasıl işlediğini anlamaya yardımcı olmak için de kullanılabilir.

Rassal Orman modeli, nesneler arasındaki etkileşimlerin nasıl oluştuğunu ve nasıl değiştiğini anlamaya yardımcı olur. Bu model, çeşitli çalışmalarda yararlı olmaktadır ve çeşitli alanlarda kullanılmaktadır.

Peki Rassal Orman algoritması nasıl çalışır?
  • Algoritma, sağlanan veri kümesinden rastgele örnekler seçer.
  • Algoritma, seçilen her örnek için bir karar ağacı oluşturacaktır ve karar ağacını eğitecektir. Ardından oluşturulan her karar ağacından bir tahmin sonucu alacaktır.​
    • Bir karar ağacını eğitmek için rastgele bir alt küme kullanılır
    • Her karar ağacı için en uygun bölmeler, rastgele bir özellik alt kümesine dayanır (örneğin, toplamda 10 özellik, bölünecek 10 özellikten rastgele 5’ini seçin)
  • Her bir ağaç , test setindeki kayıtları / adayları bağımsız olarak tahmin eder. Daha sonra tahmin edilen her sonuç için oylama yapılacaktır.
  • Son olarak, algoritma son tahmin olarak en çok oylanan tahmin sonucunu seçecektir.


Kod:
def objective(trial):

    rf_max_depth = trial.suggest_int(‘rf_max_depth’, 2, 32, log=False)

    rf_max_features = trial.suggest_int(‘rf_max_features’, 2, 10, log=False)

    rf_n_estimators = trial.suggest_int(‘rf_n_estimators’, 3, 20, log=False)

    classifier_obj = RandomForestClassifier(max_features = rf_max_features, max_depth = rf_max_depth, n_estimators = rf_n_estimators)

    classifier_obj.fit(x_egitim, y_egitim)

    accuracy = classifier_obj.score(x_test, y_test)

    return accuracy

study_rf = optuna.create_study(direction=‘maximize’)

study_rf.optimize(objective, n_trials=30)

print(study_rf.best_trial)

Kod:
rf = RandomForestClassifier(max_features = study_rf.best_trial.params[‘rf_max_features’], max_depth = study_rf.best_trial.params[‘rf_max_depth’], n_estimators = study_rf.best_trial.params[‘rf_n_estimators’])

rf.fit(x_egitim, y_egitim)

rf_egitim, rf_test = rf.score(x_egitim, y_egitim), rf.score(x_test, y_test)

print(f“Egitim Skoru: {rf_egitim}“)

print(f“Test Skoru: {rf_test}“)

Kod:
from matplotlib import pyplot as plt

def f_importance(coef, names, top=-1):

    imp = coef

    imp, names = zip(*sorted(list(zip(imp, names))))

    # Show all features

    if top == -1:

        top = len(names)

    plt.barh(range(top), imp[::-1][0:top], align=‘center’)

    plt.yticks(range(top), names[::-1][0:top])

    plt.title(‘feature importance for dt’)

    plt.show()

# whatever your features are called

features_names = selected_features

# Specify your top n features you want to visualize.

# You can also discard the abs() function

# if you are interested in negative contribution of features

f_importance(abs(rf.feature_importances_), features_names, top=7)

011923_1629_PYTHONLEZN8.png

3.14 SKLearn Gradyan Artırma Modeli

Gradient Boosting modeli, bir önceki modelin hatalarını düzeltmek için kullanılan bir model türüdür. Bu model, bir takım adımları izleyerek çalışır:
  • İlk adımda, bir başlangıç modeli oluşturulur. Bu model, veri setindeki tüm özellikleri kullanarak verileri tahmin etmeye çalışır.​
  • Daha sonra, veri setindeki hataları tahmin eden bir model daha oluşturulur. Bu model, önceki modelin tahminlerinden farklı olarak hataları tahmin etmeye çalışır.​
  • Bu iki modelin tahminleri toplandıktan sonra, hataları düzeltmeye yönelik bir adım daha atılır. Bu adımda, veri setindeki hataları tahmin eden model kullanılarak, önceki modelin hataları düzeltilir ve yeni bir model oluşturulur.​
  • Bu adım tekrar edilir ve her seferinde bir önceki modelin hataları düzeltilerek, daha iyi bir model oluşturulur. Bu işlem, belirli bir sayıda adım sonra durdurulur ve en iyi model seçilir.​
SKLearn kütüphanesi, bu modeli kullanarak veri setlerini tahmin etmeyi ve hataları düzeltmeyi kolaylaştıran bir araç sunmaktadır.

Kod:
SKGB = GradientBoostingClassifier(random_state=42)

SKGB.fit(x_egitim, y_egitim)

Kod:
SKGB_egitim, SKGB_test = SKGB.score(x_egitim , y_egitim), SKGB.score(x_test , y_test)

print(f“Egitim Skoru: {SKGB_egitim}“)

print(f“Test Skoru: {SKGB_test}“)

3.15 XGBoost Gradyan Artırma Modeli

XGBoost Gradyan Artırma, bir makine öğrenimi modelidir. Bu model, verileri öğrenerek bir tahmin yapmayı amaçlar. Öğrenme işlemi, verilere göre bir çok küçük model oluşturulması ve bunların bir arada kullanılarak tahmin yapılmasıdır.

Bu model, veri setine uygulanmak üzere küçük model çeşitleri oluşturur. Bu model çeşitleri, veri setini parçalara böler ve her bir parçaya kendi modelini uygular. Daha sonra, bu küçük modellerin tahminleri bir araya getirilerek genel tahmin yapılır. Bu model, veri setinin özelliklerine göre en uygun model çeşidini seçerek, en doğru tahminleri yapmayı hedefler.

XGBoost, Gradyan Artırma adını alır çünkü model çeşitlerinin oluşturulması sırasında, bir sonraki modelin oluşturulmasında önceki modellerin tahminlerinden yararlanılır. Bu sayede, her model önceki modellerin hatalarını düzeltmeye çalışır ve sonuç olarak daha doğru tahminler yapılır.

XGBoost, Gradyan Artırma modeli genellikle çok çeşitli veri setlerinde kullanılır ve çok yüksek doğruluk oranlarına sahiptir. Bu model, hem sınıflandırma hem de regresyon problemlerinde kullanılabilir.


Kod:
xgb_model = XGBClassifier(objective=“binary:logistic”, random_state=42)

xgb_model.fit(x_egitim, y_egitim)




Kod:
xgb_egitim, xgb_test = xgb_model.score(x_egitim , y_egitim), xgb_model.score(x_test , y_test)

print(f“Egitim Skoru: {xgb_egitim}“)

print(f“Test Skoru: {xgb_test}“)

---------------------------------

3.16 Hafif Gradyan Artırma Modeli

Hafif Gradyan Artırma modeli, bir sistemin performansının ölçülmesi için kullanılan bir yöntemdir. Bu model, bir sistemdeki değişikliklerin ne kadar büyük olacağını tahmin etmek için bir ölçüt kullanır. Ölçüt, sistemdeki bir değişikliğin ne kadar büyük olacağını gösterir ve genellikle bir sayı olarak ifade edilir.
Bu model, sistemdeki bir değişikliğin etkisini ölçmek için kullanılır. Örneğin, bir firma, bir ürünün satışını artırmak için reklam kampanyası düzenleyebilir. Bu reklam kampanyası, ürünün satışını belli bir oranda artırabilir. Bu oran, Hafif Gradyan Artırma modeli kullanılarak tahmin edilebilir.
Bu model, sistemdeki bir değişikliğin ne kadar büyük olacağını tahmin etmek için bir ölçüt kullanır. Bu ölçüt, sistemdeki bir değişikliğin ne kadar büyük olacağını gösterir ve genellikle bir sayı olarak ifade edilir. Örneğin, bir firma, bir ürünün satışını artırmak için reklam kampanyası düzenleyebilir. Bu reklam kampanyası, ürünün satışını belli bir oranda artırabilir. Bu oran, Hafif Gradyan Artırma modeli kullanılarak tahmin edilebilir.
Bu model, sistemdeki bir değişikliğin etkisini ölçmek için kullanılır. Örneğin, bir firma, bir ürünün satışını artırmak için reklam kampanyası düzenleyebilir. Bu reklam kampanyası, ürünün satışını belli bir oranda artırabilir. Bu oran, Hafif Gradyan Artırma modeli kullanılarak tahmin edilebilir. Bu model, sistemdeki bir değişikliğin ne kadar büyük olacağını tahmin etmek için bir ölçüt kullanır. Bu ölçüt, sistemdeki bir değişikliğin ne kadar büyük olacağını gösterir ve genellikle bir sayı olarak ifade edilir. Örneğin, bir firma, bir ürünün satışını artırmak için reklam kampanyası düzenleyebilir. Bu reklam kampanyası, ürünün satışını belli bir oranda artırabilir. Bu oran, Hafif Gradyan Artırma modeli kullanılarak tahmin edilebilir.
Bu model, aynı zamanda sistemdeki bir değişikliğin etkisini önceden tahmin etmek için de kullanılabilir. Örneğin, bir firma, bir ürünün satışını artırmak için reklam kampanyası düzenleyecektir ve bu reklam kampanyasının etkisini önceden tahmin etmek ister. Bu tahmin, Hafif Gradyan Artırma modeli kullanılarak yapılabilir. Bu model, sistemdeki bir değişikliğin etkisini önceden tahmin etmek için kullanılan bir yöntemdir ve genellikle bir sayı olarak ifade edilir.
lgb_model = LGBMClassifier(random_state=42)
lgb_model.fit(x_egitim, y_egitim)
lgb_egitim, lgb_test = lgb_model.score(x_egitim , y_egitim), lgb_model.score(x_test , y_test)

print(f“Egitim Skoru: {lgb_egitim}“)
print(f“Test Skoru: {lgb_test}“)

3.17 SKLearn AdaBoost Modeli

AdaBoost, Adaptive Boosting olarak da adlandırılan bir yöntemdir. Bu yöntem, diğer “booster” yöntemleri gibi, önceki birbirini takip eden sınıflandırıcı modelleri kullanarak yeni bir model oluşturmayı amaçlar. Ancak AdaBoost, diğer booster yöntemlerinden farklı olarak, önceki modellerin tahminlerinin doğruluğuna göre ağırlıklarını değiştirir.
AdaBoost modelinin çalışma şekli şu şekildedir:
  • Bir veri seti kullanılarak, ilk sınıflandırıcı model oluşturulur. Bu modelin tahminleri incelenir ve tahminlerin doğruluğuna göre, veri setindeki örnekler ağırlıkları değiştirilir. Doğru tahminler yapılan örneklerin ağırlıkları azaltılırken, yanlış tahminler yapılan örneklerin ağırlıkları arttırılır.​
  • Değiştirilen ağırlıklar ile, ikinci bir sınıflandırıcı model oluşturulur. Bu modelin tahminleri de tekrar incelenir ve veri setindeki örneklerin ağırlıkları değiştirilir.​
  • Bu işlem, istenilen sayıda sınıflandırıcı model oluşturulduğu sürece devam eder.​
  • Son olarak, oluşturulan tüm sınıflandırıcı modellerin tahminleri birleştirilerek, AdaBoost modelinin tahminleri oluşturulur.​
AdaBoost modelinin avantajları, önceki modellerin tahminlerinin doğruluğuna göre ağırlıklarını değiştirme özelliği sayesinde, diğer booster yöntemlerine göre daha iyi tahminler yapabilme yeteneğine sahip olmasıdır. Ayrıca, bu model, küçük veri setlerinde de iyi performans göstermektedir. Ancak, AdaBoost modelinin bir dezavantajı, modeli oluşturmak için kullanılan sınıflandırıcı modellerin önceden belirlenmesi gerekmektedir. Bu da modelin esnekliğini azaltabilir.
ab_model = AdaBoostClassifier(random_state=42)
ab_model.fit(x_egitim, y_egitim)
ab_egitim, ab_test = ab_model.score(x_egitim , y_egitim), ab_model.score(x_test , y_test)

print(f“Egitim Skoru: {ab_egitim}“)
print(f“Test Skoru: {ab_test}“)

3.18 CatBoost Sınıflandırma Modeli

CatBoost, bir sınıflandırma modelidir ve yüksek performanslı bir gradient boosting yöntemidir. Bu yöntem, önceki tahminlerden daha iyi tahminler üretmek için bir dizi karar ağacı kullanır. Her karar ağacı, veri kümesinden öğrenilen özellikleri kullanarak sınıflandırma yapar.
CatBoost, diğer gradient boosting yöntemlerinden farklı olarak kategorik değişkenleri işleyebilen özel bir yöntemdir. Bu, diğer yöntemler gibi kategorik değişkenleri sayısal değişkenlere çevirmeye gerek kalmadan doğrudan işleme imkanı verir.
Ayrıca, CatBoost, overfitting problemine karşı dayanıklıdır ve önceden belirlenmiş bir loss fonksiyonu üzerinde optimize edilir. Bu, tahminlerin daha iyi bir hassasiyet ve daha iyi generalizasyon özellikleri sağlar.
CatBoost modeli, veri kümesine uygun bir model seçimi, model parametrelerinin ayarlanması ve model eğitimi için bir Python kütüphanesidir. Model eğitimi sırasında, modelin
tahminlerini optimize etmek
için bir periyodik validasyon adımı gerçekleştirilir. Bu adım, modelin tahminlerinin doğruluğunu artırmak için overfitting problemini azaltır.
cb_model = CatBoostClassifier(verbose=0)
cb_model.fit(x_egitim, y_egitim)
cb_egitim, cb_test = cb_model.score(x_egitim , y_egitim), cb_model.score(x_test , y_test)

print(f“Egitim Skoru: {cb_egitim}“)
print(f“Test Skoru: {cb_test}“)

3.19 Naive Bayes Sınıflandırıcı Modeli

Naive Bayes sınıflandırıcı modeli, bir veri kümesinde belirli bir sınıfa ait olan bir örneği tahmin etmek için kullanılan bir yöntemdir. Bu model, bir örneğin sınıfını tahmin etmek için örnekteki her bir özniteliğin (özelliklerin) olasılığını hesaplar ve en yüksek olasılığa sahip olan sınıfı seçer.
Naive Bayes modeli, özniteliklerin birbirlerinden bağımsız olduğu varsayımına dayanır. Bu varsayım, özniteliklerin birbirlerine etkisinin olmadığı anlamına gelir ve bu nedenle özniteliklerin olasılıkları birbirlerine göre değil, ayrı ayrı hesaplanır.
Naive Bayes modeli, kategorik veya sayısal öznitelikler için kullanılabilir. Kategorik öznitelikler için, her bir kategori için bir sayı verir ve sayısal öznitelikler için ise, özniteliğin dağılımını temsil eden bir dağılım fonksiyonu kullanır.
Naive Bayes modeli, hızlı ve basit bir yöntemdir ve genellikle veri kümelerinde iyi performans gösterir. Ancak, özniteliklerin birbirlerinden bağımsız olduğu varsayımı genellikle gerçekçi olmayabilir ve bu nedenle modelin performansını olumsuz etkileyebilir.
BNB_model = BernoulliNB()
BNB_model.fit(x_egitim, y_egitim)
BNB_egitim, BNB_test = BNB_model.score(x_egitim , y_egitim), BNB_model.score(x_test , y_test)

print(f“Egitim Skoru: {BNB_egitim}“)
print(f“Test Skoru: {BNB_test}“)

3.20 Oylama Modeli

Oylama modeli, bir topluluğun ya da bir grubun üyelerinin bir konuda fikirlerini ve tercihlerini belirlemek için kullanılan bir yöntemdir. Bu model, genellikle bir seçim süreci ya da bir karar alma sürecinde kullanılır.
Oylama modelinde, öncelikle bir sorun ya da konu belirlenir ve bu konu hakkında farklı seçenekler ya da öneriler sunulur. Daha sonra, üyeler bu seçenekleri değerlendirir ve bir tercihte bulunur. Bu tercihler, genellikle oy kullanarak yapılır. Örneğin, bir seçim sürecinde, üyelerin bir başkan adayı seçmek için kullandıkları oylamalar, oylama modelinin bir örneğidir.
Oylama modelinin önemli bir yönü, üyelerin oy verirken objektif bir şekilde düşünmesi gerektiğidir. Bu sayede, topluluk ya da grubun en iyi yararına olan seçenek seçilebilir. Ayrıca, oylama modelinde, oy verme hakkı genellikle eşit olarak dağıtılır, bu sayede her üye eşit sayıda söz hakkına sahiptir.
Oylama modelinin önemli bir dezavantajı ise, üyelerin farklı fikirleri ve tercihleri olması nedeniyle, genellikle bir anlaşma ya da konsensüs sağlanamamasıdır. Bu nedenle, oylama modelinin yanı sıra, diğer yöntemler de kullanılabilir.
v_clf = VotingClassifier(estimators=[(‘KNeighborsClassifier’, KNN_model), (“XGBClassifier”, xgb_model), (“RandomForestClassifier”, rf), (“DecisionTree”, dt), (“XGBoost”, xgb_model), (“LightGB”, lgb_model), (“AdaBoost”, ab_model), (“Catboost”, cb_model)], voting = “hard”)

v_clf.fit(x_egitim, y_egitim)
voting_egitim, voting_test = v_clf.score(x_egitim , y_egitim), v_clf.score(x_test , y_test)

print(f“Egitim Skoru: {voting_egitim}“)
print(f“Test Skoru: {voting_test}“)

3.21 Destek Vektör Makineleri Modeli

Destek Vektör Makineleri (SVM), özellikler arasındaki sınırları belirleyen bir makine öğrenimi modelidir. Bu sınırları, veri setinde maksimum margin’i (ara boşluğu) sağlayacak şekilde belirler.
SVM modeli, verileri iki sınıfa böler ve bu sınıflar arasında bir sınır çizer. Bu sınırın bir tarafındaki veriler bir sınıfı, diğer tarafındaki veriler ise diğer sınıfı temsil eder. Sınırın belirlenmesinde, veri setinde bulunan en yakın verilere odaklanılır. Bu verilere “destek vektörleri” denir ve sınırı belirler.
SVM modeli, veri setinde bulunan destek vektörlerinin sayısını azaltarak modeli daha basit hale getirir. Bu sayede, model daha hızlı öğrenir ve daha iyi tahminler yapar.
SVM modeli, iki sınıf arasındaki sınırı belirlerken aynı zamanda çok sınıflı veri setlerinde de kullanılabilir. Bu durumda, her sınıf için ayrı ayrı sınırlar çizilir ve her sınıfın destek vektörleri belirlenir.
SVM modeli, çok sayıda özellik içeren veri setlerinde de etkili bir şekilde kullanılabilir. Bu durumda, özellikler arasındaki ilişkiler incelenir ve en etkili özellikler seçilerek model oluşturulur.
SVM modeli, diğer makine öğrenimi modellerinden farklı olarak lineer olmayan veri setlerinde de etkili bir şekilde kullanılabilir. Bu durumda, veri setinde bulunan veriler kernel fonksiyonları kullanılarak dönüştürülür ve lineer bir veri setine dönüştürülür. Böylece, model lineer olmayan veri setlerinde de etkili bir şekilde kullanılabilir.
def objective(trial):
kernel = trial.suggest_categorical(‘kernel’, [‘linear’, ‘rbf’, ‘poly’, ‘linearSVC’])
c = trial.suggest_float(‘c’, 0.02, 1.0, step=0.02)
if kernel in [‘linear’, ‘rbf’]:
classifier_obj = SVC(kernel=kernel, C=c).fit(x_egitim, y_egitim)
elif kernel == ‘linearSVC’:
classifier_obj = LinearSVC(C=c).fit(x_egitim, y_egitim)
elif kernel == ‘poly’:
degree = trial.suggest_int(‘degree’, 2, 10)
classifier_obj = SVC(kernel=kernel, C=c, degree=degree).fit(x_egitim, y_egitim)

accuracy = classifier_obj.score(x_test, y_test)
return accuracy
study_svm = optuna.create_study(direction=‘maximize’)
study_svm.optimize(objective, n_trials=30)
print(study_svm.best_trial)
if study_svm.best_trial.params[‘kernel’] in [‘linear’, ‘rbf’]:
SVM_model = SVC(kernel=study_svm.best_trial.params[‘kernel’], C=study_svm.best_trial.params[‘c’])
elif kernel == ‘linearSVC’:
SVM_model = LinearSVC(C=study_svm.best_trial.params[‘c’])
elif kernel == ‘poly’:
SVM_model = SVC(kernel=study_svm.best_trial.params[‘kernel’], C=study_svm.best_trial.params[‘c’], degree=study_svm.best_trial.params[‘degree’])

SVM_model.fit(x_egitim, y_egitim)

3.22 Özet

Kullanılan tüm modellerin karşılaştırmalı bir çıktısını elde etmek için aşağıdaki komut seti kullanılmıştır.
data = [[“K En Yakın Komşular (KNN) sınıflandırma”, KNN_egitim, KNN_test],
[“Lojistik Regresyon”, lg_egitim, lg_test],
[“Karar Destek Agaci”, dt_egitim, dt_test],
[“Rassal Orman”, rf_egitim, rf_test],
[“SKLearn Gradyan Artırma Modeli”, SKGB_egitim, SKGB_test],
[“XGBoost Gradyan Artırma Modeli”, xgb_egitim, xgb_test],
[“Adaboost Gradyan Modeli”, ab_egitim, ab_test],
[“Hafif Gradyan Modeli “, lgb_egitim, lgb_test],
[“CatBoost Sınıflandırma Modeli”, cb_egitim, cb_test],
[“Naive Baye Modeli”, BNB_egitim, BNB_test],
[“Oylama Modeli”, voting_egitim, voting_test],
[“Destek Vektor Makineleri”, SVM_egitim, SVM_test]]

col_names = [“Model”, “Egitim Skoru”, “Test Skoru”]
print(tabulate(data, headers=col_names, tablefmt=“fancy_grid”))
Colab üzerinden kodlara erişebilirsiniz.
Test ve Eğitim Verisini isteyenler email üzerinden iletişime geçebilirler.
  1. Kaynaklar

  2. Şeker, E,. (2020). Yapay Zeka Tekniklerinin / Uygulamalarının Siber Savunmada Kullanımı. Uluslararası Bilgi Güvenliği Mühendisliği Dergisi, Cilt:6, NO:2, S:108-115
  3. Durna, M.,B. (2019) Veri Bilimi İçin Temel Python Kütüphaneleri-1 : Numpy [Kullanılabilir Çevrim-içi: Veri Bilimi İçin Temel Python Kütüphaneleri-1 : Numpy], Erişim Tarihi : 10 Ocak 2023.​
  4. Bayraktar, B. (2019) A’dan Z’ye Pandas Tutoriali (Başlangıç ve Orta Seviye) – Medium [Kullanılabilir Çevrim-içi: Aâdan Zâye Pandas Tutoriali (BaÅlangıç ve Orta Seviye)], Erişim Tarihi : 10 Ocak 2023.​
  5. Alabaş, M. (2019) Python İle Veri Görselleştirme: Matplotlib Kütüphanesi-1 [Kullanılabilir Çevrim-içi: Python Ä°le Veri GörselleÅtirme: Matplotlib Kütüphanesi-1], Erişim Tarihi : 10 Ocak 2023.​
  6. İstanbullu, C. (2022) Parametre optimizasyonuna pratik bir çözüm: Optuna [Kullanılabilir Çevrim-içi: Parametre optimizasyonuna pratik bir çözüm: Optuna], Erişim Tarihi : 10 Ocak 2023.​
  7. Muratlar, E., R. (2020) XGBoost Nasıl Çalışır? Neden İyi Performans Gösterir? [Kullanılabilir Çevrim-içi: XGBoost Nasıl Çalışır? Neden İyi Performans Gösterir? - Veri Bilimi Okulu], Erişim Tarihi : 10 Ocak 2023.​
  8. Muratlar, E., R. (2020) CatBoost Nedir? Diğer Boosting Algoritmalarından Farkı …Veri Görselleştirme – Veri Bilimi Okulu [Kullanılabilir Çevrim-içi: CatBoost Nedir? Diğer Boosting Algoritmalarından Farkı Nelerdir? - Veri Bilimi Okulu], Erişim Tarihi : 10 Ocak 2023.​
  9. Muratlar, E., R. (2020) LightGBM – Veri Bilimi Okulu [Kullanılabilir Çevrim-içi: LightGBM - Veri Bilimi Okulu], Erişim Tarihi : 10 Ocak 2023.​
  10. Karabay, A. (2020) Scikit-learn Nedir ? [Kullanılabilir Çevrim-içi: Scikit-learn Nedir ?], Erişim Tarihi : 10 Ocak 2023.​
  11. Aygün R, C,. (2017). Derin Öğrenme ile Yöntemleri ile Bilgisayar Ağlarında Güvenliğe Yönelik Anormallik Tespiti. Yayımlanmış yüksek lisans tezi. Yıldız Teknik Üniversitesi, FenBilimleri Enstitüsü, İstanbul.​
  12. Tanrıkulu, H. (2009). Saldırı Tespit Sistemlerinde Yapay Sinir Ağlarının Kullanılması. (Doctoral dissertation, Yüksek Lisans Tezi, Ankara Üniversitesi Fen Bilimleri Enstitüsü, Ankara)​
  13. Y. Zhang, X. Chen, L. Jin, X. Wang, and D. Guo, “Network intrusion detection: Based on deep hierarchical network and original flow data,” IEEE Access, vol. 7, pp. 37 004–37 016, 2019​
  14. Koyuncu, M, D,. Ünlü, N,. (2022). Yapay Zeka Tekniklerinin Saldırı Tespit Sistemlerinde Kullanımı. Beykoz Akademi Dergisi, 2022; 10(1), 78-87
  15. Çiftçi, H., (2013). Her Yönüyle Siber Savaş. Ankara: Tübitak Yayınları , ISBN
    9789754037517​
  16. Özkaya, E., Sarıca, R., Durmaz, Ş., (2019). Siber Güvenlik: Saldırı ve Savunma Stratejileri. Ankara : Buzdağı Yayınları, ISBN 9786056902444​
  17. Oorschot, P, V, (2022). Siber Güvenliğe Giriş. Ankara: Palme Yayıncılık, ISBN
    9786052828465​
  18. V. K. Pachghare, P. Kulkarni, D. M. Nikam,”Intrusion Detection System using Self Organizing Maps”, International Conference on Intelligent Agent & Multimedia Agent Systems, 2009​
  19. Şeker, E,. (2020). Yapay Zeka Tekniklerinin / Uygulamalarının Siber Savunmada Kullanımı. Uluslararası Bilgi Güvenliği Mühendisliği Dergisi, Cilt:6, NO:2, S:108-115​
  20. Zeyer, A., Doetsch, P., Voigtlaender, P., Schlüter, R., Ney, H. (2017). A Comprehensive Study of Deep Bidirectional LSTM Rnns For Acoustic Modeling in Speech Recognition. In Acoustics, Speech and Signal Processing (ICASSP), 2017 IEEE International Conference on, IEEE, pp. 2462-2466.​
  21. Bulut, İ. (2017). Analiz Sürecini Atlatmaya Çalışan Zararlı Yazılımlar Ve Derin
    Öğrenme Temelli Zararlı Yazılım Tespit. Yayımlanmış yüksek lisans tezi. Yıldız Teknik Üniversitesi, FenBilimleri Enstitüsü, İstanbul.​
  22. Karakuş, S,. (2018). Derin Öğrenme Yöntemlerinin Kullanılarak Dijital Deliller
    Üzerinde Adli Bilişim İncelemesi. Yayımlanmamış yüksek lisans tezi. Fırat Üniversitesi, FenBilimleri Enstitüsü, Elazığ.​
  23. V. Chatzigiannakis, G. Androulidakis, B. Maglaris, “A Distributed Intrusion Detection Prototype Using Security Agents”. HP OpenView University Association, 2004​
  24. Arıcı, N., & Yıldız, E. (2010). Gerçek Zamanlı Bir Saldırı Tespit Sistemi Tasarımı Ve
    Gerçekleştirimi. E-Journal of New World Sciences Academy Engineering
    Sciences
    , 5(2)​
  25. Q. Zhou and D. Pezaros, “Evaluation of machine learning classifiers for zero-day intrusion detection – an analysis on CIC-AWS-2018 dataset,” CoRR, vol. abs/1905.03685, 2019. [Online]. Available: http://arxiv.org/abs/1905.03685
  26. Mukkamala S., Janoski G., Sung A. H. (2002) “Intrusion Detection Using Neural Networks and Support Vector Machines,” Proceedings of IEEE International Joint Conference on Neural Networks, pp.1702-1707.​
  27. H. Holm, “Signature based intrusion detection for zero-day attacks: (not) a closed chapter?” in 2014 47th Hawaii International Conference on System Sciences, Jan 2014, pp. 4895–4904.​
  28. Şahingöz, Ö. K., Buber, E., Demir, Ö. & Diri, B. (2019).
    Machine learning based phishing detection from URLs.
    Expert Systems with Applications, 117, 345-357​
  29. V. Jyothsna, V. V. Rama Prasad, and K. Munivara Prasad, “A review of anomaly based intrusion detection systems,” International Journal of Computer Applications, vol. 28, pp. 26–35, 08 2011​
  30. Koçyiğit, E,. (2021). Derin Öğrenme ile İçerik Tabanlı Siber Tehdit Tespiti. Yayımlanmış yüksek lisans tezi. Yıldız Teknik Üniversitesi, FenBilimleri Enstitüsü, İstanbul.​
  31. N. Ben-Asher and C. Gonzalez, “Effects of cyber security knowledge on attack detection,” Computers in Human Behavior, vol. 48, pp. 51 – 61, 2015.​
  32. B. Jasiul, M. Szpyrka, and J. ́Sliwa, “Detection and modeling of cyber attacks with petri nets,” Entropy, vol. 16, no. 12, pp. 6602–6623, 2014.​
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.