Bulanık Mantık ile Araç Fiyat Tahmini

PwnLab.Me

Admin
Katılım
21 Ocak 2024
Mesajlar
203
Tepkime puanı
10
Puanları
18
Salih Öztürk tarafından yazılmıştır.

[TR] Bulanık Mantık ile Araç Fiyat Tahmini​


Herkese merhaba, bu yazımda Araç Fiyat Tahmin Problemini Bulanık Mantık ile gerçekleştireceğiz. Öncelikle örneğimize bakalım.
[B]Örnek:[/B] 100 tane ikinci el arabanın model ve kilometre bilgisini tutan bir veritabanı olduğunu düşünelim. Amacımız; bu bilgilere bakarak, araçların yaklaşık fiyatlarını tahmin eden bir bulanık sistem tasarlamak. Örnek araç problemini Ağırlık ortalaması durulaştırma yöntemi ve üyelik fonksiyonunu gauss seçerek gerçekleştiriniz. Model=2011 ve Kilometre=25 için çıktı fiyatını bulunuz.

Bu durumda bize verilen bilgiler şu şekildedir:
•[B] Giriş değerleri:[/B] model ve km
• [B]Çıkış değeri:[/B] fiyat
Olduğunu söyleyebiliriz. Her bir değişken için belirlediğimiz dilsel değerler şu şekilde olsun:
• [B]Model:[/B] Düşük [2002, 2007 yıl], Orta [2002, 2012 yıl], Yüksek [2007, 2012 yıl]
• [B]Kilometre:[/B] Düşük [0, 50K km], Orta [0, 100K km], Yüksek [50K, 100K km]
• [B]Fiyat:[/B] Düşük [0, 20K TL], Orta [0, 40K TL], Yüksek [20K, 40K TL]

Kurallarımız ise şu şekilde olsun diyelim.
[B]KURAL 1:[/B] EĞER model Düşük VE kilometre Yüksek ise, O HALDE fiyat Düşüktür.
[B]KURAL 2:[/B] EĞER model Orta VE kilometre Orta ise, O HALDE fiyat Ortadır.
[B]KURAL 3:[/B] EĞER model Yüksek VE kilometre Düşük ise, O HALDE fiyat Yüksektir.

Girdi ve çıktı değerlerini belirlenip kurallarımızı oluşturduktan sonra uygulamamıza geçebiliriz.

Öncelikle örnekte istenilen Ağırlık ortalaması durulaştırma yöntemini incelediğimde bu metodun SUGENO Çıkarımına ait olduğunu anlıyorum. Çünkü; Mamdani çıkarımında beş bulanıklaştırma yöntemi kullanılır bunlar: ağırlık merkezi (centroid), açıortay (bisector), maksimumun en büyüğü (lom), maksimumun ortası (mom) ve maksimumun en küçüğü (som). Buna karşılık, Sugeno’da sadece iki tür bulanıklaştırma vardır: ağırlıklı ortalama (wtaver) ve ağırlıklı toplam (wtsum).

‘wtaver’ – Tüm kural çıktılarının ağırlıklı ortalaması. Bu yöntem, Sugeno sistemleri için varsayılandır.
Örnekte istenilen Gauss Üyelik fonksiyonunun formülü ise aşağıdaki resimde görüldüğü gibidir.

Gauss Üyelik Fonksiyonu Formülü
Gauss Üyelik Fonksiyonu Formülü

Şimdi örneğimi MATLAB üzerinden uygulamaya geçebiliriz. Matlab programını açtıktan sonra komut penceresine FUZZY yazıyorum ve FIS editörü açıldı.
Daha sonra FİLE > NEW FIS > SUGENO diyerek yeni bir FIS editörü açıyorum.

Sugeno Metodu Açılışı
Sugeno Metodu Açılışı

Daha sonra EDIT>ADD VARIABLE >INPUT diyerek yeni bir girdi fonksiyonu ekliyorum

Girdi Degiskeni Ekleme
Girdi Degiskeni Ekleme

Şimdide girdi üyelik fonksiyonlarımın isimlerini Name kısmından veriyorum.

Girdi Fonksiyonlarının Ismini Belirle
Girdi Fonksiyonlarının Ismini Belirle

Daha sonra Model girdime tıklayarak üyelik fonksiyonlarımı GAUSSIAN olarak seçip isimlerini dusuk orta ve yüksek olarak belirledim. Range aralığımı ise örneğin bilgi kısmında verildiği gibi 2002-2012 olarak girdim.

Model Girdisinin Dusuk Grafik Gösterimi
Model Girdisinin “Dusuk” Grafik Gösterimi ve Params Değeri
Model Girdisinin Orta Grafik Gösterimi
Aynı Girdinin “Orta” Grafik Gösterimi
Model Girdisinin Yuksek Grafik Gösterimi
Son olarak Model Girdisinin “Yuksek” Grafik Gösterimi

Yukarıdaki üç resimde Model girdi fonksiyonumun üyelik fonksiyonlarını Gaussian olarak seçtikten ve range aralığımı verdikten sonra üyelik fonksiyonlarının değer aralığını matematiksel olarak hesaplamaya geçebilirim. Bulanık küme teorisinde üyelik fonksiyonlarının değer aralığı [0,1] aralığı olmaktadır. Yukarı verdiğim Gauss Üyelik Fonksiyonu formülüne göre hesaplama yapacak olursak;

𝜇Mdüşük(2011) için; exp[ -1/2 * ((2011-2002/2.123 )^2)] =0.00012=0
𝜇Morta(2011) ) için; exp[ -1/2 * ((2011-2007/2.123 )^2)] =0.1695
𝜇Myüksek(2011) için; exp[ -1/2 * ((2011-2012/2.123 )^2)] =0.8950

