Salih Öztürk tarafından yazılmıştır.
Herkese merhaba, bu yazımda Araç Fiyat Tahmin Problemini Bulanık Mantık ile gerçekleştireceğiz. Öncelikle örneğimize bakalım.
Bu durumda bize verilen bilgiler şu şekildedir:
Olduğunu söyleyebiliriz. Her bir değişken için belirlediğimiz dilsel değerler şu şekilde olsun:
Kurallarımız ise şu şekilde olsun diyelim.
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ü
Ş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ışı
Daha sonra EDIT>ADD VARIABLE >INPUT diyerek yeni bir girdi fonksiyonu ekliyorum
Girdi Degiskeni Ekleme
Şimdide girdi üyelik fonksiyonlarımın isimlerini Name kısmından veriyorum.
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 ve Params Değeri
Aynı Girdinin “Orta” 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
Ş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 ve Params Değeri
KM Girdisinin “Orta” 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
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
Aynı Çıktının “Orta” 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
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.
min(model_orta, kilometre_orta) = fiyat_orta değerlerini yerine koyarsak:
min(0.1695, 0.4999) = fiyat_orta = 0.1695
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
Ağırlık Ortalaması Durulaştırma Yöntemine göre (‘wtaver’ ) çıktı değerim=36,8 dir.
Agirlik Ortalamasi Durulastirma Formülü
Bunu yukarıdaki formüle göre matematiksel olarak hesaplayacak olursam;
cevabı ile yaklaşık olarak sonucu bulmuş oldum.
3 Boyutlu Gösterim
3 boyutlu olarak probleme bakacak olursak şekil yukarıdaki gibidir. Böylelikle örneğimizi gerçekleştirmiş olduk
https://ahmetatasoglu98.medium.com
[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]
fiyatOlduğ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ü
Ş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ışı
Daha sonra EDIT>ADD VARIABLE >INPUT diyerek yeni bir girdi fonksiyonu ekliyorum
Girdi Degiskeni Ekleme
Şimdide girdi üyelik fonksiyonlarımın isimlerini Name kısmından veriyorum.
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 ve Params Değeri
Aynı Girdinin “Orta” 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
Ş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 ve Params Değeri
KM Girdisinin “Orta” 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
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
Aynı Çıktının “Orta” 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
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
Ağırlık Ortalaması Durulaştırma Yöntemine göre (‘wtaver’ ) çıktı değerim=36,8 dir.
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 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: