- Makine Öğrenmesi (Machine Learning), verileri ve istatistikleri inceleyerek bilgisayarın öğrenmesini sağlar. Makine Öğrenmesi, verileri analiz eden ve sonucu tahmin etmeyi öğrenen bir program gibidir. Belki de gibisi fazla 🙂
Makine Öğrenmesi, yapay zeka (Artifical Intelligence) yönünde atılan ilk adımdır. Bu bölümde matematik ve istatistik bilgimizi yeniden yoklayacağız ve veri setlerine dayalı olarak önemli sayıların nasıl hesaplanacağını öğreneceğiz. İhtiyacımız olan yanıtları almak için çeşitli Python modüllerini nasıl kullanacağımızı öğreneceğiz.
Veri Seti
Veri seti, bir bilgisayarın hafızasındaki bir veri kümesi veya herhangi bir veri koleksiyonudur. Bir diziden (array) oluşabileceği gibi bir veritabanından da oluşabilir.
Dizi örneği: [99,86,87,88,111,86,103,87,94,78,77,85,86]
Diziye bakarak, ortalama değerin muhtemelen 80 veya 90 civarında olduğunu tahmin edebiliriz ve aynı zamanda en yüksek değeri ve en düşük değeri de belirleyebiliriz, sizce başka ne yapabiliriz?
Veritabanında bir tablo örneği:
Yukarıdaki tabloya bakarak en popüler rengin beyaz olduğunu ve en eski arabanın 17 yıllık olduğunu görebiliriz, peki ya bir arabada otomatik geçiş sistemi olup olmadığını sadece diğer değerlere bakarak tahmin edebilir miyiz?
Makine öğrenmesi bunun için var! Verileri analiz etmek ve sonucu tahmin etmek için!
Makine öğrenmesinde genelde çok büyük veri setleriyle çalışılmaktadır. Bu bölümde, makine öğreniminin farklı kavramlarını temel düzeyde anlamayı odaklanacağız. Bu nedenle anlaşılması kolay küçük veri setleriyle çalışacağız.
Veri Tipleri
Verileri analiz etmek için ne tür verilerle uğraştığımızı bilmek gerekir. Veri türlerini üç ana kategoriye ayırabiliriz:
- Sayısal (Numerik)
- Kategorik (Categorical)
- Ordinal (Sıralı)
Numerik veriler sayılardan oluşmaktadır ve iki numerik veri tipi bulunmaktadır: (1) Ayrık veri (2) Sürekli veri.
(1) Ayrık veri, tamsayılarla sınırlıdır. Örneğin; Köprüden geçen araba sayısı gibi.
(2) Sürekli veri, virgülden sonra sonsuz değere sahip sayılardır. Örneğin; Bir kilo elma içindeki bir elmanın fiyatı 0,25 kuruş gibi.
Kategorik veriler, birbirine karşı ölçülemeyen değerlerdir. Örneğin; bir renk değeri veya herhangi bir evet / hayır değeri gibi.
Ordinal veriler kategorik veriler gibidir, ancak birbirlerine karşı ölçülebilir. Örnek: Ahmet’in okul notları Beren’inkinden daha iyi gibi.
Veri kaynağınızın veri tipini bilirseniz, bunları analiz ederken hangi tekniği kullanacağınızı da bilirsiniz.
Ortalama, Medyan ve Mod
Bir grup sayıya bakarak bu sayılar hakkında ne söyleyebilirsiniz? Makine öğrenmesinde veya matematikte bizi ilgilendiren genellikle üç değer vardır:
- Ortalama (mean) – Ortalama değer
- Medyan (median) – Orta nokta (ortanca) değeri
- Mod (mode) – En yaygın değer
Örneğin 13 arabanın belirli bir andaki hızlarını bir dizide toplayalım:
hız = [99,86,87,88,111,86,103,87,94,78,77,85,86]
Ortalama değer nedir? Ortadaki değer nedir? En yaygın hız değeri nedir?
Ortalamayı hesaplamak için, tüm değerlerin toplamını bulur ve bu toplamı değerlerin sayısına böleriz:
(99 + 86 + 87 + 88 + 111 + 86 + 103 + 87 + 94 + 78 + 77 + 85 + 86) / 13 = 89.77
Ortalama hızı bulmak için NumPy mean() yöntemini kullanalım:
Medyan değeri, diğer bir ifade ile ortadaki değer ya da ortanca değer, tüm değerleri sıraladıktan sonra ortadaki değerdir:
77, 78, 85, 86, 86, 86, 87, 87, 88, 94, 99, 103, 111
Medyanı bulmadan önce sayıların sıralanması gerekir. NumPy modülünün bunun için de bir yöntemi var; Ortadaki değeri bulmak için NumPy median () yöntemini kullanalım:
Ortada iki sayı varsa, bu sayıların toplamını ikiye bölerek medyan değerini bulabiliriz:
77, 78, 85, 86, 86, 86, 87, 87, 94, 98, 99, 103
(86 + 87) / 2 = 86,5
Bu değeri NumPy kullanarak bulalım:
Mod değeri, veri setinde en çok görünen değerdir.
99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86 = 86
SciPy modülünün bunun için bir yöntemi var. En çok görünen sayıyı bulmak için SciPy mode () yöntemini kullanalım:
Standart Sapma
Standart sapma (standard deviation) ve varyans (variance), makine öğrenmesinde sıklıkla kullanılan terimlerdir. Bu nedenle bunları nasıl elde edeceğinizi ve arkasındaki bağlamı anlamak önemli.
Standart sapma, değerlerin ne kadar yayıldığını açıklayan bir sayıdır. Düşük bir standart sapma, sayıların çoğunun ortalama değere (mean) yakın olduğu anlamına gelir. Yüksek bir standart sapma, değerlerin daha geniş bir aralığa yayıldığı anlamına gelir.
Örneğin; aşağıda 7 arabanın hızını kaydettiğimiz bir dizi var:
hız = [86,87,88,86,87,85,86]
Bu dizinin standart sapması: 0.9
Bunun anlamı, değerlerin çoğu 86,4 olan ortalama değerin 0,9 aralığındadır. Aynı işlemi daha geniş bir aralıktaki bir dizi sayı için yapalım:
hız = [32,111,138,28,59,77,97]
Standart sapma: 37.85
Bunun anlamı, değerlerin çoğu 77,4 olan ortalama değerin 37,85 aralığındadır.
Görüldüğü gibi, daha yüksek bir standart sapma, değerlerin daha geniş bir aralığa yayıldığını göstermektedir. NumPy modülünün standart sapmayı hesaplamak için NumPy std () yöntemi vardır:
Varyans
Varyans (variance), değerlerin ne kadar yayıldığını gösteren başka bir sayıdır. Aslında, varyansın karekökünü alırsanız, standart sapmayı elde ederiz ya da standart sapmayı kendisiyle çarparsak, varyansı elde ederiz.
Varyansı hesaplamak için aşağıdakileri yapmak gerekir:
Ortalamayı bulalım:
(32 + 111 + 138 + 28 + 59 + 77 + 97) / 7 = 77,4
Sonra her bir değerin ortalamadan farkını bulalım:
32 – 77,4 = -45,4
111 – 77,4 = 33,6
138 – 77,4 = 60,6
28 – 77,4 = -49,4
59 – 77,4 = -18,4
77 – 77,4 = – 0,4
97 – 77,4 = 19,6
Daha sonra her bir farkın karesini bulalım:
(-45,4) 2 = 2061,16
(33.6) 2 = 1128.96
(60.6) 2 = 3672.36
(-49,4) 2 = 2440,36
(-18,4) 2 = 338,56
(- 0.4) 2 = 0.16
(19.6) 2 = 384.16
Varyans değeri, yukarıda en son bulduğumuz bu kare farkların ortalamasıdır:
(2061,16 + 1128,96 + 3672,36 + 2440,36 + 338,56 + 0,16 + 384,16) / 7 = 1432,2
Neyse ki artık bu kadar uğraşmıyoruz! Varyansı hesaplamak için NumPy var() yöntemini kullanalım:
Semboller
Standart Sapma genellikle Sigma simgesiyle temsil edilir: σ
Varyans genellikle Sigmanın karesi ile temsil edilir: σ2
Yüzdelikler
Yüzdelik dilimler (percentiles), istatistikte size değerlerin belirli bir yüzdesinden daha düşük olan değeri tanımlayan bir sayı vermek için kullanılır. Örneğin bir sokakta yaşayan tüm insanların yaşlarını bir dizide topladığımızı varsayalım.
yaş = [5,31,43,48,50,41,7,11,15,39,80,82,32,2,8,6,25,36,27,61,31]
- yüzdelik dilim 43’tür, yani insanların % 75’i 43 yaşında veya daha gençtir.
Belirtilen yüzdelik dilimi bulmak için NumPy percentile () yöntemini kullanalım:
Bu bölümde, makine öğrenmesine dair farklı kavramları anlamak için örneklerimizde çok küçük miktarlarda verilerle çalıştık. Bilindiği üzere gerçek dünyada veri setleri çok daha büyüktür. Gelecek bölümde makine öğrenmesinin temel kavramlarını anlatmaya devam edeceğim.
Tekrar görüşmek dileğiyle,
Bu bölümün Github kaynakları için tıklayınız.
Bir önceki bölüm: NumPy’da Olasılık Dağılımları: Normal Dağılım, Binom Dağılımı, Poisson Dağılımı – Bölüm 11
Kaynaklar: https://www.w3schools.com