Kesin değerlerini elde ettim. Aşağıdaki grafiğe baktığımızda ise Model 2011’den yukarıya bir çizgi çizdiğimizde [0 1] aralığındaki yaklaşık değerleri görebiliriz.

Model Girdisinin 2011'de ki Çıktı Değerleri Gösterimi
Model Girdisinin 2011’de ki Çıktı Değerleri Gösterimi

Şimdide aynı şekilde Kilometre girdime tıklayarak üyelik fonksiyonlarımı GAUSSIAN olarak seçip isimlerini dusuk orta ve yüksek olarak belirledim. Range aralığımı ise örneğin bilgi kısmında verildiği gibi 0 -100 olarak yazdım.

Kilometre Girdisinin Dusuk Grafik Gösterimi
Kilometre Girdisinin “Dusuk” Grafik Gösterimi ve Params Değeri
Kilometre Girdisinin Orta Grafik Gösterimi
KM Girdisinin “Orta” Grafik Gösterimi
Kilometre Girdisinin Yuksek Grafik Gösterimi
KM Girdisinin “Yuksek” Grafik Gösterimi

Yukarıdaki üç resimde Kilometre girdi fonksiyonumun üyelik fonksiyonlarını Gaussian olarak seçtikten ve range aralığımı verdikten sonra üyelik fonksiyonlarının değer aralığını Matematiksel olarak hesaplamaya geçebilirim.
Gauss Üyelik Fonksiyonu formülüne göre hesaplama yapacak olursak;

𝜇Kdüşük(25) için; exp[ -1/2 * ((25-0/21.23 )^2)] =0.4999
𝜇Korta(25) için; exp[ -1/2 * ((25-50/21.23 )^2)] =0.4999
𝜇Kyüksek(25) için; exp[ -1/2 * ((25-100/21.23 )^2)] =0.0019

Kesin değerlerini elde ettim. Aşağıdaki grafiğe baktığımızda ise Kilometre 25’den yukarıya bir çizgi çizdiğimizde [0 1] aralığındaki yaklaşık değerleri görebiliriz.

Kilometre Girdisinin 25'de ki Çıktı Değerleri Gösterimi
Kilometre Girdisinin 25’de ki Çıktı Değerleri Gösterimi

Girdi fonksiyonlarımı bitirdikten sonra ÇIKIŞ fonksiyonuma geçiyorum ve FİYAT’a tıklayarak üyelik fonksiyonlarımı CONSTANT olarak seçip isimlerini dusuk orta ve yüksek olarak belirledim. Range aralığımı ise örneğin bilgi kısmında verildiği gibi 0-40 olarak yazdım.

Fiyat Çıktısı Dusuk Üyelik Tipi ve Params Değeri Gösterimi
Fiyat Çıktısı “Dusuk” Üyelik Tipi ve Params Değeri Gösterimi
Fiyat Çıktısının Orta Üyelik Tipi ve Params Değeri Gösterimi
Aynı Çıktının “Orta” Params Değeri Gösterimi
Fiyat Çıktısının Yuksek Üyelik Tipi ve Params Değeri Gösterimi
Son olarak Fiyat Çıktısının “Yuksek” Params Değeri Gösterimi

Buraya kadar oluşturduğumuz kısımlar, bulanık sistemde geçen bilgi tabanı kısmının bir bölümünü oluşturmaktadır (Veri tabanı). Bu adımları yaptıktan sonra kural oluşturma adımına geçiyorum. Kural tabanını örneğin bilgi kısmında verildiği gibi üç kural şeklinde AND işlemini kullanarak Kural Tabloma ADD RULE diyerek ekledim.

kural_tablosu
Kural Tablosu

Kuralları ve elimizdeki değerleri( Model=2011 ve Kilometre=25) incelersek, 2. ve 3. kuralların tetiklendiğini söyleyebiliriz.

Kural tabanında AND’leme işlemi yaptığımız için ve SUGENO çıkarımını kullandığımız için tıpkı Mamdani’de olduğu gibi AND’leme işlemi minimum operatöre verir.

Tetiklenen 2. kural için,
min(model_orta, kilometre_orta) = fiyat_orta değerlerini yerine koyarsak:
min(0.1695, 0.4999) = fiyat_orta = 0.1695

Aynı şekilde 3. kural için aynı işlemleri yaparsak:
min(model_yüksek, kilometre_düşük) = fiyat_yüksek
min(0.8950, 0.4999) = fiyat_yüksek = 0.4999

Daha sonra View > RULES diyerek kural tablomda istediğim değerleri girerek çıktımı görebilirim.

Kural Tablosu Çıktı Gösterimi
Kural Tablosu Çıktı Gösterimi

Ağırlık Ortalaması Durulaştırma Yöntemine göre (‘wtaver’ ) çıktı değerim=36,8 dir.

agirlik_ortalamasi_durulastirma_formulu
Agirlik Ortalamasi Durulastirma Formülü

Bunu yukarıdaki formüle göre matematiksel olarak hesaplayacak olursam;

Yduru= [ (0.00012*0 )+ (0.1695 *20 )+ (0.4999*40) ] / (0.00012 + 0.1695 + 0.4999)=34.92950173
cevabı ile yaklaşık olarak sonucu bulmuş oldum.

3 Boyutlu Gösterim
3 Boyutlu Gösterim

3 boyutlu olarak probleme bakacak olursak şekil yukarıdaki gibidir. Böylelikle örneğimizi gerçekleştirmiş olduk
🙂


Kaynaklar


https://ahmetatasoglu98.medium.com
 
Moderatör tarafında düzenlendi:
Geri
Üst