R ile Örnek Üzerinden İstatiksel Modelleme

İlker Güldalı
6 min readJun 17, 2019

Bu yazıda R dili ile RStudio üzerinde örnek bir veri seti ile k-en yakın komşuluk algoritma uygulamasını ve normalizasyon işlemini gerçekleştirip bazı grafikleri inceleyeceğiz.

Veri Seti

Veri seti olarak UCI Machine Learning Repository platformundaki Wine Quality Data Set tercih edildi.

Veri setinin amacı, Kuzey Portekiz’de yapılan bir araştırma ile bir markaya ait beyaz şarabın kalitesinin fizikokimyasal testlere dayanarak modellemek.

Veri setinde bulunan 12 parametre ile şarabın kalitesi 0–10 arasında numerik olarak belirlenmiştir ve sonuç son parametre olan “kalite” parametresi altında yazılmıştır.

Kullanılan giriş parametreleri şarap içerisinde bulunan maddelerin oranları olarak verilmiştir. Bütün parametreler numerik olup, tümü normalizasyona uygun bir haldedir. Bu parametreler:

1. Sabit asit(tartarik asit — g/dm³):

Şarap içerisindeki sabit/uçucu olmayan asitlerin çoğu.(Kolayca buharlaşmaz)

2. Uçucu asit(asetik asit — g /dm³):

Şaraptaki asetik asit miktarı. Bu asit, çok yüksek seviyelerde tatsızlığa sebep olabilir, sirke tadı verebilir.

3. Sitrik asit(g / dm³):

Küçük miktarlarda bulunan sitrik asit, şaraplara tazelik ve lezzet katabilir.

4. Artık şeker(g / dm³):

Fermantasyon durduktan sonra kalan şeker miktarı, 1 gram/litreden az artık şeker olan şarapları bulmak nadir bir durumdur.45 gram/litreden fazla bulunan artık şekerli şaraplar tatlı olarak kabul edilir.

5. Klorürler(Sodyum klorit — g / dm³):

Şaraptaki tuz miktarı.

6. Serbest Kükürt dioksit(mg / dm³):

Serbest S02 formu, moleküler S02 (çözünmüş bir gaz olarak) ve bisülfit iyonu arasında dengede bulunur; mikrobiyal büyümeyi ve şarabın oksidasyonunu önler.

7. Toplam Kükürt dioksit(mg / dm³):

S02'nin serbest ve bağlı formlarının miktarı; Düşük yoğunluktaki şarapta çoğunlukla saptanamaz ancak 50 ppm üzerindeki serbest SO2 yoğunluklarında şarapta, kokusal ve tatsal belirginleşme olur.

8. Yoğunluk(g / dm³):

Suyun yoğunluğu, suya bağlı olarak yüzdece alkol ve şeker içeriğine bağlıdır.

9. pH:

Bir şarabın nasıl asidik veya bazik olduğunu 0 (çok asidik) ila 14 (çok bazik) arasında bir ölçekte tarif eder; Şarapların çoğu pH ölçeğinde 3–4 arasındadır.

10. Sülfatlar(Potasyum sülfat — g / dm³):

Antimikrobiyal ve antioksidan görevi gören kükürt dioksit gazı (S02) seviyelerine katkıda bulunabilecek bir şarap katkı maddesi.

11. Alkol(Hacimce yüzde):

Şarabın yüzdece alkol değeri.

12. Kalite(0–10 arasında puan):

Duyusal verilere bağlı olarak şarabın kalitesinin denek tarafından 0–10 arasında değerlendirilmesi.

Veri Setinin RStudio’ya Eklenmesi

Çalışma yaptığınız klasör yolu setwd() fonksiyonu içerisinde belirtilir.

k- En yakın komşuluk algoritması ve Normalizasyon

Veri setimize yeni bir değer eklediğimizde ve onun hedef niteliğini bulmak istediğimiz zaman k- en yakın komşuluk algoritması bize yardımcı olacak. Kısaca k- en yakın komşuluk algoritması:

· Yeni eklenen örneğin veri setindeki tüm örneklere olan uzaklığı hesaplanır.

· Bu hesaplamadan sonra büyükten küçüğe sıralama gerçekleşir.

· Belirlenen k en küçük uzaklık değerine sahip örnekler incelenir.

· Belirlenen k örnek içerisindeki en çok tekrar eden tahmin hedef nitelik olarak bulunur.(Çoğunluk Oylaması)

Veri setine sonradan eklenen veriler için hedef niteliği bulmak adına veri setindeki numerik ifadelere normalizasyon uygulanması gerekmektedir. Böylece veri seti üzerinde daha hızlı işlemler yapabiliriz.

Normalizasyon’u sağlamak için “clusterSim” paketini projeye dahil ediyoruz. Ardından min-max normalizasyonu yapacağımız için type olarak n4’u seçiyoruz. Bu şekilde veri seti içerisindeki numerik ifadeler 0 ile 1 arasında bir değer almış oluyor.

Veri setini eğitim ve test olarak ikiye ayırmak için “caret” paketindeki “createDataPartition” fonksiyonunu kullanıyoruz. Burada amaç veri setimizde ki bulunan örneklerin bir kısmını eğitme için kullanarak test kısmındaki örneklerin hedef niteliğini tahmin edeceğiz.

Öncelikle random olarak k’ya 3 değerini atanıp en yakın 3 komşu üzerinden değerlendirme yapılabilir.

Artık algoritma çalıştırılmaya uygun durumda.

Bu aşamadan sonra test kümesindeki örnekler için tahmin edilen hedef nitelikler ve gercekteki degeleri kontenjans(Confusion Matrix) tablosunda gösterilir.

k- en yakın komşu algoritmasının en önemli noktası en iyi performansı veren k komşuluk değerini bulabilmek. Bunun için yazacağımız küçük bir for döngüsü ile 1’den 70’e kadar olan k değerlerinin sonuçlarını (tahmin değerlerinin ne kadarı gerçek değerlerle eşleşiyor) bir dizide tutacağız.

Sonuçlarda görüldüğü gibi çıkmakta:

Elde ettiğimiz bu sonuçları grafikte görecek olursak şu şekilde bir tablo bizleri karşılamakta:

En iyi k değerini yazdırmak için 1’den 70’e kadar numaralandırılmış bir dizi oluşturulur. Daha sonra dizi içerisindeki en büyük(max) değer bulunup ismi k değeri(enIyi_k_degeri) yazdırılır.

Algoritmayı k = 5 için tekrar çalıştırıp değerlere bakacak olursak:

411 + 28 = 439 adet tahminimiz gerçek değer ile uyuşmuş olarak çıkmakta. 979 adet test verimiz olduğunu düşünürsek 439/979’dan 0,4484167517875383 doğruluk değerine ulaşmış oluruz.

Veri Seti Özeti ve Grafikler

Veri setimizde bulunan nitelik isimleri alttaki gibidir.

names(sarapVT)

Niteliklere ait özet ise alttaki gibidir.

summary(sarapVT)

Şarapların Kalitesi

Pie Chart ile Kaliteli Şarap Sayılarının Gösterimi

Şarapların Alkol Durumu

summary(sarapVT$alkol)

Genel olarak şaraplardaki alkol dağılımı ortalama %10.51 iken en çok %9.5 alkol oranına sahip şarap vardır.

Nitelikler Arasındaki Korelasyon

ggpairs(sarapVT)

//label, kutuların üzerine korelasyon durumunu yazdırma ve round ise 0’dan sonraki basamak sayısı
ggcorr(sarapVT,label = TRUE,label_round = 2)

Yukarıdaki 2 tablo kısaca veri seti içerisinde bulunan niteliklerin birbiri ile korelasyonunun özetini çıkarmakta. Korelasyon değerleri daima 1 ve -1 aralığında bulunur. 1 korelasyon değeri -x ve y için düşünürsek — x artarken y değerlerinin de arttığını, -1 korelasyon değeri ise x değeri artarken y değerlerinin azaldığını belirtir. Her 2 durum içinde mükemmel bir korelasyon var diyebiliriz çünkü bu 2 nitelik arasında daimi bir ilişki olduğunu belirtir. Sonuç olarak 1’e ve -1’e yakın korelasyon sonuçları incelenen iki parametre arasında güçlü bir ilişki olduğunu gösterir.

Tabloda 1’e ve -1’e yakın ilişkiler veren değerleri biraz daha yakından inceleyelim.

1. Artık Şeker — Yoğunluk

2. Artık Şeker — Toplam Kükürt Dioksit

3. Alkol — Kalite

4. Yoğunluk — Alkol

5. Artık Şeker — Alkol

1. Artık Şeker — Yoğunluk

Öncelikle önceki sayfada tanımladığımız — 7 tane maddedeki- ikili durumlara bakarken kullanacağımız korelasyonFonk tanımını yapıyoruz.

Ardından artık şeker ve yoğunluk ikilisinin durumunu incelemek adına fonksiyonumuza gerekli parametreleri gönderiyoruz.

Artık şeker oranı artıkça yoğunlukta giderek artmakta bu da bize güçlü bir korelasyon ilişkisi olduğunu gösteriyor.

2. Artık Şeker — Toplam Kükürt Dioksit

Artık şeker oranı ve toplam kükürt dioksit oranı belirli bir dağılım düzeni göstermemekte bu yönüyle toplam kükürt dioksit ve artık şeker arasında zayıf bir korelasyon vardır.

3. Alkol — Kalite

Veri setimizde yer alan parametreler arasında kalite ile en güçlü ilişkiye sahip olan parametre alkol parametresi. 0.44’lük korelasyon değeri ile alkol — kalite korelasyonu güçlü bir korelasyona örnek. Bu sebeple şarapların testini gerçekleştiren kişilerin verilerine göre alkol oranı fazla olan şarapların genel olarak daha fazla kaliteli olduğu göze çarpmakta.

4. Yoğunluk — Alkol

-0.78 değeri ile yoğunluk — alkol korelasyonu güçlü bir korelasyona örnek. Yoğunluk değeri arttıkça şaraptaki alkol miktarı da azalmakta.

5. Artık Şeker — Alkol

-0.45’lik değer ile artık şeker — alkol korelasyonu da güçlü bir korelasyona eş değer düşüyor. Şarap içerisindeki artık şeker miktarı arttıkça alkol oranı azalmakta.

--

--