Python ile Makine Öğrenimi - Hızlı Kılavuz
Daha iyi hesaplama gücü ve daha fazla depolama kaynağı ile zenginleştirilmiş "veri çağında" yaşıyoruz. Bu veri veya bilgi her geçen gün artmaktadır, ancak asıl zorluk tüm verileri anlamlandırmaktır. İşletmeler ve kuruluşlar, Veri bilimi, Veri Madenciliği ve Makine öğreniminden kavramları ve metodolojileri kullanarak akıllı sistemler oluşturarak bununla başa çıkmaya çalışıyor. Bunların arasında makine öğrenimi, bilgisayar biliminin en heyecan verici alanıdır. Makine öğrenimini, verilere anlam kazandıran algoritma uygulaması ve bilimi olarak adlandırırsak yanlış olmaz.
Makine Öğrenimi nedir?
Makine Öğrenimi (ML), bilgisayar sistemlerinin, insanların yaptığı gibi verilere anlam verebildiği bilgisayar bilimi alanıdır.
Basit bir deyişle, makine öğrenimi, bir algoritma veya yöntem kullanarak ham verilerden kalıpları çıkaran bir yapay zeka türüdür. Makine öğreniminin ana odağı, bilgisayar sistemlerinin açıkça programlanmadan veya insan müdahalesi olmadan deneyimlerden öğrenmesine olanak sağlamaktır.
Makine Öğrenimi İhtiyacı
Şu anda insan, karmaşık problemleri düşünebildiği, değerlendirebildiği ve çözebildiği için yeryüzündeki en zeki ve gelişmiş türdür. Öte yandan, AI hala başlangıç aşamasındadır ve birçok yönden insan zekasını geçememiştir. O zaman soru, makineyi öğrenmeye ne gerek var? Bunu yapmanın en uygun nedeni “veriye dayalı, verimli ve ölçeklendirilmiş kararlar almak” tır.
Son zamanlarda kuruluşlar, birçok gerçek dünya görevini gerçekleştirmek ve sorunları çözmek için verilerden temel bilgileri almak için Yapay Zeka, Makine Öğrenimi ve Derin Öğrenme gibi daha yeni teknolojilere yoğun bir şekilde yatırım yapıyor. Buna, özellikle süreci otomatikleştirmek için makineler tarafından alınan veriye dayalı kararlar diyebiliriz. Bu veriye dayalı kararlar, doğal olarak programlanamayan problemlerde programlama mantığı kullanmak yerine kullanılabilir. Gerçek şu ki, insan zekası olmadan yapamayız, ancak diğer bir husus, hepimizin gerçek dünyadaki sorunları büyük ölçekte verimli bir şekilde çözmemiz gerektiğidir. Bu nedenle makine öğrenimine ihtiyaç doğuyor.
Makineler Neden ve Ne Zaman Öğrenilir?
Makine öğrenimi ihtiyacını daha önce tartışmıştık, ancak başka bir soru ortaya çıkıyor, hangi senaryolarda makinenin öğrenmesini sağlamalıyız? Verimlilikle ve çok büyük ölçekte veriye dayalı kararlar almak için makinelere ihtiyaç duyduğumuz birkaç durum olabilir. Aşağıdakiler, makinelerin öğrenmesini sağlamanın daha etkili olacağı bu tür durumlardan bazılarıdır -
İnsan uzmanlığı eksikliği
Bir makinenin öğrenmesini ve veriye dayalı kararlar almasını istediğimiz ilk senaryo, insan uzmanlığının eksik olduğu alan olabilir. Örnekler, bilinmeyen bölgelerdeki veya uzamsal gezegenlerdeki navigasyon olabilir.
Dinamik senaryolar
Doğası gereği dinamik olan bazı senaryolar vardır, yani zamanla değişmeye devam ederler. Bu senaryolar ve davranışlar söz konusu olduğunda, bir makinenin öğrenmesini ve veriye dayalı kararlar almasını istiyoruz. Örneklerden bazıları, bir kuruluştaki ağ bağlantısı ve altyapının kullanılabilirliği olabilir.
Uzmanlığı hesaplama görevlerine dönüştürmede zorluk
İnsanların kendi uzmanlıklarına sahip olduğu çeşitli alanlar olabilir; ancak, bu uzmanlığı hesaplama görevlerine dönüştüremezler. Bu tür durumlarda makine öğrenimi istiyoruz. Örnekler konuşma tanıma alanları, bilişsel görevler vb. Olabilir.
Makine Öğrenimi Modeli
Makine öğrenimi modelini tartışmadan önce, profesör Mitchell tarafından verilen MO'nun aşağıdaki resmi tanımını anlamamız gerekir:
"Bir bilgisayar programının, P ile ölçülen T'deki görevlerdeki performansı E deneyimi ile iyileşirse, bazı görev sınıfları T ve performans ölçüsü P ile ilgili olarak E deneyiminden öğrendiği söylenir."
Yukarıdaki tanım temel olarak üç parametreye, ayrıca herhangi bir öğrenme algoritmasının ana bileşenleri olan Görev (T), Performans (P) ve deneyim (E) üzerine odaklanmaktadır. Bu bağlamda, bu tanımı şu şekilde basitleştirebiliriz:
ML, öğrenme algoritmalarından oluşan bir yapay zeka alanıdır -
Performanslarını iyileştirin (P)
Bazı görevleri yerine getirirken (T)
Deneyimli zamanla (E)
Yukarıdakilere dayanarak, aşağıdaki şema bir Makine Öğrenimi Modelini temsil eder -
Şimdi onları daha detaylı tartışalım -
Görev (T)
Problem açısından, T görevini çözülmesi gereken gerçek dünya problemi olarak tanımlayabiliriz. Sorun, belirli bir konumdaki en iyi ev fiyatını bulmak veya en iyi pazarlama stratejisini bulmak gibi herhangi bir şey olabilir. Öte yandan, makine öğrenimi hakkında konuşursak, görev tanımı farklıdır çünkü makine öğrenimi temelli görevleri çözmek zordur. geleneksel programlama yaklaşımı.
T görevinin, sürece dayandığında ML tabanlı bir görev olduğu ve sistemin veri noktalarında çalışması için takip etmesi gerektiği söylenir. Makine öğrenimi tabanlı görevlerin örnekleri Sınıflandırma, Regresyon, Yapılandırılmış açıklama, Kümeleme, Transkripsiyon vb .'dir.
Deneyim (E)
Adından da anlaşılacağı gibi, algoritma veya modele sağlanan veri noktalarından kazanılan bilgidir. Veri kümesiyle sağlandıktan sonra, model yinelemeli olarak çalışacak ve bazı doğal kalıpları öğrenecektir. Bu şekilde kazanılan öğrenmeye deneyim (E) denir. İnsan öğrenimi ile bir benzetme yaparak, bu durumu bir insanın durum, ilişkiler vb. Gibi çeşitli özelliklerden öğrendiği veya edindiği gibi düşünebiliriz. Denetimli, denetimsiz ve pekiştirmeli öğrenme, öğrenme veya deneyim kazanmanın bazı yollarıdır. Makine öğrenimi modeli veya algoritması tarafından kazanılan deneyim, görev T'yi çözmek için kullanılacaktır.
Performans (P)
Bir ML algoritmasının görevi yerine getirmesi ve zamanın geçişi ile ilgili deneyim kazanması beklenir. Makine öğrenimi algoritmasının beklentiye göre performans gösterip göstermediğini söyleyen ölçü, performansıdır (P). P temelde bir modelin görevi nasıl yerine getirdiğini söyleyen niceliksel bir metriktir, T, deneyimini kullanarak E, Makine Öğrenimi performansını anlamaya yardımcı olan doğruluk puanı, F1 puanı, kafa karışıklığı matrisi, kesinlik, geri çağırma gibi birçok ölçüm vardır. duyarlılık vb.
Makine Öğrenimindeki Zorluklar
Makine Öğrenimi hızla gelişirken, siber güvenlik ve otonom otomobillerle önemli adımlar atarken, yapay zekanın bu bölümünün bir bütün olarak hala gidecek uzun bir yolu var. Bunun arkasındaki sebep, makine öğreniminin bir dizi zorluğun üstesinden gelememiş olmasıdır. Makine öğreniminin şu anda karşı karşıya olduğu zorluklar:
Quality of data- Makine öğrenimi algoritmaları için kaliteli verilere sahip olmak en büyük zorluklardan biridir. Düşük kaliteli verilerin kullanılması, verilerin ön işleme ve özellik çıkarımı ile ilgili sorunlara yol açar.
Time-Consuming task - Makine öğrenimi modellerinin karşılaştığı bir diğer zorluk, özellikle veri toplama, özellik çıkarma ve alma için zaman tüketimidir.
Lack of specialist persons - Makine öğrenimi teknolojisi henüz emekleme aşamasında olduğundan, uzman kaynakların mevcudiyeti zor bir iştir.
No clear objective for formulating business problems - İş sorunları için net bir hedefe ve iyi tanımlanmış bir hedefe sahip olmamak, makine öğrenimi için bir başka önemli zorluktur çünkü bu teknoloji henüz olgunlaşmamıştır.
Issue of overfitting & underfitting - Model gereğinden fazla veya yetersizse, sorun için iyi temsil edilemez.
Curse of dimensionality- Makine öğrenimi modelinin karşılaştığı diğer bir zorluk, veri noktalarının çok fazla özelliğidir. Bu gerçek bir engel olabilir.
Difficulty in deployment - Makine öğrenimi modelinin karmaşıklığı, gerçek hayatta devreye alınmasını oldukça zorlaştırır.
Makine Öğreniminin Uygulamaları
Makine Öğrenimi en hızlı büyüyen teknolojidir ve araştırmacılara göre yapay zeka ve makine öğreniminin altın yılındayız. Geleneksel yaklaşımla çözülemeyen birçok gerçek dünyadaki karmaşık sorunu çözmek için kullanılır. Aşağıdakiler makine öğreniminin bazı gerçek dünyadaki uygulamalarıdır -
Duygu analizi
Duygu analizi
Hata tespiti ve önleme
Hava tahmini ve tahmini
Borsa analizi ve tahmini
Konuşma sentezi
Konuşma tanıma
Müşteri segmentasyonu
Nesne tanıma
Dolandırıcılık tespiti
Dolandırıcılık önleme
Online alışverişte müşteriye ürün önerisi.
Python'a Giriş
Python, üst düzey programlama dili yeteneklerine sahip popüler bir nesne yönelimli programlama dilidir. Öğrenmesi kolay sözdizimi ve taşınabilirlik özelliği, bu günlerde popüler olmasını sağlıyor. Aşağıdaki gerçekler bize Python'a giriş sağlar -
Python, Guido van Rossum tarafından Hollanda'daki Stichting Mathematisch Centrum'da geliştirildi.
'ABC' adlı programlama dilinin halefi olarak yazılmıştır.
İlk versiyonu 1991'de yayınlandı.
Python adı, Guido van Rossum tarafından Monty Python's Flying Circus adlı bir TV programından seçildi.
Açık kaynaklı bir programlama dilidir, yani onu özgürce indirebilir ve programları geliştirmek için kullanabiliriz. Www.python.org adresinden indirilebilir .
Python programlama dili hem Java hem de C özelliklerine sahiptir. Zarif 'C' koduna sahip ve diğer yandan nesne yönelimli programlama için Java gibi sınıflara ve nesnelere sahip.
Yorumlanmış bir dildir, yani Python programının kaynak kodu önce bayt koduna dönüştürülür ve ardından Python sanal makine tarafından çalıştırılır.
Python'un Güçlü ve Zayıf Yönleri
Her programlama dilinin bazı güçlü yanları olduğu kadar zayıf yönleri de vardır, Python da öyle.
Güçlü
Araştırmalara ve anketlere göre Python, makine öğrenimi ve veri bilimi için en önemli beşinci dilin yanı sıra en popüler dildir. Python'un sahip olduğu aşağıdaki güçlü yönlerden kaynaklanmaktadır:
Easy to learn and understand- Python'un sözdizimi daha basittir; dolayısıyla yeni başlayanlar için bile dili öğrenmek ve anlamak nispeten kolaydır.
Multi-purpose language - Python çok amaçlı bir programlama dilidir çünkü yapısal programlamayı, nesne yönelimli programlamayı ve ayrıca işlevsel programlamayı destekler.
Huge number of modules- Python, programlamanın her yönünü kapsayan çok sayıda modüle sahiptir. Bu modüller kolayca kullanılabilir, dolayısıyla Python'u genişletilebilir bir dil yapar.
Support of open source community- Açık kaynak programlama dili olarak Python, çok geniş bir geliştirici topluluğu tarafından desteklenmektedir. Bu nedenle, hatalar Python topluluğu tarafından kolayca düzeltilebilir. Bu özellik Python'u çok sağlam ve uyarlanabilir kılar.
Scalability - Python ölçeklenebilir bir programlama dilidir çünkü büyük programları desteklemek için kabuk komut dosyalarından daha gelişmiş bir yapı sağlar.
Zayıflık
Python, popüler ve güçlü bir programlama dili olmasına rağmen, yavaş yürütme hızı konusunda kendi zayıflığına sahiptir.
Python'un yürütme hızı, derlenmiş dillere kıyasla yavaştır çünkü Python yorumlanmış bir dildir. Bu, Python topluluğu için ana iyileştirme alanı olabilir.
Python'u Yükleme
Python'da çalışmak için önce onu yüklemeliyiz. Python kurulumunu aşağıdaki iki yoldan biriyle gerçekleştirebilirsiniz -
Python'u ayrı ayrı kurmak
Önceden paketlenmiş Python dağıtımını kullanma - Anaconda
Bunları ayrıntılı olarak tartışalım.
Python'u Ayrı Ayrı Kurmak
Python'u bilgisayarınıza kurmak istiyorsanız, o zaman sadece platformunuz için geçerli olan ikili kodu indirmeniz gerekir. Python dağıtımı Windows, Linux ve Mac platformları için mevcuttur.
Aşağıda, yukarıda belirtilen platformlara Python kurulumuna hızlı bir genel bakış verilmiştir -
On Unix and Linux platform
Aşağıdaki adımların yardımıyla Python'u Unix ve Linux platformuna kurabiliriz -
İlk önce gidin https://www.python.org/downloads/.
Ardından, Unix / Linux için mevcut olan sıkıştırılmış kaynak kodunu indirmek için bağlantıya tıklayın.
Şimdi, dosyaları indirin ve çıkarın.
Sonra, bazı seçenekleri özelleştirmek istiyorsak Modules / Setup dosyasını düzenleyebiliriz.
Ardından, run ./configure betiğini yazın
make
kurmak yap
On Windows platform
Aşağıdaki adımların yardımıyla Python'u Windows platformuna kurabiliriz -
İlk önce gidin https://www.python.org/downloads/.
Ardından, Windows yükleyici python-XYZ.msi dosyası için bağlantıya tıklayın. Burada XYZ, kurmak istediğimiz versiyondur.
Şimdi indirilen dosyayı çalıştırmalıyız. Bizi kullanımı kolay Python kurulum sihirbazına götürecektir. Şimdi varsayılan ayarları kabul edin ve kurulum bitene kadar bekleyin.
On Macintosh platform
Mac OS X, Homebrew için, Python 3'ü yüklemek için harika ve kullanımı kolay bir paket yükleyici önerilir. Homebrew'iniz yoksa, aşağıdaki komutun yardımıyla kurabilirsiniz -
$ ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"
Aşağıdaki komutla güncellenebilir -
$ brew update
Şimdi, Python3'ü sisteminize kurmak için aşağıdaki komutu çalıştırmamız gerekiyor -
$ brew install python3
Önceden Paketlenmiş Python Dağıtımını Kullanma: Anaconda
Anaconda, Veri biliminde yaygın olarak kullanılan tüm kitaplıklara sahip Python'un paketlenmiş bir derlemesidir. Anaconda kullanarak Python ortamını kurmak için aşağıdaki adımları takip edebiliriz -
Step1- Öncelikle gerekli kurulum paketini Anaconda dağıtımından indirmemiz gerekiyor. Aynısı için bağlantıhttps://www.anaconda.com/distribution/. Gereksiniminize göre Windows, Mac ve Linux işletim sistemi arasından seçim yapabilirsiniz.
Step2- Ardından, makinenize kurmak istediğiniz Python sürümünü seçin. En son Python sürümü 3.7'dir. Orada hem 64-bit hem de 32-bit Grafik yükleyici seçeneklerine sahip olacaksınız.
Step3- İşletim sistemi ve Python sürümünü seçtikten sonra, Anaconda yükleyicisini bilgisayarınıza indirecektir. Şimdi, dosyaya çift tıklayın ve yükleyici Anaconda paketini kuracaktır.
Step4 - Yüklü olup olmadığını kontrol etmek için bir komut istemi açın ve aşağıdaki gibi Python yazın -
Bunu ayrıntılı video dersinde de kontrol edebilirsiniz:https://www.tutorialspoint.com/python_essentials_online_training/getting_started_with_anaconda.asp.
Neden Veri Bilimi için Python?
Python, Makine öğrenimi ve veri bilimi için en önemli beşinci dilin yanı sıra en popüler dildir. Aşağıdakiler, Python'u veri bilimi için tercih edilen dil seçimi yapan özelliklerdir -
Kapsamlı paket seti
Python, çeşitli alanlarda kullanılmaya hazır, kapsamlı ve güçlü bir paket setine sahiptir. Ayrıca makine öğrenimi ve veri bilimi için gerekli olan numpy, scipy, pandas, scikit-learn vb. Paketlere de sahiptir.
Kolay prototipleme
Python'un onu veri bilimi için dil seçimi yapan bir diğer önemli özelliği, kolay ve hızlı prototiplemedir. Bu özellik, yeni algoritma geliştirmek için kullanışlıdır.
İşbirliği özelliği
Veri bilimi alanı temelde iyi bir işbirliğine ihtiyaç duyar ve Python, bunu olağanüstü hale getiren birçok yararlı araç sağlar.
Birçok alan için tek dil
Tipik bir veri bilimi projesi, veri çıkarma, veri işleme, veri analizi, özellik çıkarma, modelleme, değerlendirme, dağıtım ve çözümü güncelleme gibi çeşitli alanları içerir. Python çok amaçlı bir dil olduğundan, veri bilimcinin tüm bu alanları ortak bir platformdan ele almasını sağlar.
Python ML Ekosisteminin Bileşenleri
Bu bölümde, Python Makine öğrenimi ekosisteminin bileşenlerini oluşturan bazı temel Veri Bilimi kitaplıklarını tartışalım. Bu kullanışlı bileşenler Python'u Veri Bilimi için önemli bir dil yapar. Bu tür birçok bileşen olmasına rağmen, burada Python ekosisteminin bazı önemli bileşenlerini tartışalım -
Jupyter Defter
Jupyter dizüstü bilgisayarlar, temel olarak Python tabanlı Veri Bilimi uygulamaları geliştirmek için etkileşimli bir hesaplama ortamı sağlar. Eskiden ipython not defterleri olarak biliniyorlardı. Aşağıdakiler, Jupyter dizüstü bilgisayarların Python ML ekosisteminin en iyi bileşenlerinden biri olmasını sağlayan özelliklerinden bazılarıdır -
Jupyter not defterleri, kod, resim, metin, çıktı vb. Öğeleri adım adım düzenleyerek analiz sürecini adım adım gösterebilir.
Bir veri bilimcinin analiz sürecini geliştirirken düşünce sürecini belgelemesine yardımcı olur.
Sonuç not defterinin bir parçası olarak da yakalanabilir.
Jupyter defterlerin yardımıyla çalışmalarımızı bir arkadaşımızla da paylaşabiliyoruz.
Kurulum ve Yürütme
Anaconda dağıtımını kullanıyorsanız, jupyter dizüstü bilgisayarı zaten yüklü olduğu için ayrı olarak kurmanıza gerek yoktur. Sadece Anaconda İstemine gitmeniz ve aşağıdaki komutu yazmanız yeterlidir -
C:\>jupyter notebook
Enter tuşuna bastıktan sonra, bilgisayarınızın localhost: 8888 adresinde bir dizüstü bilgisayar sunucusu başlatacaktır. Aşağıdaki ekran görüntüsünde gösterilmektedir -
Şimdi, Yeni sekmesine tıkladıktan sonra, bir seçenek listesi alacaksınız. Python 3'ü seçin ve üzerinde çalışmaya başlamak için sizi yeni not defterine götürecektir. Aşağıdaki ekran görüntülerinde buna bir göz atacaksınız -
Öte yandan, standart Python dağıtımını kullanıyorsanız, jupyter dizüstü bilgisayarı popüler python paketi yükleyicisi pip kullanılarak yüklenebilir.
pip install jupyter
Jupyter Defterindeki Hücre Türleri
Aşağıdakiler, bir jupyter defterindeki üç hücre tipidir -
Code cells- Adından da anlaşılacağı gibi bu hücreleri kod yazmak için kullanabiliriz. Kodu / içeriği yazdıktan sonra, onu not defteriyle ilişkilendirilmiş çekirdeğe gönderecektir.
Markdown cells- Bu hücreleri hesaplama sürecini not etmek için kullanabiliriz. Metin, resimler, Lateks denklemleri, HTML etiketleri vb. Gibi şeyleri içerebilirler.
Raw cells- İçlerine yazılan metin olduğu gibi görüntülenir. Bu hücreler temelde jupyter not defterinin otomatik dönüştürme mekanizması ile dönüştürülmesini istemediğimiz metni eklemek için kullanılır.
Jupyter defterinin daha detaylı çalışması için bağlantıya gidebilirsiniz.https://www.tutorialspoint.com/jupyter/index.htm.
Dizi
Python'u Veri Bilimi için favori dillerden biri yapan başka bir kullanışlı bileşendir. Temelde Sayısal Python anlamına gelir ve çok boyutlu dizi nesnelerinden oluşur. NumPy kullanarak aşağıdaki önemli işlemleri gerçekleştirebiliriz -
Diziler üzerinde matematiksel ve mantıksal işlemler.
Fourier dönüşümü
Doğrusal cebir ile ilgili işlemler.
NumPy'yi MatLab'ın yerini alan olarak da görebiliriz çünkü NumPy çoğunlukla Scipy (Scientific Python) ve Mat-plotlib (çizim kitaplığı) ile birlikte kullanılır.
Installation and Execution
Anaconda dağıtımını kullanıyorsanız, NumPy zaten yüklü olduğu için ayrı olarak kurmanıza gerek yoktur. Paketi, aşağıdakilerin yardımıyla Python betiğinize aktarmanız yeterlidir -
import numpy as np
Öte yandan, standart Python dağıtımını kullanıyorsanız NumPy, popüler python paket yükleyicisi pip kullanılarak yüklenebilir.
pip install NumPy
NumPy'nin daha ayrıntılı çalışması için bağlantıya gidebilirsiniz.https://www.tutorialspoint.com/numpy/index.htm.
Pandalar
Python'u Veri Bilimi için en sevilen dillerden biri yapan başka bir kullanışlı Python kitaplığıdır. Pandalar temelde veri işleme, tartışma ve analiz için kullanılır. Wes McKinney tarafından 2008 yılında geliştirilmiştir. Pandaların yardımıyla veri işlemede aşağıdaki beş adımı gerçekleştirebiliriz -
Load
Prepare
Manipulate
Model
Analyze
Pandalarda veri gösterimi
Pandalar'daki verilerin tüm temsili, aşağıdaki üç veri yapısının yardımıyla yapılır -
Series- Temelde eksen etiketine sahip tek boyutlu bir ndarray, yani homojen verilere sahip basit bir dizi gibi. Örneğin, aşağıdaki seri 1,5,10,15,24,25… tam sayılarından oluşan bir koleksiyondur.
1 | 5 | 10 | 15 | 24 | 25 | 28 | 36 | 40 | 89 |
Data frame- En kullanışlı veri yapısıdır ve pandalarda hemen hemen her türlü veri gösterimi ve manipülasyonu için kullanılır. Temelde heterojen verileri içerebilen iki boyutlu bir veri yapısıdır. Genel olarak, tablo verileri, veri çerçeveleri kullanılarak temsil edilir. Örneğin, aşağıdaki tablo, adlarını ve rulo numaralarını, yaşlarını ve cinsiyetlerini belirten öğrencilerin verilerini göstermektedir -
İsim |
Rulo numarası |
Yaş |
Cinsiyet |
---|---|---|---|
Aarav |
1 |
15 |
Erkek |
Harshit |
2 |
14 |
Erkek |
Kanika |
3 |
16 |
Kadın |
Mayank |
4 |
15 |
Erkek |
Panel- Heterojen verileri içeren 3 boyutlu bir veri yapısıdır. Paneli grafik olarak temsil etmek çok zordur, ancak bir DataFrame kabı olarak gösterilebilir.
Aşağıdaki tablo, Pandalarda kullanılan yukarıda belirtilen veri yapıları hakkında bize boyut ve açıklama verir -
Veri yapısı |
Boyut |
Açıklama |
---|---|---|
Dizi |
1-D |
Değişmez boyut, 1-D homojen veriler |
Veri Çerçeveleri |
2 boyutlu |
Boyut Değişken, Heterojen veriler tablo biçiminde |
Panel |
3 BOYUTLU |
Boyut değiştirilebilir dizi, DataFrame kapsayıcısı. |
Bu veri yapılarını daha yüksek boyutlu veri yapısı, daha düşük boyutlu veri yapısının kabı olduğu için anlayabiliriz.
Kurulum ve Yürütme
Anaconda dağıtımını kullanıyorsanız, zaten kurulu olduğu için Pandas'ı ayrı olarak kurmanıza gerek yoktur. Paketi, aşağıdakilerin yardımıyla Python betiğinize aktarmanız yeterlidir -
import pandas as pd
Öte yandan, standart Python dağıtımını kullanıyorsanız Pandalar, popüler python paketi yükleyicisi pip kullanılarak yüklenebilir.
pip install Pandas
Pandaları kurduktan sonra, yukarıda yaptığınız gibi Python betiğinize aktarabilirsiniz.
Misal
Aşağıda Pandas kullanarak ndarray'den bir dizi oluşturmaya bir örnek verilmiştir -
In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: data = np.array(['g','a','u','r','a','v'])
In [4]: s = pd.Series(data)
In [5]: print (s)
0 g
1 a
2 u
3 r
4 a
5 v
dtype: object
Pandalar hakkında daha ayrıntılı çalışma için bağlantıya gidebilirsiniz https://www.tutorialspoint.com/python_pandas/index.htm.
Scikit-öğrenme
Python'da Veri Bilimi ve makine öğrenimi için bir başka kullanışlı ve en önemli python kitaplığı Scikit-learn'dur. Aşağıdakiler, Scikit-learn'ün bu kadar kullanışlı olmasını sağlayan bazı özellikleridir -
NumPy, SciPy ve Matplotlib üzerine inşa edilmiştir.
Açık kaynaktır ve BSD lisansı altında yeniden kullanılabilir.
Herkes tarafından erişilebilir ve çeşitli bağlamlarda yeniden kullanılabilir.
ML'nin sınıflandırma, kümeleme, regresyon, boyut azaltma, model seçimi gibi ana alanlarını kapsayan çok çeşitli makine öğrenimi algoritmaları bunun yardımıyla uygulanabilir.
Kurulum ve Yürütme
Anaconda dağıtımını kullanıyorsanız, zaten yüklü olduğu için Scikit-learn'ü ayrıca kurmanıza gerek yoktur. Paketi Python betiğinizde kullanmanız yeterlidir. Örneğin, aşağıdaki komut dosyası satırıyla, meme kanseri hastalarının veri setiniScikit-learn -
from sklearn.datasets import load_breast_cancer
Öte yandan, standart Python dağıtımını kullanıyorsanız ve NumPy ve SciPy'ye sahipseniz, Scikit-learn popüler python paket yükleyicisi pip kullanılarak yüklenebilir.
pip install -U scikit-learn
Scikit-learn'ü yükledikten sonra, yukarıda yaptığınız gibi Python betiğinizde kullanabilirsiniz.
Verileri kullanarak gerçek hayattaki sorunları çözmek için modeller oluşturmak için kullanılabilecek çeşitli makine öğrenimi algoritmaları, teknikleri ve yöntemleri vardır. Bu bölümde, bu türden farklı yöntemlerden bahsedeceğiz.
Farklı Yöntem Türleri
Aşağıdakiler, bazı geniş kategorilere dayalı çeşitli makine öğrenimi yöntemidir -
İnsan denetimine dayalı
Öğrenme sürecinde insan denetimine dayalı yöntemlerden bazıları şu şekildedir:
Supervised Learning
Denetimli öğrenme algoritmaları veya yöntemleri, en yaygın kullanılan makine öğrenimi algoritmalarıdır. Bu yöntem veya öğrenme algoritması, veri örneğini, yani eğitim verilerini ve bununla ilişkili çıktıları, yani eğitim süreci sırasında her veri örneğiyle etiketleri veya yanıtları alır.
Denetimli öğrenme algoritmalarının temel amacı, birden fazla eğitim verisi örneği gerçekleştirdikten sonra giriş verisi örnekleri ile karşılık gelen çıktılar arasındaki ilişkiyi öğrenmektir.
Örneğin, bizde
x: Giriş değişkenleri ve
Y: Çıktı değişkeni
Şimdi, aşağıdaki gibi girişten çıkışa eşleme işlevini öğrenmek için bir algoritma uygulayın -
Y = f (x)
Şimdi, ana amaç, eşleme fonksiyonunu o kadar iyi bir şekilde yaklaştırmak olacaktır ki, yeni giriş verilerimiz (x) olsa bile, bu yeni giriş verileri için çıkış değişkenini (Y) kolayca tahmin edebiliriz.
Denetimli olarak adlandırılır çünkü tüm öğrenme süreci bir öğretmen veya gözetmen tarafından denetlenirken düşünülebilir. Denetimli makine öğrenimi algoritmalarına örnekler şunları içerir:Decision tree, Random Forest, KNN, Logistic Regression vb.
Makine öğrenimi görevlerine dayalı olarak, denetimli öğrenme algoritmaları aşağıdaki iki geniş sınıfa ayrılabilir:
Classification
Regression
Classification
Sınıflandırmaya dayalı görevlerin temel amacı, verilen girdi verileri için kategorilere göre çıktı etiketlerini veya yanıtları tahmin etmektir. Çıktı, modelin eğitim aşamasında öğrendiklerine dayalı olacaktır. Kategorisel çıktı yanıtlarının sırasız ve ayrık değerler anlamına geldiğini bildiğimiz için, her çıktı yanıtı belirli bir sınıfa veya kategoriye ait olacaktır. Sınıflandırma ve ilgili algoritmaları ilerleyen bölümlerde ayrıntılı olarak tartışacağız.
Regression
Regresyon tabanlı görevlerin temel amacı, verilen girdi verileri için sayısal değerler olarak devam eden çıktı etiketlerini veya yanıtlarını tahmin etmektir. Çıktı, modelin eğitim aşamasında öğrendiklerine dayalı olacaktır. Temel olarak, regresyon modelleri, girdiler ve karşılık gelen çıktılar arasındaki belirli ilişkiyi öğrenmek için girdi veri özelliklerini (bağımsız değişkenler) ve bunlara karşılık gelen sürekli sayısal çıktı değerlerini (bağımlı veya sonuç değişkenleri) kullanır. Regresyon ve ilgili algoritmaları daha sonraki bölümlerde ayrıntılı olarak tartışacağız.
Denetimsiz Öğrenme
Adından da anlaşılacağı gibi, denetimli makine öğrenimi yöntemlerinin veya algoritmalarının tersidir, bu da denetimsiz makine öğrenimi algoritmalarında herhangi bir rehberlik sağlayacak herhangi bir denetçimizin olmadığı anlamına gelir. Denetimsiz öğrenme algoritmaları, denetimli öğrenme algoritmalarında olduğu gibi önceden etiketlenmiş eğitim verilerine sahip olma özgürlüğüne sahip olmadığımız ve girdi verilerinden yararlı bir model çıkarmak istediğimiz senaryoda kullanışlıdır.
Örneğin şu şekilde anlaşılabilir -
Varsayalım ki -
x: Input variables, o zaman karşılık gelen bir çıktı değişkeni olmayacak ve algoritmaların öğrenme için verilerdeki ilginç modeli keşfetmesi gerekecek.
Denetimsiz makine öğrenimi algoritmalarına örnek olarak K-ortalamalı kümeleme, K-nearest neighbors vb.
Makine öğrenimi görevlerine dayalı olarak, denetimsiz öğrenme algoritmaları aşağıdaki geniş sınıflara ayrılabilir -
Clustering
Association
Boyutsal küçülme
Clustering
Kümeleme yöntemleri, en kullanışlı denetimsiz makine öğrenimi yöntemlerinden biridir. Bu algoritmalar, veri örnekleri arasındaki benzerliğin yanı sıra ilişki modellerini bulmak için kullanılır ve daha sonra bu örnekleri özelliklere dayalı olarak benzerliğe sahip gruplar halinde kümeler. Kümelenmenin gerçek dünyadaki örneği, müşterileri satın alma davranışlarına göre gruplandırmaktır.
Association
Diğer bir yararlı denetimsiz makine öğrenimi yöntemi AssociationBu, çeşitli öğeler arasındaki ilginç ilişkileri daha da temsil eden kalıpları bulmak için büyük veri kümesini analiz etmek için kullanılır. Ayrıca şu şekilde adlandırılır:Association Rule Mining veya Market basket analysis Bu, esas olarak müşteri alışveriş modellerini analiz etmek için kullanılır.
Dimensionality Reduction
Bu denetimsiz makine öğrenimi yöntemi, ana veya temsili özellikler kümesini seçerek her bir veri örneği için özellik değişkenlerinin sayısını azaltmak için kullanılır. Burada ortaya çıkan bir soru, boyutluluğu neden düşürmemiz gerektiğidir. Bunun arkasındaki sebep, veri örneklerinden milyonlarca özelliği analiz etmeye ve çıkarmaya başladığımızda ortaya çıkan özellik alanı karmaşıklığı sorunudur. Bu problem genellikle "boyutluluk laneti" ile ilgilidir. PCA (Ana Bileşen Analizi), K-en yakın komşular ve diskriminant analizi, bu amaca yönelik popüler algoritmalardan bazılarıdır.
Anomaly Detection
Bu denetimsiz makine öğrenimi yöntemi, genellikle gerçekleşmeyen nadir olayların veya gözlemlerin oluşumlarını bulmak için kullanılır. Öğrenilen bilgileri kullanarak, anormallik algılama yöntemleri, anormal veya normal bir veri noktası arasında ayrım yapabilir. Kümeleme, KNN gibi denetimsiz algoritmalardan bazıları, verilere ve özelliklerine bağlı olarak anormallikleri tespit edebilir.
Yarı denetimli Öğrenme
Bu tür algoritmalar veya yöntemler ne tam olarak denetlenir ne de tamamen denetimsizdir. Temelde iki, yani denetimli ve denetimsiz öğrenme yöntemlerinin arasında yer alırlar. Bu tür algoritmalar genellikle küçük denetimli öğrenme bileşeni kullanır, yani az miktarda önceden etiketlenmiş ek açıklamalı veri ve büyük denetimsiz öğrenme bileşeni, yani eğitim için çok sayıda etiketlenmemiş veri. Yarı denetimli öğrenme yöntemlerini uygulamak için aşağıdaki yaklaşımlardan herhangi birini takip edebiliriz -
İlk ve basit yaklaşım, az miktarda etiketli ve açıklamalı veriye dayalı olarak denetlenen modeli oluşturmak ve daha sonra daha fazla etiketli örnek elde etmek için büyük miktarda etiketlenmemiş veriye aynısını uygulayarak denetimsiz modeli oluşturmaktır. Şimdi, modeli onlar üzerinde eğitin ve süreci tekrarlayın.
- , p> İkinci yaklaşım bazı ekstra çabalara ihtiyaç duyar. Bu yaklaşımda, benzer veri örneklerini kümelemek, bu gruplara açıklama eklemek ve ardından modeli eğitmek için bu bilgilerin bir kombinasyonunu kullanmak için önce denetimsiz yöntemleri kullanabiliriz.
Takviye Öğrenme
Bu yöntemler daha önce çalışılan yöntemlerden farklıdır ve çok nadiren kullanılır. Bu tür öğrenme algoritmalarında, belirli bir ortamla etkileşime girebilmesi için belirli bir süre eğitmek istediğimiz bir aracı olacaktır. Temsilci, çevre ile etkileşim için bir dizi strateji izleyecek ve daha sonra çevreyi gözlemledikten sonra çevrenin mevcut durumu ile ilgili eylemler gerçekleştirecektir. Aşağıdakiler, pekiştirmeli öğrenme yöntemlerinin ana adımlarıdır -
Step1 - İlk olarak, bazı başlangıç stratejileri olan bir temsilci hazırlamamız gerekir.
Step2 - Ardından çevreyi ve mevcut durumunu gözlemleyin.
Step3 - Ardından, ortamın mevcut durumuna ilişkin en uygun ilkeyi seçin ve önemli eylemi gerçekleştirin.
Step4 - Artık temsilci, önceki adımda gerçekleştirdiği eyleme göre ilgili ödülü veya cezayı alabilir.
Step5 - Artık gerekirse stratejileri güncelleyebiliriz.
Step6 - Sonunda, temsilci en uygun politikaları öğrenip benimseyinceye kadar 2-5 arasındaki adımları tekrarlayın.
Makine Öğrenimine Uygun Görevler
Aşağıdaki şema, çeşitli makine öğrenimi sorunları için hangi görev türünün uygun olduğunu gösterir -
Öğrenme yeteneğine dayalı
Öğrenme sürecinde, öğrenme yeteneğine dayalı bazı yöntemler şunlardır:
Batch Learning
Çoğu durumda, tüm mevcut eğitim verilerini kullanarak modeli tek seferde eğitmemiz gereken uçtan uca Makine Öğrenimi sistemlerine sahibiz. Bu tür bir öğrenme yöntemi veya algoritması denirBatch or Offline learning. Tek seferlik bir prosedür olduğu ve model, tek bir gruptaki verilerle eğitileceği için Toplu veya Çevrimdışı öğrenme olarak adlandırılır. Aşağıdakiler, Toplu öğrenme yöntemlerinin ana adımlarıdır -
Step1 - İlk olarak, modeli eğitmeye başlamak için tüm eğitim verilerini toplamamız gerekir.
Step2 - Şimdi, tüm eğitim verilerini tek seferde sağlayarak model eğitimine başlayın.
Step3 - Sonra, tatmin edici sonuçlar / performans elde ettiğinizde öğrenmeyi / eğitim sürecini durdurun.
Step4- Son olarak, bu eğitimli modeli üretime dağıtın. Burada, yeni veri örneği için çıktıyı tahmin edecek.
Çevrimiçi öğrenme
Toplu veya çevrimdışı öğrenme yöntemlerine tamamen zıttır. Bu öğrenme yöntemlerinde, eğitim verileri, algoritmaya mini gruplar adı verilen çoklu artımlı gruplar halinde sağlanır. Çevrimiçi öğrenme yöntemlerinin ana adımları aşağıdadır -
Step1 - İlk olarak, modelin eğitimine başlamak için tüm eğitim verilerini toplamamız gerekir.
Step2 - Şimdi, algoritmaya bir mini grup eğitim verisi sağlayarak model eğitimine başlayın.
Step3 - Daha sonra, algoritmaya birden çok artışla mini grup eğitim verisi sağlamamız gerekir.
Step4 - Toplu öğrenme gibi durmayacağından, tüm eğitim verilerini mini gruplar halinde sağladıktan sonra, ona yeni veri örnekleri de sağlayın.
Step5 - Son olarak, yeni veri örneklerine dayalı olarak bir süre boyunca öğrenmeye devam edecektir.
Genelleme Yaklaşımına Dayalı
Öğrenme sürecinde, aşağıdaki genelleme yaklaşımlarına dayanan bazı yöntemlerdir -
Örnek tabanlı Öğrenme
Örnek tabanlı öğrenme yöntemi, girdi verilerine göre genelleme yaparak ML modellerini oluşturan faydalı yöntemlerden biridir. Bu tür öğrenmenin makine öğrenimi sistemlerini içermesi ve eğitim verileri üzerinde açık bir model oluşturmadan yeni veri örnekleri için sonuçları elde etmek için ham veri noktalarını kullanan yöntemleri içermesi, daha önce incelenen öğrenme yöntemlerinin tam tersidir.
Basit bir deyişle, örnek tabanlı öğrenme temelde girdi veri noktalarına bakarak çalışmaya başlar ve ardından bir benzerlik ölçüsü kullanarak yeni veri noktalarını genelleştirir ve tahmin eder.
Model tabanlı Öğrenme
Model tabanlı öğrenme yöntemlerinde, hiperparametre adı verilen çeşitli model parametrelerine dayalı olarak oluşturulan ve özelliklerin çıkarılması için girdi verilerinin kullanıldığı ML modellerinde yinelemeli bir süreç gerçekleşir. Bu öğrenmede, hiperparametreler çeşitli model doğrulama tekniklerine göre optimize edilir. Bu nedenle Model tabanlı öğrenme yöntemlerinin genellemeye yönelik daha geleneksel MO yaklaşımını kullandığını söyleyebiliriz.
Bir ML projesi başlatmak istiyorsanız, ihtiyacınız olan ilk ve en önemli şey nedir? ML projelerinden herhangi birini başlatmak için yüklememiz gereken veriler budur. Verilerle ilgili olarak, makine öğrenimi projeleri için en yaygın veri biçimi CSV'dir (virgülle ayrılmış değerler).
Temel olarak CSV, bir elektronik tablo gibi tablo verilerini (sayı ve metin) düz metin olarak depolamak için kullanılan basit bir dosya biçimidir. Python'da, CSV verilerini farklı yollarla yükleyebiliriz, ancak CSV verilerini yüklemeden önce bazı hususlara dikkat etmemiz gerekir.
CSV verilerini Yüklerken Dikkat Edilmesi Gerekenler
CSV veri biçimi, makine öğrenimi verileri için en yaygın biçimdir, ancak aynı şeyi makine öğrenimi projelerimize yüklerken önemli hususlara dikkat etmemiz gerekir -
Dosya Başlığı
CSV veri dosyalarında başlık, her alanla ilgili bilgileri içerir. Başlık dosyası ve veri dosyası için aynı sınırlayıcıyı kullanmalıyız, çünkü veri alanlarının nasıl yorumlanacağını belirten başlık dosyasıdır.
Aşağıdakiler, dikkate alınması gereken CSV dosyası başlığıyla ilgili iki durumdur -
Case-I: When Data file is having a file header - Veri dosyası bir dosya başlığına sahipse, her bir veri sütununa adları otomatik olarak atayacaktır.
Case-II: When Data file is not having a file header - Veri dosyası bir dosya başlığına sahip değilse, her veri sütununa isimleri manuel olarak atamamız gerekir.
Her iki durumda da, CSV dosyamızın başlık içerip içermediğini açıkça belirtmemiz gerekir.
Yorumlar
Herhangi bir veri dosyasındaki yorumların önemi vardır. CSV veri dosyasında, yorumlar satırın başında bir kare (#) ile belirtilir. CSV verilerini ML projelerine yüklerken yorumları dikkate almalıyız çünkü dosyada yorumlarımız varsa, bu yorumları bekleyip beklememek, yüklemek için seçtiğimiz yönteme bağlı olarak belirtmemiz gerekebilir.
Sınırlayıcı
CSV veri dosyalarında, virgül (,) karakteri standart ayırıcıdır. Sınırlayıcının rolü, alanlardaki değerleri ayırmaktır. CSV dosyasını ML projelerine yüklerken sınırlayıcının rolünü göz önünde bulundurmak önemlidir, çünkü ayrıca bir sekme veya beyaz boşluk gibi farklı bir sınırlayıcı da kullanabiliriz. Ancak standart olandan farklı bir sınırlayıcı kullanılması durumunda, bunu açıkça belirtmemiz gerekir.
Alıntılar
CSV veri dosyalarında, çift tırnak ("") işareti varsayılan tırnak karakteridir. CSV dosyasını ML projelerine yüklerken tekliflerin rolünü dikkate almak önemlidir, çünkü çift tırnak işaretinden başka tırnak karakteri de kullanabiliriz. Ancak standart olandan farklı bir alıntı karakteri kullanılması durumunda, bunu açıkça belirtmemiz gerekir.
CSV Veri Dosyasını Yükleme Yöntemleri
Makine öğrenimi projeleriyle çalışırken, en önemli görev, verileri düzgün bir şekilde içine yüklemektir. Makine öğrenimi projeleri için en yaygın veri biçimi CSV'dir ve çeşitli tatlarda ve ayrıştırılması çeşitli zorluklarda gelir. Bu bölümde, CSV veri dosyasını yüklemek için Python'da üç yaygın yaklaşımı tartışacağız -
CSV'yi Python Standart Kitaplığı ile yükleyin
CSV veri dosyasını yüklemek için ilk ve en çok kullanılan yaklaşım, bize çeşitli yerleşik modüller, yani csv modülü ve reader () işlevi sağlayan Python standart kitaplığının kullanılmasıdır. Aşağıdaki, yardımıyla CSV veri dosyasını yüklemenin bir örneğidir -
Misal
Bu örnekte, yerel dizinimize indirilebilen iris çiçeği veri setini kullanıyoruz. Veri dosyasını yükledikten sonra onu NumPy dizisine çevirip ML projeleri için kullanabiliriz. Aşağıda, CSV veri dosyasını yüklemek için Python betiği verilmiştir -
Öncelikle Python standart kitaplığı tarafından sağlanan csv modülünü aşağıdaki gibi içe aktarmamız gerekiyor -
import csv
Daha sonra, yüklenen verileri NumPy dizisine dönüştürmek için Numpy modülünü içe aktarmamız gerekiyor.
import numpy as np
Şimdi, yerel dizinimizde depolanan ve CSV veri dosyasına sahip olan dosyanın tam yolunu sağlayın -
path = r"c:\iris.csv"
Ardından, CSV dosyasından verileri okumak için csv.reader () işlevini kullanın -
with open(path,'r') as f:
reader = csv.reader(f,delimiter = ',')
headers = next(reader)
data = list(reader)
data = np.array(data).astype(float)
Başlıkların adlarını aşağıdaki komut dosyası satırıyla yazdırabiliriz -
print(headers)
Aşağıdaki komut dosyası satırı, verilerin şeklini, yani dosyadaki satır ve sütun sayısını yazdıracaktır -
print(data.shape)
Sonraki komut dosyası satırı, veri dosyasının ilk üç satırını verecektir -
print(data[:3])
Output
['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
(150, 4)
[ [5.1 3.5 1.4 0.2]
[4.9 3. 1.4 0.2]
[4.7 3.2 1.3 0.2]]
CSV'yi NumPy ile yükle
CSV veri dosyasını yüklemeye yönelik başka bir yaklaşım, NumPy ve numpy.loadtxt () işlevidir. Aşağıdaki, yardımıyla CSV veri dosyasını yüklemenin bir örneğidir -
Misal
Bu örnekte, diyabetik hastaların verilerini içeren Pima Indians Veri Kümesini kullanıyoruz. Bu veri kümesi, başlığı olmayan sayısal bir veri kümesidir. Yerel dizinimize de indirilebilir. Veri dosyasını yükledikten sonra onu NumPy dizisine çevirip ML projeleri için kullanabiliriz. Aşağıdaki, CSV veri dosyasını yüklemek için Python betiğidir -
from numpy import loadtxt
path = r"C:\pima-indians-diabetes.csv"
datapath= open(path, 'r')
data = loadtxt(datapath, delimiter=",")
print(data.shape)
print(data[:3])
Çıktı
(768, 9)
[ [ 6. 148. 72. 35. 0. 33.6 0.627 50. 1.]
[ 1. 85. 66. 29. 0. 26.6 0.351 31. 0.]
[ 8. 183. 64. 0. 0. 23.3 0.672 32. 1.]]
CSV'yi Pandalarla Yükleme
CSV veri dosyasını yüklemeye yönelik diğer bir yaklaşım, Pandas ve pandas.read_csv () işlevidir. Bu, pandas.DataFrame döndüren çok esnek bir işlevdir ve hemen çizim için kullanılabilir. Aşağıdaki, yardımıyla CSV veri dosyasını yüklemenin bir örneğidir -
Misal
Burada, iki Python betiği uygulayacağız, ilki başlıklara sahip Iris veri seti ile, diğeri ise başlıksız sayısal bir veri seti olan Pima Indians Veri Kümesini kullanarak. Her iki veri seti de yerel dizine indirilebilir.
Script-1
Aşağıda, Iris Veri kümesinde Pandalar kullanılarak CSV veri dosyasını yüklemek için Python betiği verilmiştir -
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
print(data[:3])
Output:
(150, 4)
sepal_length sepal_width petal_length petal_width
0 5.1 3.5 1.4 0.2
1 4.9 3.0 1.4 0.2
2 4.7 3.2 1.3 0.2
Script-2
Aşağıdakiler, CSV veri dosyasını yüklemek için Python betiğidir ve Pima Indians Diyabet veri kümesinde Pandas kullanarak başlık adlarını da sağlar -
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.shape)
print(data[:3])
Output
(768, 9)
preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
CSV veri dosyasını yüklemek için yukarıda kullanılan üç yaklaşım arasındaki fark, verilen örnekler yardımıyla kolayca anlaşılabilir.
Giriş
Makine öğrenimi projeleriyle çalışırken, genellikle en önemli iki parçayı görmezden geliriz. mathematics ve data. Bunun nedeni, makine öğreniminin veriye dayalı bir yaklaşım olduğunu biliyoruz ve makine öğrenimi modelimiz yalnızca sağladığımız veriler kadar iyi veya kötü sonuçlar üretecektir.
Önceki bölümde, CSV verilerini ML projemize nasıl yükleyebileceğimizi tartışmıştık, ancak verileri yüklemeden önce anlamak iyi olacaktır. Verileri istatistiklerle ve görselleştirmeyle iki şekilde anlayabiliriz.
Bu bölümde, Python tariflerini takip ederek, ML verilerini istatistiklerle anlayacağız.
Ham Verilere Bakmak
İlk tarif, ham verilerinize bakmak içindir. Ham verilere bakmak önemlidir, çünkü ham verilere baktıktan sonra elde edeceğimiz içgörü, makine öğrenimi projeleri için verilerin daha iyi işlenmesi ve işlenmesi şansımızı artıracaktır.
Aşağıda, Pima Indians diyabet veri setinde Pandas DataFrame'in head () işlevini kullanarak, onu daha iyi anlamak için ilk 50 satıra bakmak için uygulanan bir Python betiği verilmiştir -
Misal
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
print(data.head(50))
Çıktı
preg plas pres skin test mass pedi age class
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
5 5 116 74 0 0 25.6 0.201 30 0
6 3 78 50 32 88 31.0 0.248 26 1
7 10 115 0 0 0 35.3 0.134 29 0
8 2 197 70 45 543 30.5 0.158 53 1
9 8 125 96 0 0 0.0 0.232 54 1
10 4 110 92 0 0 37.6 0.191 30 0
11 10 168 74 0 0 38.0 0.537 34 1
12 10 139 80 0 0 27.1 1.441 57 0
13 1 189 60 23 846 30.1 0.398 59 1
14 5 166 72 19 175 25.8 0.587 51 1
15 7 100 0 0 0 30.0 0.484 32 1
16 0 118 84 47 230 45.8 0.551 31 1
17 7 107 74 0 0 29.6 0.254 31 1
18 1 103 30 38 83 43.3 0.183 33 0
19 1 115 70 30 96 34.6 0.529 32 1
20 3 126 88 41 235 39.3 0.704 27 0
21 8 99 84 0 0 35.4 0.388 50 0
22 7 196 90 0 0 39.8 0.451 41 1
23 9 119 80 35 0 29.0 0.263 29 1
24 11 143 94 33 146 36.6 0.254 51 1
25 10 125 70 26 115 31.1 0.205 41 1
26 7 147 76 0 0 39.4 0.257 43 1
27 1 97 66 15 140 23.2 0.487 22 0
28 13 145 82 19 110 22.2 0.245 57 0
29 5 117 92 0 0 34.1 0.337 38 0
30 5 109 75 26 0 36.0 0.546 60 0
31 3 158 76 36 245 31.6 0.851 28 1
32 3 88 58 11 54 24.8 0.267 22 0
33 6 92 92 0 0 19.9 0.188 28 0
34 10 122 78 31 0 27.6 0.512 45 0
35 4 103 60 33 192 24.0 0.966 33 0
36 11 138 76 0 0 33.2 0.420 35 0
37 9 102 76 37 0 32.9 0.665 46 1
38 2 90 68 42 0 38.2 0.503 27 1
39 4 111 72 47 207 37.1 1.390 56 1
40 3 180 64 25 70 34.0 0.271 26 0
41 7 133 84 0 0 40.2 0.696 37 0
42 7 106 92 18 0 22.7 0.235 48 0
43 9 171 110 24 240 45.4 0.721 54 1
44 7 159 64 0 0 27.4 0.294 40 0
45 0 180 66 39 0 42.0 1.893 25 1
46 1 146 56 0 0 29.7 0.564 29 0
47 2 71 70 27 0 28.0 0.586 22 0
48 7 103 66 32 0 39.1 0.344 31 1
49 7 105 0 0 0 0.0 0.305 24 0
Yukarıdaki çıktıdan, ilk sütunun, belirli bir gözlemi referans almak için çok yararlı olabilecek satır numarasını verdiğini gözlemleyebiliriz.
Verilerin Boyutlarını Kontrol Etme
Makine öğrenimi projemiz için satırlar ve sütunlar açısından ne kadar veriye sahip olduğumuzu bilmek her zaman iyi bir uygulamadır. Arkasındaki nedenler -
Diyelim ki çok fazla satır ve sütunumuz varsa, algoritmayı çalıştırmak ve modeli eğitmek uzun zaman alacaktır.
Diyelim ki çok az satır ve sütunumuz varsa, modeli iyi eğitmek için yeterli veriye sahip olmayacağız.
Aşağıda, şekil özelliğini Pandas Veri Çerçevesine yazdırarak uygulanan bir Python betiği verilmiştir. İçindeki toplam satır ve sütun sayısını elde etmek için iris veri setine uygulayacağız.
Misal
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.shape)
Çıktı
(150, 4)
Kullanacağımız iris veri setinin 150 satır ve 4 sütuna sahip olduğunu çıktıdan rahatlıkla görebiliyoruz.
Her Özniteliğin Veri Tipini Alma
Her bir özelliğin veri türünü bilmek başka bir iyi uygulamadır. Bunun arkasındaki sebep, ihtiyaca göre, bazen bir veri türünü diğerine dönüştürmemiz gerekebileceğidir. Örneğin, kategorisel veya sıralı değerleri temsil etmek için dizeyi kayan noktaya veya int'e dönüştürmemiz gerekebilir. Ham verilere bakarak özniteliğin veri türü hakkında bir fikir sahibi olabiliriz, ancak başka bir yol da Pandas DataFrame'in dtypes özelliğini kullanmaktır. Dtypes özelliği yardımıyla her bir özniteliğin veri türünü kategorize edebiliriz. Python betiğini takip ederek anlaşılabilir -
Misal
from pandas import read_csv
path = r"C:\iris.csv"
data = read_csv(path)
print(data.dtypes)
Çıktı
sepal_length float64
sepal_width float64
petal_length float64
petal_width float64
dtype: object
Yukarıdaki çıktıdan, her bir özelliğin veri tiplerini kolayca alabiliriz.
Verilerin İstatistiksel Özeti
Verinin şeklini, yani satır ve sütun sayısını elde etmek için Python tarifini tartıştık, ancak çoğu zaman bu veri şeklinden özetleri gözden geçirmemiz gerekir. Her bir ve her veri özelliğinin aşağıdaki 8 istatistiksel özelliğini daha da sağlayan Pandas DataFrame'in açıklama () işlevi yardımıyla yapılabilir -
Count
Mean
Standart sapma
Minimum değer
Maksimum değer
25%
Medyan yani% 50
75%
Misal
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
print(data.shape)
print(data.describe())
Çıktı
(768, 9)
preg plas pres skin test mass pedi age class
count 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00 768.00
mean 3.85 120.89 69.11 20.54 79.80 31.99 0.47 33.24 0.35
std 3.37 31.97 19.36 15.95 115.24 7.88 0.33 11.76 0.48
min 0.00 0.00 0.00 0.00 0.00 0.00 0.08 21.00 0.00
25% 1.00 99.00 62.00 0.00 0.00 27.30 0.24 24.00 0.00
50% 3.00 117.00 72.00 23.00 30.50 32.00 0.37 29.00 0.00
75% 6.00 140.25 80.00 32.00 127.25 36.60 0.63 41.00 1.00
max 17.00 199.00 122.00 99.00 846.00 67.10 2.42 81.00 1.00
Yukarıdaki çıktıdan, verilerin şekli ile birlikte Pima Indian Diabetes veri setinin verilerinin istatistiksel özetini gözlemleyebiliriz.
Sınıf Dağılımının İncelenmesi
Sınıf dağılım istatistikleri, sınıf değerlerinin dengesini bilmemiz gereken sınıflandırma problemlerinde faydalıdır. Sınıf değeri dağılımını bilmek önemlidir çünkü oldukça dengesiz bir sınıf dağılımına sahipsek, yani bir sınıf diğer sınıfa göre çok daha fazla gözlem yapıyorsa, ML projemizin veri hazırlama aşamasında özel işlem gerektirebilir. Pandas DataFrame yardımıyla Python'da kolayca sınıf dağılımı elde edebiliriz.
Misal
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
count_class = data.groupby('class').size()
print(count_class)
Çıktı
Class
0 500
1 268
dtype: int64
Yukarıdaki çıktıdan, sınıf 0'daki gözlem sayısının, sınıf 1'deki gözlem sayısının neredeyse iki katı olduğu açıkça görülebilir.
Nitelikler Arasındaki Korelasyonu İnceleme
İki değişken arasındaki ilişkiye korelasyon denir. İstatistikte, korelasyonu hesaplamanın en yaygın yöntemi Pearson Korelasyon Katsayısı'dır. Aşağıdaki gibi üç değere sahip olabilir -
Coefficient value = 1 - Dolu temsil eder positive değişkenler arasındaki korelasyon.
Coefficient value = -1 - Dolu temsil eder negative değişkenler arasındaki korelasyon.
Coefficient value = 0 - Temsil eder no değişkenler arasında hiç korelasyon.
Veri kümemizdeki özniteliklerin ikili korelasyonlarını ML projesinde kullanmadan önce gözden geçirmemiz her zaman iyidir çünkü doğrusal regresyon ve lojistik regresyon gibi bazı makine öğrenimi algoritmaları, yüksek düzeyde korelasyonlu niteliklere sahipsek kötü performans gösterir. Python'da, Pandas DataFrame'deki corr () işlevi yardımıyla veri kümesi özniteliklerinin bir korelasyon matrisini kolayca hesaplayabiliriz.
Misal
from pandas import read_csv
from pandas import set_option
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
set_option('display.width', 100)
set_option('precision', 2)
correlations = data.corr(method='pearson')
print(correlations)
Çıktı
preg plas pres skin test mass pedi age class
preg 1.00 0.13 0.14 -0.08 -0.07 0.02 -0.03 0.54 0.22
plas 0.13 1.00 0.15 0.06 0.33 0.22 0.14 0.26 0.47
pres 0.14 0.15 1.00 0.21 0.09 0.28 0.04 0.24 0.07
skin -0.08 0.06 0.21 1.00 0.44 0.39 0.18 -0.11 0.07
test -0.07 0.33 0.09 0.44 1.00 0.20 0.19 -0.04 0.13
mass 0.02 0.22 0.28 0.39 0.20 1.00 0.14 0.04 0.29
pedi -0.03 0.14 0.04 0.18 0.19 0.14 1.00 0.03 0.17
age 0.54 0.26 0.24 -0.11 -0.04 0.04 0.03 1.00 0.24
class 0.22 0.47 0.07 0.07 0.13 0.29 0.17 0.24 1.00
Yukarıdaki çıktıdaki matris, veri kümesindeki tüm öznitelik çiftleri arasındaki korelasyonu verir.
Öznitelik Dağılımının Çarpıklığını İnceleme
Çarpıklık, Gaussian olduğu varsayılan ancak çarpık veya bir yönde veya başka bir yönde veya sola veya sağa kaymış görünen dağılım olarak tanımlanabilir. Özniteliklerin çarpıklığını gözden geçirmek, aşağıdaki nedenlerden dolayı önemli görevlerden biridir:
Verilerdeki çarpıklık varlığı, modelimizden daha doğru sonuçlar alabilmemiz için veri hazırlama aşamasında düzeltmeyi gerektirir.
Makine öğrenimi algoritmalarının çoğu, verilerin bir Gauss dağılımına sahip olduğunu varsayar, yani normal veya çan eğimli veriler.
Python'da, Pandas DataFrame'de skew () işlevini kullanarak her bir özniteliğin eğriliğini kolayca hesaplayabiliriz.
Misal
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
print(data.skew())
Çıktı
preg 0.90
plas 0.17
pres -1.84
skin 0.11
test 2.27
mass -0.43
pedi 1.92
age 1.13
class 0.64
dtype: float64
Yukarıdaki çıktıdan, pozitif veya negatif çarpıklık gözlemlenebilir. Değer sıfıra yakınsa daha az çarpıklık gösterir.
Giriş
Önceki bölümde, verileri istatistiklerle anlamak için bazı Python tarifleriyle birlikte Makine Öğrenimi algoritmaları için verilerin önemini tartıştık. Verileri anlamak için Görselleştirme denen başka bir yol var.
Veri görselleştirme yardımıyla verilerin nasıl göründüğünü ve verilerin nitelikleri tarafından ne tür bir korelasyon olduğunu görebiliriz. Özelliklerin çıktıya karşılık gelip gelmediğini görmenin en hızlı yoludur. Python tariflerini takip ederek ML verilerini istatistiklerle anlayabiliriz.
Tek Değişkenli Grafikler: Öznitelikleri Bağımsız Olarak Anlama
En basit görselleştirme türü, tek değişkenli veya "tek değişkenli" görselleştirmedir. Tek değişkenli görselleştirme yardımıyla, veri setimizin her bir özelliğini bağımsız olarak anlayabiliriz. Aşağıdakiler, tek değişkenli görselleştirmeyi uygulamak için Python'da bazı tekniklerdir -
Histogramlar
Histogramlar, verileri bölmelerde gruplandırır ve veri kümesindeki her bir özelliğin dağılımı hakkında fikir edinmenin en hızlı yoludur. Aşağıda histogramların bazı özellikleri verilmiştir -
Görselleştirme için oluşturulan her bölmedeki gözlemlerin sayısını bize sağlar.
Çöp kutusunun şeklinden dağılımı kolaylıkla gözlemleyebiliriz, yani hava durumu Gauss şeklindedir, çarpık veya üsteldir.
Histogramlar ayrıca olası aykırı değerleri görmemize yardımcı olur.
Misal
Aşağıda gösterilen kod, Pima Indian Diabetes veri kümesinin özelliklerinin histogramını oluşturan bir Python komut dosyası örneğidir. Burada, histogramlar oluşturmak için Pandas DataFrame üzerinde hist () işlevini kullanacağız vematplotlib onları çizmek için.
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.hist()
pyplot.show()
Çıktı
Yukarıdaki çıktı, veri kümesindeki her bir öznitelik için histogramı oluşturduğunu gösterir. Bundan, belki de yaş, pedi ve test özniteliğinin üstel dağılım gösterebileceğini, kütle ve plazmanın Gauss dağılımına sahip olabileceğini gözlemleyebiliriz.
Yoğunluk Grafikleri
Her bir öznitelik dağılımını elde etmek için başka bir hızlı ve kolay teknik Yoğunluk grafikleridir. Aynı zamanda histogram gibidir, ancak her bölmenin üstünden düzgün bir eğri çizilir. Bunları soyut histogramlar olarak adlandırabiliriz.
Misal
Aşağıdaki örnekte, Python komut dosyası, Pima Indian Diabetes veri kümesinin özelliklerinin dağıtımı için Yoğunluk Grafikleri oluşturacaktır.
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.plot(kind='density', subplots=True, layout=(3,3), sharex=False)
pyplot.show()
Çıktı
Yukarıdaki çıktıdan Yoğunluk grafikleri ve Histogramlar arasındaki fark kolayca anlaşılabilir.
Kutu ve Bıyık Grafikleri
Kısaca kutu grafikleri olarak da adlandırılan Box ve Whisker grafikleri, her bir özelliğin dağılımının dağılımını gözden geçirmek için başka bir yararlı tekniktir. Aşağıdakiler bu tekniğin özellikleridir -
Doğası gereği tek değişkenlidir ve her bir özelliğin dağılımını özetler.
Orta değer, yani medyan için bir çizgi çizer.
% 25 ve% 75 civarında bir kutu çiziyor.
Ayrıca bize verilerin yayılması hakkında fikir verecek olan bıyıkları da çizer.
Bıyıkların dışındaki noktalar, aykırı değerleri belirtir. Aykırı değerler, ortadaki verilerin yayılma boyutundan 1.5 kat daha büyük olacaktır.
Misal
Aşağıdaki örnekte, Python komut dosyası, Pima Indian Diabetes veri kümesinin özelliklerinin dağıtımı için Yoğunluk Grafikleri oluşturacaktır.
from matplotlib import pyplot
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
data.plot(kind='box', subplots=True, layout=(3,3), sharex=False,sharey=False)
pyplot.show()
Çıktı
Yukarıdaki öznitelik dağılım grafiğinden, yaşın, testin ve cildin daha küçük değerlere doğru çarpık göründüğü gözlemlenebilir.
Çok Değişkenli Grafikler: Birden Çok Değişken Arasındaki Etkileşim
Başka bir görselleştirme türü, çok değişkenli veya "çok değişkenli" görselleştirmedir. Çok değişkenli görselleştirme yardımıyla, veri setimizin birden çok özelliği arasındaki etkileşimi anlayabiliriz. Aşağıdakiler, Python'da çok değişkenli görselleştirme uygulamak için bazı tekniklerdir -
Korelasyon Matrisi Grafiği
Korelasyon, iki değişken arasındaki değişimlerin bir göstergesidir. Önceki bölümlerimizde, Pearson Korelasyon katsayılarını ve Korelasyonun önemini tartışmıştık. Hangi değişkenin başka bir değişkene göre yüksek veya düşük bir korelasyona sahip olduğunu göstermek için korelasyon matrisini çizebiliriz.
Misal
Aşağıdaki örnekte, Python komut dosyası, Pima Indian Diabetes veri kümesi için korelasyon matrisi oluşturacak ve grafiğini çizecektir. Pandas DataFrame üzerinde corr () fonksiyonu yardımıyla üretilebilir ve pyplot yardımı ile grafiği çizilebilir.
from matplotlib import pyplot
from pandas import read_csv
import numpy
Path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(Path, names=names)
correlations = data.corr()
fig = pyplot.figure()
ax = fig.add_subplot(111)
cax = ax.matshow(correlations, vmin=-1, vmax=1)
fig.colorbar(cax)
ticks = numpy.arange(0,9,1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(names)
ax.set_yticklabels(names)
pyplot.show()
Çıktı
Korelasyon matrisinin yukarıdaki çıktısından simetrik olduğunu görebiliriz, yani sol alt sağ üst ile aynıdır. Ayrıca her bir değişkenin birbiriyle pozitif korelasyon içinde olduğu da gözlenmektedir.
Dağılım Matrisi Grafiği
Dağılım grafikleri, bir değişkenin diğerinden ne kadar etkilendiğini veya aralarındaki ilişkiyi iki boyuttaki noktalar yardımıyla gösterir. Dağılım grafikleri, veri noktalarını çizmek için yatay ve dikey eksenleri kullanma konseptinde çizgi grafiklere çok benzer.
Misal
Aşağıdaki örnekte, Python komut dosyası, Pima Indian Diabetes veri kümesi için Dağılım matrisi oluşturacak ve grafiğini çizecektir. Pandas DataFrame üzerinde scatter_matrix () fonksiyonu yardımı ile üretilebilir ve pyplot yardımı ile grafiği çizilebilir.
from matplotlib import pyplot
from pandas import read_csv
from pandas.tools.plotting import scatter_matrix
path = r"C:\pima-indians-diabetes.csv"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=names)
scatter_matrix(data)
pyplot.show()
Çıktı
Giriş
Makine Öğrenimi algoritmaları tamamen verilere bağlıdır çünkü model eğitimini mümkün kılan en önemli unsurdur. Öte yandan, ML algoritmalarına beslemeden önce bu verilerden bir anlam çıkaramazsak, bir makine işe yaramaz. Basit bir deyişle, makinenin çözmesini istediğimiz problem için her zaman doğru verileri, yani verileri doğru ölçekte, formatta ve anlamlı özellikler içeren beslememiz gerekir.
Bu, veri hazırlamayı makine öğrenimi sürecinde en önemli adım yapar. Veri hazırlama, veri setimizi ML sürecine daha uygun hale getiren prosedür olarak tanımlanabilir.
Neden Veri Ön İşleme?
Makine öğrenimi eğitimi için ham verileri seçtikten sonra, en önemli görev verilerin ön işlemesidir. Geniş anlamda, veri ön işleme, seçilen verileri birlikte çalışabileceğimiz veya ML algoritmalarına besleyebileceğimiz bir forma dönüştürecektir. Verilerimizi her zaman makine öğrenimi algoritmasının beklentilerine uygun olacak şekilde önceden işlememiz gerekir.
Veri Ön İşleme Teknikleri
Makine öğrenimi algoritmaları için veri üretmek üzere veri kümesine uygulanabilecek aşağıdaki veri ön işleme tekniklerine sahibiz:
Ölçeklendirme
Büyük olasılıkla veri kümemiz değişen ölçeğe sahip özniteliklerden oluşuyor, ancak bu tür verileri ML algoritmasına sağlayamıyoruz, bu nedenle yeniden ölçeklendirme gerektiriyor. Veri yeniden ölçeklendirme, özniteliklerin aynı ölçekte olmasını sağlar. Genel olarak, öznitelikler 0 ve 1 aralığına yeniden ölçeklenir. Gradyan inişi ve k-En Yakın Komşular gibi ML algoritmaları, ölçeklendirilmiş veri gerektirir. Scikit-learn Python kitaplığının MinMaxScaler sınıfı yardımıyla verileri yeniden ölçeklendirebiliriz.
Misal
Bu örnekte, daha önce kullandığımız Pima Indians Diabetes veri setinin verilerini yeniden ölçeklendireceğiz. Önce CSV verileri yüklenecek (önceki bölümlerde yapıldığı gibi) ve ardından MinMaxScaler sınıfı yardımıyla 0 ve 1 aralığında yeniden ölçeklendirilecektir.
Aşağıdaki komut dosyasının ilk birkaç satırı, CSV verilerini yüklerken önceki bölümlerde yazdığımızla aynıdır.
from pandas import read_csv
from numpy import set_printoptions
from sklearn import preprocessing
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Şimdi, 0 ve 1 aralığındaki verileri yeniden ölçeklendirmek için MinMaxScaler sınıfını kullanabiliriz.
data_scaler = preprocessing.MinMaxScaler(feature_range=(0,1))
data_rescaled = data_scaler.fit_transform(array)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada hassasiyeti 1 olarak ayarlıyoruz ve çıktıdaki ilk 10 satırı gösteriyoruz.
set_printoptions(precision=1)
print ("\nScaled data:\n", data_rescaled[0:10])
Çıktı
Scaled data:
[[0.4 0.7 0.6 0.4 0. 0.5 0.2 0.5 1. ]
[0.1 0.4 0.5 0.3 0. 0.4 0.1 0.2 0. ]
[0.5 0.9 0.5 0. 0. 0.3 0.3 0.2 1. ]
[0.1 0.4 0.5 0.2 0.1 0.4 0. 0. 0. ]
[0. 0.7 0.3 0.4 0.2 0.6 0.9 0.2 1. ]
[0.3 0.6 0.6 0. 0. 0.4 0.1 0.2 0. ]
[0.2 0.4 0.4 0.3 0.1 0.5 0.1 0.1 1. ]
[0.6 0.6 0. 0. 0. 0.5 0. 0.1 0. ]
[0.1 1. 0.6 0.5 0.6 0.5 0. 0.5 1. ]
[0.5 0.6 0.8 0. 0. 0. 0.1 0.6 1. ]]
Yukarıdaki çıktıdan, tüm veriler 0 ve 1 aralığına yeniden ölçeklendi.
Normalleştirme
Başka bir yararlı veri ön işleme tekniği Normalizasyondur. Bu, her veri satırını 1 uzunluğa sahip olacak şekilde yeniden ölçeklendirmek için kullanılır. Bu, çoğunlukla çok sayıda sıfırın olduğu Seyrek veri kümesinde kullanışlıdır. Scikit-learn Python kitaplığının Normalizer sınıfı yardımıyla verileri yeniden ölçeklendirebiliriz.
Normalleştirme Türleri
Makine öğrenmesinde, aşağıdaki gibi iki tür normalleştirme ön işleme tekniği vardır:
L1 Normalleştirme
Veri kümesi değerlerini, her satırda mutlak değerlerin toplamı her zaman 1'e kadar olacak şekilde değiştiren normalleştirme tekniği olarak tanımlanabilir. Buna En Az Mutlak Sapmalar da denir.
Example
Bu örnekte, daha önce kullandığımız Pima Indians Diabetes veri setinin verilerini normalleştirmek için L1 Normalize tekniğini kullanıyoruz. Öncelikle CSV verileri yüklenecek ve ardından Normalizer sınıfı yardımıyla normalize edilecektir.
Aşağıdaki komut dosyasının ilk birkaç satırı, CSV verilerini yüklerken önceki bölümlerde yazdığımızla aynıdır.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values
Şimdi, verileri normalleştirmek için Normalizer sınıfını L1 ile kullanabiliriz.
Data_normalizer = Normalizer(norm='l1').fit(array)
Data_normalized = Data_normalizer.transform(array)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada hassasiyeti 2'ye ayarlıyoruz ve çıktıdaki ilk 3 satırı gösteriyoruz.
set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])
Output
Normalized data:
[[0.02 0.43 0.21 0.1 0. 0.1 0. 0.14 0. ]
[0. 0.36 0.28 0.12 0. 0.11 0. 0.13 0. ]
[0.03 0.59 0.21 0. 0. 0.07 0. 0.1 0. ]]
L2 Normalleştirme
Veri kümesi değerlerini, her satırda karelerin toplamı her zaman 1'e kadar olacak şekilde değiştiren normalleştirme tekniği olarak tanımlanabilir. En küçük kareler olarak da adlandırılır.
Example
Bu örnekte, daha önce kullandığımız Pima Indians Diabetes veri setinin verilerini normalleştirmek için L2 Normalizasyon tekniğini kullanıyoruz. Önce CSV verileri yüklenecek (önceki bölümlerde yapıldığı gibi) ve ardından Normalizer sınıfı yardımıyla normalize edilecektir.
Aşağıdaki komut dosyasının ilk birkaç satırı, CSV verilerini yüklerken önceki bölümlerde yazdığımızla aynıdır.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.preprocessing import Normalizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv (path, names=names)
array = dataframe.values
Şimdi, verileri normalleştirmek için Normalizer sınıfını L1 ile kullanabiliriz.
Data_normalizer = Normalizer(norm='l2').fit(array)
Data_normalized = Data_normalizer.transform(array)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada hassasiyeti 2'ye ayarlıyoruz ve çıktıdaki ilk 3 satırı gösteriyoruz.
set_printoptions(precision=2)
print ("\nNormalized data:\n", Data_normalized [0:3])
Output
Normalized data:
[[0.03 0.83 0.4 0.2 0. 0.19 0. 0.28 0.01]
[0.01 0.72 0.56 0.24 0. 0.22 0. 0.26 0. ]
[0.04 0.92 0.32 0. 0. 0.12 0. 0.16 0.01]]
İkilileştirme
Adından da anlaşılacağı gibi, bu, verilerimizi ikili hale getirebileceğimiz tekniktir. Verilerimizi ikili yapmak için ikili eşik kullanabiliriz. Bu eşik değerin üzerindeki değerler 1'e ve bu eşiğin altındaki değerler 0'a dönüştürülecektir. Örneğin, eşik değeri = 0.5 seçersek, üstündeki veri kümesi değeri 1 olacak ve bunun altındaki değerler 0 olacaktır. neden arayabilirizbinarizing veri veya thresholdingveri. Bu teknik, veri setimizde olasılıklar olduğunda ve bunları net değerlere dönüştürmek istediğimizde kullanışlıdır.
Scikit-learn Python kitaplığının Binarizer sınıfı yardımıyla verileri ikileştirebiliriz.
Misal
Bu örnekte, daha önce kullandığımız Pima Indians Diabetes veri setinin verilerini yeniden ölçeklendireceğiz. Önce CSV verileri yüklenecek ve ardından Binarizer sınıfı yardımıyla eşik değerine bağlı olarak 0 ve 1 gibi ikili değerlere dönüştürülecektir. 0.5 eşik değeri alıyoruz.
Aşağıdaki komut dosyasının ilk birkaç satırı, CSV verilerini yüklerken önceki bölümlerde yazdığımızla aynıdır.
from pandas import read_csv
from sklearn.preprocessing import Binarizer
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Şimdi, verileri ikili değerlere dönüştürmek için Binarize sınıfını kullanabiliriz.
binarizer = Binarizer(threshold=0.5).fit(array)
Data_binarized = binarizer.transform(array)
Burada çıktıdaki ilk 5 satırı gösteriyoruz.
print ("\nBinary data:\n", Data_binarized [0:5])
Çıktı
Binary data:
[[1. 1. 1. 1. 0. 1. 1. 1. 1.]
[1. 1. 1. 1. 0. 1. 0. 1. 0.]
[1. 1. 1. 0. 0. 1. 1. 1. 1.]
[1. 1. 1. 1. 1. 1. 0. 1. 0.]
[0. 1. 1. 1. 1. 1. 1. 1. 1.]]
Standardizasyon
Temelde veri özniteliklerini bir Gauss dağılımı ile dönüştürmek için kullanılan başka bir yararlı veri ön işleme tekniği. Ortalama ve SD'yi (Standart Sapma), ortalaması 0 ve SD'si 1 olan standart bir Gauss dağılımına ayırır. Bu teknik, doğrusal regresyon, girdi veri kümesinde Gauss dağılımını varsayan ve daha iyi üreten lojistik regresyon gibi ML algoritmalarında kullanışlıdır. yeniden ölçeklendirilmiş verilerle sonuçlar. Scikit-learn Python kitaplığının StandardScaler sınıfı yardımıyla verileri standartlaştırabiliriz (ortalama = 0 ve SD = 1).
Misal
Bu örnekte, daha önce kullandığımız Pima Indians Diabetes veri setinin verilerini yeniden ölçeklendireceğiz. Önce CSV verileri yüklenecek ve ardından StandardScaler sınıfının yardımıyla ortalama = 0 ve SD = 1 ile Gauss Dağılımına dönüştürülecektir.
Aşağıdaki komut dosyasının ilk birkaç satırı, CSV verilerini yüklerken önceki bölümlerde yazdığımızla aynıdır.
from sklearn.preprocessing import StandardScaler
from pandas import read_csv
from numpy import set_printoptions
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Şimdi, verileri yeniden ölçeklendirmek için StandardScaler sınıfını kullanabiliriz.
data_scaler = StandardScaler().fit(array)
data_rescaled = data_scaler.transform(array)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada hassasiyeti 2'ye ayarlıyoruz ve çıktıdaki ilk 5 satırı gösteriyoruz.
set_printoptions(precision=2)
print ("\nRescaled data:\n", data_rescaled [0:5])
Çıktı
Rescaled data:
[[ 0.64 0.85 0.15 0.91 -0.69 0.2 0.47 1.43 1.37]
[-0.84 -1.12 -0.16 0.53 -0.69 -0.68 -0.37 -0.19 -0.73]
[ 1.23 1.94 -0.26 -1.29 -0.69 -1.1 0.6 -0.11 1.37]
[-0.84 -1. -0.16 0.15 0.12 -0.49 -0.92 -1.04 -0.73]
[-1.14 0.5 -1.5 0.91 0.77 1.41 5.48 -0.02 1.37]]
Veri Etiketleme
ML algoritmaları için iyi verilerin önemini ve verileri makine öğrenimi algoritmalarına göndermeden önce önceden işlemek için bazı teknikleri tartıştık. Bu bağlamda bir başka husus da veri etiketlemedir. Verileri doğru etiketlemeye sahip makine öğrenimi algoritmalarına göndermek de çok önemlidir. Örneğin sınıflandırma problemleri olması durumunda veriler üzerinde kelime, sayı vb. Şeklinde çok sayıda etiket bulunmaktadır.
Etiket Kodlama nedir?
Sklearn işlevlerinin çoğu, verilerin sözcük etiketleri yerine sayı etiketleri olmasını bekler. Bu nedenle, bu tür etiketleri sayı etiketlerine dönüştürmemiz gerekiyor. Bu işleme etiket kodlama denir. Scikit-learn Python kütüphanesinin LabelEncoder () fonksiyonu yardımıyla verilerin etiket kodlamasını gerçekleştirebiliriz.
Misal
Aşağıdaki örnekte, Python betiği etiket kodlamasını gerçekleştirecektir.
İlk olarak, gerekli Python kitaplıklarını aşağıdaki gibi içe aktarın -
import numpy as np
from sklearn import preprocessing
Şimdi, giriş etiketlerini aşağıdaki gibi sağlamamız gerekiyor -
input_labels = ['red','black','red','green','black','yellow','white']
Sonraki kod satırı, etiket kodlayıcıyı oluşturacak ve eğitecektir.
encoder = preprocessing.LabelEncoder()
encoder.fit(input_labels)
Sonraki komut satırı satırları, rastgele sıralı listeyi kodlayarak performansı kontrol edecektir -
test_labels = ['green','red','black']
encoded_values = encoder.transform(test_labels)
print("\nLabels =", test_labels)
print("Encoded values =", list(encoded_values))
encoded_values = [3,0,4,1]
decoded_list = encoder.inverse_transform(encoded_values)
Aşağıdaki python betiğinin yardımıyla kodlanmış değerlerin listesini alabiliriz -
print("\nEncoded values =", encoded_values)
print("\nDecoded labels =", list(decoded_list))
Çıktı
Labels = ['green', 'red', 'black']
Encoded values = [1, 2, 0]
Encoded values = [3, 0, 4, 1]
Decoded labels = ['white', 'black', 'yellow', 'green']
Önceki bölümde, makine öğrenimi için verilerin nasıl ön işleneceğini ve hazırlanacağını ayrıntılı olarak gördük. Bu bölümde, veri özelliği seçimini ve bununla ilgili çeşitli yönleri ayrıntılı olarak anlayalım.
Veri Özelliği Seçiminin Önemi
Makine öğrenimi modelinin performansı, onu eğitmek için kullanılan veri özellikleriyle doğru orantılıdır. Makine öğrenimi modelinin performansı, kendisine sağlanan veri özelliklerinin alakasız olması durumunda olumsuz etkilenecektir. Öte yandan, ilgili veri özelliklerinin kullanılması, ML modelinizin doğruluğunu, özellikle doğrusal ve lojistik regresyonu artırabilir.
Şimdi, otomatik özellik seçiminin ne olduğu sorusu ortaya çıkıyor. Verilerimizdeki ilgilendiğimiz çıktı veya tahmin değişkeniyle en alakalı özellikleri seçtiğimiz süreç olarak tanımlanabilir. Aynı zamanda nitelik seçimi olarak da adlandırılır.
Aşağıdakiler, verileri modellemeden önce otomatik özellik seçiminin faydalarından bazılarıdır -
Veri modellemeden önce özellik seçimi yapmak, aşırı uyumu azaltacaktır.
Veri modellemeden önce özellik seçiminin yapılması ML modelinin doğruluğunu artıracaktır.
Veri modellemeden önce özellik seçimi yapmak eğitim süresini azaltacaktır
Özellik Seçim Teknikleri
Aşağıdakiler, Python'da makine öğrenimi verilerini modellemek için kullanabileceğimiz otomatik özellik seçme teknikleridir -
Tek Değişkenli Seçim
Bu özellik seçim tekniği, tahmin değişkenleri ile en güçlü ilişkiye sahip olan istatistiksel testlerin yardımıyla bu özelliklerin seçiminde çok kullanışlıdır. Scikit-learn Python kitaplığının SelectKBest0class yardımıyla tek değişkenli özellik seçme tekniğini uygulayabiliriz.
Example
Bu örnekte, ki-kare istatistiksel test yardımıyla en iyi özelliklere sahip olan özelliklerden 4 tanesini seçmek için Pima Indians Diabetes veri setini kullanacağız.
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden en iyi özellikleri seçecektir -
test = SelectKBest(score_func=chi2, k=4)
fit = test.fit(X,Y)
Ayrıca çıktı için verileri seçimimize göre özetleyebiliriz. Burada, hassasiyeti 2'ye ayarlıyoruz ve her bir özelliğin en iyi puanıyla birlikte en iyi özelliklere sahip 4 veri özelliğini gösteriyoruz -
set_printoptions(precision=2)
print(fit.scores_)
featured_data = fit.transform(X)
print ("\nFeatured data:\n", featured_data[0:4])
Output
[ 111.52 1411.89 17.61 53.11 2175.57 127.67 5.39 181.3 ]
Featured data:
[[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
[ 89. 94. 28.1 21. ]]
Yinelemeli Özellik Kaldırma
Adından da anlaşılacağı gibi, RFE (Özyinelemeli özellik eleme) özellik seçme tekniği, öznitelikleri özyinelemeli olarak kaldırır ve modeli kalan özniteliklerle oluşturur. RFE özellik seçme tekniğini scikit-learn Python kitaplığının RFE sınıfı yardımıyla uygulayabiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri kümesinden en iyi özelliklere sahip en iyi 3 özelliği seçmek için lojistik regresyon algoritmalı RFE'yi kullanacağız.
from pandas import read_csv
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Sonra, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, bir veri kümesindeki en iyi özellikleri seçecektir -
model = LogisticRegression()
rfe = RFE(model, 3)
fit = rfe.fit(X, Y)
print("Number of Features: %d")
print("Selected Features: %s")
print("Feature Ranking: %s")
Çıktı
Number of Features: 3
Selected Features: [ True False False False False True True False]
Feature Ranking: [1 2 3 5 6 1 1 4]
Yukarıdaki çıktıda RFE'nin en iyi 3 özellik olarak preg, mass ve pedi'yi seçtiğini görebiliriz. Çıkışta 1 olarak işaretlenirler.
Temel Bileşen Analizi (PCA)
Genel olarak veri azaltma tekniği olarak adlandırılan PCA, veri setini sıkıştırılmış bir forma dönüştürmek için doğrusal cebir kullandığı için çok kullanışlı özellik seçme tekniğidir. PCA özellik seçim tekniğini scikit-learn Python kitaplığının PCA sınıfı yardımıyla uygulayabiliriz. Çıktıdaki ana bileşen sayısını seçebiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri setinden en iyi 3 Ana bileşeni seçmek için PCA kullanacağız.
from pandas import read_csv
from sklearn.decomposition import PCA
path = r'C:\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(path, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden özellikleri çıkaracaktır -
pca = PCA(n_components=3)
fit = pca.fit(X)
print("Explained Variance: %s") % fit.explained_variance_ratio_
print(fit.components_)
Çıktı
Explained Variance: [ 0.88854663 0.06159078 0.02579012]
[[ -2.02176587e-03 9.78115765e-02 1.60930503e-02 6.07566861e-02
9.93110844e-01 1.40108085e-02 5.37167919e-04 -3.56474430e-03]
[ 2.26488861e-02 9.72210040e-01 1.41909330e-01 -5.78614699e-02
-9.46266913e-02 4.69729766e-02 8.16804621e-04 1.40168181e-01]
[ -2.24649003e-02 1.43428710e-01 -9.22467192e-01 -3.07013055e-01
2.09773019e-02 -1.32444542e-01 -6.39983017e-04 -1.25454310e-01]]
Yukarıdaki çıktıdan, 3 Ana Bileşenin kaynak verilere çok az benzerlik gösterdiğini gözlemleyebiliriz.
Özellik Önemi
Adından da anlaşılacağı gibi, önem özelliklerini seçmek için özellik önem tekniği kullanılmaktadır. Temel olarak, özellikleri seçmek için eğitimli bir denetimli sınıflandırıcı kullanır. Scikit-learn Python kitaplığının ExtraTreeClassifier sınıfı yardımıyla bu özellik seçme tekniğini uygulayabiliriz.
Misal
Bu örnekte, Pima Indians Diabetes veri setinden özellikler seçmek için ExtraTreeClassifier'ı kullanacağız.
from pandas import read_csv
from sklearn.ensemble import ExtraTreesClassifier
path = r'C:\Desktop\pima-indians-diabetes.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
dataframe = read_csv(data, names=names)
array = dataframe.values
Ardından, diziyi giriş ve çıkış bileşenlerine ayıracağız -
X = array[:,0:8]
Y = array[:,8]
Aşağıdaki kod satırları, veri kümesinden özellikleri çıkaracaktır -
model = ExtraTreesClassifier()
model.fit(X, Y)
print(model.feature_importances_)
Çıktı
[ 0.11070069 0.2213717 0.08824115 0.08068703 0.07281761 0.14548537 0.12654214 0.15415431]
Çıktıdan, her öznitelik için puanlar olduğunu gözlemleyebiliriz. Puan ne kadar yüksekse, bu özelliğin önemi de o kadar yüksektir.
Sınıflandırmaya Giriş
Sınıflandırma, gözlenen değerlerden veya verilen veri noktalarından sınıf veya kategori tahmin etme süreci olarak tanımlanabilir. Kategorize edilmiş çıktı "Siyah" veya "Beyaz" veya "istenmeyen posta" veya "istenmeyen posta yok" şeklinde olabilir.
Matematiksel olarak sınıflandırma, girdi değişkenlerinden (X) çıktı değişkenlerine (Y) bir eşleme fonksiyonunu (f) yaklaştırma görevidir. Temel olarak, hedeflerin giriş veri setiyle birlikte sağlandığı denetimli makine öğrenimine aittir.
Sınıflandırma problemine bir örnek, e-postalarda spam tespiti olabilir. Yalnızca iki çıktı kategorisi olabilir, "istenmeyen posta" ve "istenmeyen posta yok"; dolayısıyla bu bir ikili tip sınıflandırmadır.
Bu sınıflandırmayı uygulamak için önce sınıflandırıcıyı eğitmemiz gerekir. Bu örnek için, eğitim verileri olarak "spam" ve "spam yok" e-postaları kullanılacaktır. Sınıflandırıcıyı başarıyla eğittikten sonra, bilinmeyen bir e-postayı tespit etmek için kullanılabilir.
Sınıflandırmadaki Öğrenci Türleri
Sınıflandırma problemleriyle ilgili olarak iki tür öğrencimiz var -
Tembel Öğrenciler
Adından da anlaşılacağı gibi, bu tür öğrenciler, eğitim verilerini depoladıktan sonra test verilerinin görünmesini bekler. Sınıflandırma ancak test verileri alındıktan sonra yapılır. Eğitime daha az, tahmin etmeye daha çok zaman harcıyorlar. Tembel öğrenenlere örnek olarak K-en yakın komşu ve vaka temelli muhakeme verilebilir.
Hevesli Öğrenciler
Tembel öğrencilerin tersine, istekli öğrenciler, eğitim verilerini depoladıktan sonra test verilerinin görünmesini beklemeden sınıflandırma modeli oluşturur. Eğitime daha fazla, tahmin etmeye daha az zaman harcarlar. Hevesli öğrenenlerin örnekleri Karar Ağaçları, Naif Bayes ve Yapay Sinir Ağlarıdır (YSA).
Python'da Sınıflandırıcı Oluşturma
Makine öğrenimi için bir Python kitaplığı olan Scikit-learn, Python'da bir sınıflandırıcı oluşturmak için kullanılabilir. Python'da bir sınıflandırıcı oluşturmanın adımları aşağıdaki gibidir -
Adım 1: Gerekli python paketini içe aktarma
Scikit-learn kullanarak bir sınıflandırıcı oluşturmak için onu içe aktarmamız gerekir. Aşağıdaki komut dosyasını kullanarak içe aktarabiliriz -
import sklearn
Adım 2: Veri kümesini içe aktarma
Gerekli paketi içe aktardıktan sonra, sınıflandırma tahmin modelini oluşturmak için bir veri setine ihtiyacımız var. Sklearn veri setinden içe aktarabilir veya ihtiyacımıza göre diğerini kullanabiliriz. Sklearn'ın Meme Kanseri Wisconsin Teşhis Veritabanını kullanacağız. Aşağıdaki komut dosyası yardımıyla içe aktarabiliriz -
from sklearn.datasets import load_breast_cancer
Aşağıdaki komut dosyası, veri kümesini yükleyecektir;
data = load_breast_cancer()
Ayrıca verileri düzenlememiz gerekiyor ve aşağıdaki komut dosyaları yardımıyla yapılabilir -
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
Aşağıdaki komut, veri tabanımız olması durumunda 'kötü huylu' ve 'zararsız' etiketlerin adını yazdıracaktır.
print(label_names)
Yukarıdaki komutun çıktısı etiketlerin isimleridir -
['malignant' 'benign']
Bu etiketler, 0 ve 1 ikili değerleriyle eşleştirilir. Malignant kanser 0 ile temsil edilir ve Benign kanser 1 ile temsil edilir.
Bu etiketlerin özellik adları ve özellik değerleri aşağıdaki komutlar yardımı ile görülebilir -
print(feature_names[0])
Yukarıdaki komutun çıktısı, etiket 0 için özelliklerin isimleridir. Malignant kanser -
mean radius
Benzer şekilde, etiket özelliklerinin isimleri aşağıdaki gibi üretilebilir -
print(feature_names[1])
Yukarıdaki komutun çıktısı, etiket 1 için özelliklerin isimleridir. Benign kanser -
mean texture
Bu etiketlerin özelliklerini aşağıdaki komut yardımı ile yazdırabiliriz -
print(features[0])
Bu, aşağıdaki çıktıyı verecektir -
[1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
4.601e-01 1.189e-01]
Bu etiketlerin özelliklerini aşağıdaki komut yardımı ile yazdırabiliriz -
print(features[1])
Bu, aşağıdaki çıktıyı verecektir -
[2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02
7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01
5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01
2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01
2.750e-01 8.902e-02]
3. Adım: Verileri eğitim ve test setleri halinde düzenleme
Modelimizi görünmeyen veriler üzerinde test etmemiz gerektiğinden, veri setimizi iki bölüme ayıracağız: bir eğitim seti ve bir test seti. Verileri kümelere ayırmak için sklearn python paketinin train_test_split () işlevini kullanabiliriz. Aşağıdaki komut işlevi içe aktaracaktır -
from sklearn.model_selection import train_test_split
Şimdi, bir sonraki komut verileri eğitim ve test verilerine böler. Bu örnekte, verilerin yüzde 40'ını test amacıyla ve yüzde 60'ını eğitim amacıyla alıyoruz -
train, test, train_labels, test_labels = train_test_split(features,labels,test_size = 0.40, random_state = 42)
Adım 4 - Model değerlendirmesi
Verileri eğitim ve teste böldükten sonra modeli oluşturmamız gerekir. Bu amaçla Naïve Bayes algoritmasını kullanacağız. Aşağıdaki komutlar GaussianNB modülünü içe aktaracaktır -
from sklearn.naive_bayes import GaussianNB
Şimdi modeli aşağıdaki gibi başlatın -
gnb = GaussianNB()
Ardından, aşağıdaki komutun yardımıyla modeli eğitebiliriz -
model = gnb.fit(train, train_labels)
Şimdi değerlendirme amacıyla tahminler yapmamız gerekiyor. Predict () işlevi aşağıdaki gibi kullanılarak yapılabilir -
preds = gnb.predict(test)
print(preds)
Bu, aşağıdaki çıktıyı verecektir -
[1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0
1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0
1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0
1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0
1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0
0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1
0 0 1 1 0 1]
Çıkıştaki yukarıdaki 0'lar ve 1'ler serisi, Malignant ve Benign tümör sınıfları.
Adım5- Doğruluk bulma
Test_labels ve preds olmak üzere iki diziyi karşılaştırarak önceki adımda model derlemesinin doğruluğunu bulabiliriz. Doğruluğu belirlemek için doğruluk_score () işlevini kullanacağız.
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
Yukarıdaki çıktı NaïveBayes sınıflandırıcısının% 95,17 doğru olduğunu göstermektedir.
Sınıflandırma Değerlendirme Metrikleri
Makine Öğrenimi uygulamanızın veya modelinizin uygulamasını bitirmiş olsanız bile iş bitmez. Modelimizin ne kadar etkili olduğunu bulmalı mıyız? Farklı değerlendirme ölçütleri olabilir, ancak bunu dikkatlice seçmeliyiz çünkü ölçü seçimi, bir makine öğrenimi algoritmasının performansının nasıl ölçüldüğünü ve karşılaştırıldığını etkiler.
Aşağıdakiler, veri kümenize ve sorun türünüze göre seçebileceğiniz önemli sınıflandırma değerlendirme ölçütlerinden bazılarıdır -
Karışıklık Matrisi
Çıktının iki veya daha fazla sınıf türünden olabileceği bir sınıflandırma probleminin performansını ölçmenin en kolay yoludur. Karışıklık matrisi, iki boyutlu bir tablodan başka bir şey değildir. "Gerçek" ve "Öngörülen" ve ayrıca, her iki boyutun da aşağıda gösterildiği gibi "Gerçek Pozitifler (TP)", "Gerçek Negatifler (TN)", "Yanlış Pozitifler (FP)", "Yanlış Negatifler (FN)" vardır -
True Positives (TP) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 1 olduğu durumdur.
True Negatives (TN) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 0 olduğu durumdur.
False Positives (FP) - Gerçek veri noktası sınıfının 0 ve tahmin edilen veri noktası sınıfının 1 olduğu durumdur.
False Negatives (FN) - Gerçek veri noktası sınıfının 1 ve tahmin edilen veri noktası sınıfının 0 olduğu durumdur.
Karışıklık matrisini sklearn'ın confusion_matrix () fonksiyonu yardımıyla bulabiliriz. Aşağıdaki betik yardımıyla, yukarıdaki yerleşik ikili sınıflandırıcının karışıklık matrisini bulabiliriz -
from sklearn.metrics import confusion_matrix
Çıktı
[[ 73 7]
[ 4 144]]
Doğruluk
Makine öğrenimi modelimiz tarafından yapılan doğru tahminlerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$$=\frac{+}{+++}$$Yukarıda yerleşik ikili sınıflandırıcı için, TP + TN = 73 + 144 = 217 ve TP + FP + FN + TN = 73 + 7 + 4 + 144 = 228.
Dolayısıyla, Doğruluk = 217/228 = 0.951754385965, ikili sınıflandırıcımızı oluşturduktan sonra hesapladığımızla aynıdır.
Hassas
Belge erişimlerinde kullanılan kesinlik, ML modelimiz tarafından iade edilen doğru belge sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$$=\frac{}{+FP}$$Yukarıdaki yerleşik ikili sınıflandırıcı için, TP = 73 ve TP + FP = 73 + 7 = 80.
Dolayısıyla, Kesinlik = 73/80 = 0.915
Hatırlama veya Hassasiyet
Geri çağırma, ML modelimiz tarafından döndürülen pozitiflerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$$=\frac{}{+FN}$$Yukarıda yerleşik ikili sınıflandırıcı için, TP = 73 ve TP + FN = 73 + 4 = 77.
Dolayısıyla, Kesinlik = 73/77 = 0,94805
Özgüllük
Özgünlük, geri çağırmanın aksine, ML modelimiz tarafından döndürülen negatif sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$$=\frac{N}{N+FP}$$Yukarıda yerleşik ikili sınıflandırıcı için TN = 144 ve TN + FP = 144 + 7 = 151.
Dolayısıyla, Kesinlik = 144/151 = 0.95364
Çeşitli ML Sınıflandırma Algoritmaları
Aşağıdakiler, bazı önemli makine öğrenimi sınıflandırma algoritmalarıdır -
Lojistik regresyon
Destek Vektör Makinesi (SVM)
Karar ağacı
Naif bayanlar
Rastgele Orman
Tüm bu sınıflandırma algoritmalarını ileriki bölümlerde ayrıntılı olarak tartışacağız.
Uygulamalar
Sınıflandırma algoritmalarının en önemli uygulamalarından bazıları aşağıdaki gibidir -
Konuşma tanıma
Elyazısı tanıma
Biyometrik Tanımlama
Belge Sınıflandırması
Lojistik Regresyona Giriş
Lojistik regresyon, bir hedef değişkenin olasılığını tahmin etmek için kullanılan denetimli bir öğrenme sınıflandırma algoritmasıdır. Hedef veya bağımlı değişkenin doğası ikiye bölünmüştür, bu da yalnızca iki olası sınıf olacağı anlamına gelir.
Basit bir deyişle, bağımlı değişken, doğası gereği, verileri 1 (başarı / evet anlamına gelir) veya 0 (başarısızlık / hayır anlamına gelir) olarak kodlanmış olan ikilidir.
Matematiksel olarak, lojistik regresyon modeli, P (Y = 1) 'i X'in bir fonksiyonu olarak tahmin eder. İstenmeyen posta tespiti, Diyabet tahmini, kanser tespiti vb. Gibi çeşitli sınıflandırma problemleri için kullanılabilen en basit ML algoritmalarından biridir.
Lojistik Regresyon Türleri
Genel olarak, lojistik regresyon, ikili hedef değişkenlere sahip ikili lojistik regresyon anlamına gelir, ancak bunun tarafından tahmin edilebilecek iki hedef değişken kategorisi daha olabilir. Bu kategori sayısına bağlı olarak, Lojistik regresyon aşağıdaki türlere ayrılabilir -
İkili veya Binom
Bu tür bir sınıflandırmada, bağımlı bir değişkenin 1 ve 0 olmak üzere yalnızca iki olası türü olacaktır. Örneğin, bu değişkenler başarı veya başarısızlığı, evet veya hayır, kazanma veya kaybı vb. Temsil edebilir.
Çok terimli
Bu tür bir sınıflandırmada, bağımlı değişken 3 veya daha fazla olası sırasız türe sahip olabilir veya nicel önemi olmayan türler olabilir. Örneğin, bu değişkenler "Tip A" veya "Tip B" veya "Tip C" yi temsil edebilir.
Sıra
Bu tür bir sınıflandırmada, bağımlı değişken 3 veya daha fazla olası sıralı türe veya kantitatif anlamlılığa sahip türlere sahip olabilir. Örneğin, bu değişkenler “zayıf” veya “iyi”, “çok iyi”, “Mükemmel” i temsil edebilir ve her kategori 0,1,2,3 gibi puanlara sahip olabilir.
Lojistik Regresyon Varsayımları
Lojistik regresyon uygulamasına geçmeden önce, aynı şeyle ilgili aşağıdaki varsayımların farkında olmalıyız:
İkili lojistik regresyon durumunda, hedef değişkenler her zaman ikili olmalıdır ve istenen sonuç faktör seviyesi 1 ile temsil edilir.
Modelde çoklu doğrusallık olmamalıdır, bu da bağımsız değişkenlerin birbirinden bağımsız olması gerektiği anlamına gelir.
Modelimize anlamlı değişkenler eklemeliyiz.
Lojistik regresyon için büyük bir örneklem büyüklüğü seçmeliyiz.
İkili Lojistik Regresyon modeli
Lojistik regresyonun en basit şekli, hedef veya bağımlı değişkenin 1 veya 0 olmak üzere yalnızca 2 olası tipine sahip olabileceği ikili veya iki terimli lojistik regresyondur. Bu, birden çok yordayıcı değişken ile ikili / iki terimli hedef değişken arasındaki bir ilişkiyi modellememize olanak tanır. Lojistik regresyon durumunda, doğrusal fonksiyon temelde aşağıdaki ilişki gibi başka bir fonksiyona girdi olarak kullanılır -
$h_{\theta}{(x)}=g(\theta^{T}x)ℎ 0≤h_{\theta}≤1$İşte aşağıdaki gibi verilebilen lojistik veya sigmoid fonksiyondur -
$g(z)= \frac{1}{1+e^{-z}}ℎ =\theta ^{T}$Sigmoid eğrisine aşağıdaki grafik yardımı ile gösterilebilir. Y ekseninin değerlerinin 0 ile 1 arasında olduğunu ve ekseni 0,5'te geçtiğini görebiliriz.
Sınıflar olumlu veya olumsuz olarak ayrılabilir. Çıktı 0 ile 1 arasındaysa pozitif sınıf olasılığının altına gelir. Uygulamamız için, hipotez fonksiyonunun çıktısını ≥0.5 ise pozitif, aksi takdirde negatif olarak yorumluyoruz.
Ayrıca, algoritmanın işlevler üzerindeki ağırlıkları kullanarak ne kadar iyi performans gösterdiğini ölçmek için bir kayıp işlevi tanımlamamız gerekir;
ℎ = ()
$J(\theta) = \frac{1}{m}.(-y^{T}log(h) - (1 -y)^Tlog(1-h))$Şimdi, kayıp fonksiyonunu tanımladıktan sonra birincil hedefimiz kayıp fonksiyonunu en aza indirmektir. Ağırlıkların uydurulması yani ağırlıkların arttırılması veya azaltılması ile yapılabilir. Her bir ağırlıktaki kayıp fonksiyonunun türevlerinin yardımıyla hangi parametrelerin yüksek ağırlığa ve neyin daha küçük ağırlığa sahip olması gerektiğini bilebilirdik.
Aşağıdaki gradyan iniş denklemi, parametreleri değiştirirsek kaybın nasıl değişeceğini anlatır -
$\frac{()}{\theta_{j}}=\frac{1}{m}X^{T}(()−)$Python'da Uygulama
Şimdi Python'da yukarıdaki binom lojistik regresyon kavramını uygulayacağız. Bu amaçla, her biri 50 örnekten oluşan 3 sınıfa sahip 'iris' adlı çok değişkenli bir çiçek veri kümesi kullanıyoruz, ancak ilk iki özellik sütununu kullanacağız. Her sınıf bir tür iris çiçeğini temsil eder.
Öncelikle, gerekli kitaplıkları aşağıdaki gibi içe aktarmamız gerekiyor -
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
Ardından, iris veri kümesini aşağıdaki gibi yükleyin -
iris = datasets.load_iris()
X = iris.data[:, :2]
y = (iris.target != 0) * 1
Eğitim verilerimizi aşağıdaki şekilde çizebiliriz -
plt.figure(figsize=(6, 6))
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='g', label='0')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='y', label='1')
plt.legend();
Ardından, sigmoid fonksiyonunu, kayıp fonksiyonunu ve gradyan inişini aşağıdaki gibi tanımlayacağız -
class LogisticRegression:
def __init__(self, lr=0.01, num_iter=100000, fit_intercept=True, verbose=False):
self.lr = lr
self.num_iter = num_iter
self.fit_intercept = fit_intercept
self.verbose = verbose
def __add_intercept(self, X):
intercept = np.ones((X.shape[0], 1))
return np.concatenate((intercept, X), axis=1)
def __sigmoid(self, z):
return 1 / (1 + np.exp(-z))
def __loss(self, h, y):
return (-y * np.log(h) - (1 - y) * np.log(1 - h)).mean()
def fit(self, X, y):
if self.fit_intercept:
X = self.__add_intercept(X)
Şimdi ağırlıkları aşağıdaki gibi başlatın -
self.theta = np.zeros(X.shape[1])
for i in range(self.num_iter):
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
gradient = np.dot(X.T, (h - y)) / y.size
self.theta -= self.lr * gradient
z = np.dot(X, self.theta)
h = self.__sigmoid(z)
loss = self.__loss(h, y)
if(self.verbose ==True and i % 10000 == 0):
print(f'loss: {loss} \t')
Aşağıdaki betik yardımıyla çıktı olasılıklarını tahmin edebiliriz -
def predict_prob(self, X):
if self.fit_intercept:
X = self.__add_intercept(X)
return self.__sigmoid(np.dot(X, self.theta))
def predict(self, X):
return self.predict_prob(X).round()
Ardından, modeli değerlendirip aşağıdaki gibi çizebiliriz -
model = LogisticRegression(lr=0.1, num_iter=300000)
preds = model.predict(X)
(preds == y).mean()
plt.figure(figsize=(10, 6))
plt.scatter(X[y == 0][:, 0], X[y == 0][:, 1], color='g', label='0')
plt.scatter(X[y == 1][:, 0], X[y == 1][:, 1], color='y', label='1')
plt.legend()
x1_min, x1_max = X[:,0].min(), X[:,0].max(),
x2_min, x2_max = X[:,1].min(), X[:,1].max(),
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max), np.linspace(x2_min, x2_max))
grid = np.c_[xx1.ravel(), xx2.ravel()]
probs = model.predict_prob(grid).reshape(xx1.shape)
plt.contour(xx1, xx2, probs, [0.5], linewidths=1, colors='red');
Çok Terimli Lojistik Regresyon Modeli
Lojistik regresyonun diğer bir kullanışlı formu, hedef veya bağımlı değişkenin 3 veya daha fazla olası sırasız tipe, yani niceliksel önemi olmayan tiplere sahip olabileceği multinomial lojistik regresyondur.
Python'da Uygulama
Şimdi Python'da yukarıdaki multinomial lojistik regresyon kavramını uygulayacağız. Bu amaçla sklearn isimli digit'den bir veri seti kullanıyoruz.
Öncelikle, gerekli kitaplıkları aşağıdaki gibi içe aktarmamız gerekiyor -
Import sklearn
from sklearn import datasets
from sklearn import linear_model
from sklearn import metrics
from sklearn.model_selection import train_test_split
Sonra, rakam veri setini yüklememiz gerekiyor -
digits = datasets.load_digits()
Şimdi, özellik matrisini (X) ve yanıt vektörünü (y) aşağıdaki gibi tanımlayın -
X = digits.data
y = digits.target
Sonraki kod satırının yardımıyla, X ve y'yi eğitim ve test setlerine ayırabiliriz -
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1)
Şimdi aşağıdaki gibi bir lojistik regresyon nesnesi oluşturun -
digreg = linear_model.LogisticRegression()
Şimdi, aşağıdaki eğitim setlerini kullanarak modeli eğitmemiz gerekiyor -
digreg.fit(X_train, y_train)
Ardından, test setiyle ilgili tahminleri aşağıdaki gibi yapın -
y_pred = digreg.predict(X_test)
Daha sonra modelin doğruluğunu aşağıdaki gibi yazdırın -
print("Accuracy of Logistic Regression model is:",
metrics.accuracy_score(y_test, y_pred)*100)
Çıktı
Accuracy of Logistic Regression model is: 95.6884561891516
Yukarıdaki çıktıdan modelimizin doğruluğunun yüzde 96 civarında olduğunu görebiliyoruz.
SVM'ye Giriş
Destek vektör makineleri (SVM'ler), hem sınıflandırma hem de regresyon için kullanılan güçlü ancak esnek denetlenen makine öğrenme algoritmalarıdır. Ancak genellikle sınıflandırma problemlerinde kullanılırlar. 1960'larda, SVM'ler ilk olarak tanıtıldı, ancak daha sonra 1990'da rafine edildi. SVM'ler, diğer makine öğrenimi algoritmalarına kıyasla benzersiz uygulama yöntemlerine sahiptir. Son zamanlarda, birden çok sürekli ve kategorik değişkeni işleme yetenekleri nedeniyle son derece popülerdirler.
SVM'nin Çalışması
Bir SVM modeli, temelde çok boyutlu uzayda bir hiper düzlemdeki farklı sınıfların bir temsilidir. Hatanın en aza indirilmesi için hiper düzlem, SVM tarafından yinelemeli bir şekilde oluşturulacaktır. SVM'nin amacı, bir maksimum marjinal hiper düzlem (MMH) bulmak için veri setlerini sınıflara bölmektir.
Aşağıdakiler, SVM'de önemli kavramlardır -
Support Vectors- Hiper düzleme en yakın olan veri noktalarına destek vektörleri denir. Bu veri noktaları yardımıyla ayırma çizgisi tanımlanacaktır.
Hyperplane - Yukarıdaki diyagramda da görebileceğimiz gibi, farklı sınıflara sahip bir dizi nesne arasında bölünmüş bir karar düzlemi veya uzaydır.
Margin- Farklı sınıfların gizli veri noktalarında iki satır arasındaki boşluk olarak tanımlanabilir. Hattan destek vektörlerine dikey mesafe olarak hesaplanabilir. Büyük marj iyi bir marj olarak kabul edilir ve küçük marj kötü bir marj olarak kabul edilir.
SVM'nin temel amacı, maksimum marjinal hiper düzlem (MMH) bulmak için veri kümelerini sınıflara bölmektir ve aşağıdaki iki adımda yapılabilir -
İlk olarak, SVM, sınıfları en iyi şekilde ayıran yinelemeli olarak hiper düzlemler oluşturacaktır.
Ardından, sınıfları doğru şekilde ayıran alt düzlemi seçecektir.
Python'da SVM'yi Uygulama
SVM'yi Python'da uygulamak için, aşağıdaki gibi standart kitaplık içe aktarmasıyla başlayacağız -
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
import seaborn as sns; sns.set()
Daha sonra, SVM kullanarak sınıflandırma için sklearn.dataset.sample_generator'dan doğrusal olarak ayrılabilir verilere sahip örnek bir veri kümesi oluşturuyoruz -
from sklearn.datasets.samples_generator import make_blobs
X, y = make_blobs(n_samples=100, centers=2,
random_state=0, cluster_std=0.50)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
Aşağıdakiler, 100 örnek ve 2 küme içeren örnek veri kümesi oluşturulduktan sonra çıktı olacaktır -
SVM'nin ayrımcı sınıflandırmayı desteklediğini biliyoruz. iki boyut olması durumunda bir çizgi veya birden fazla boyut olması durumunda çok katlı bir çizgi bularak sınıfları birbirinden ayırır. Yukarıdaki veri kümesinde aşağıdaki şekilde uygulanır -
xfit = np.linspace(-1, 3.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
plt.plot([0.6], [2.1], 'x', color='black', markeredgewidth=4, markersize=12)
for m, b in [(1, 0.65), (0.5, 1.6), (-0.2, 2.9)]:
plt.plot(xfit, m * xfit + b, '-k')
plt.xlim(-1, 3.5);
Çıktı aşağıdaki gibidir -
Yukarıdaki çıktıdan, yukarıdaki örnekleri mükemmel şekilde ayırt eden üç farklı ayırıcı olduğunu görebiliriz.
Tartışıldığı gibi, SVM'nin ana amacı, bir maksimum marjinal hiper düzlem (MMH) bulmak için veri setlerini sınıflara bölmektir, dolayısıyla sınıflar arasında sıfır çizgisi çizmek yerine, her çizginin etrafına en yakın noktaya kadar bir genişlikte bir kenar boşluğu çizebiliriz. Aşağıdaki gibi yapılabilir -
xfit = np.linspace(-1, 3.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
for m, b, d in [(1, 0.65, 0.33), (0.5, 1.6, 0.55), (-0.2, 2.9, 0.2)]:
yfit = m * xfit + b
plt.plot(xfit, yfit, '-k')
plt.fill_between(xfit, yfit - d, yfit + d, edgecolor='none',
color='#AAAAAA', alpha=0.4)
plt.xlim(-1, 3.5);
Çıktıdaki yukarıdaki görüntüden, ayırt edici sınıflandırıcılar içindeki "marjları" kolayca gözlemleyebiliriz. SVM, marjı maksimize eden çizgiyi seçecektir.
Daha sonra, bu veriler üzerinde bir SVM modeli eğitmek için Scikit-Learn'ün destek vektör sınıflandırıcısını kullanacağız. Burada, SVM'ye uyması için aşağıdaki gibi doğrusal çekirdek kullanıyoruz -
from sklearn.svm import SVC # "Support vector classifier"
model = SVC(kernel='linear', C=1E10)
model.fit(X, y)
Çıktı aşağıdaki gibidir -
SVC(C=10000000000.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
kernel='linear', max_iter=-1, probability=False, random_state=None,
shrinking=True, tol=0.001, verbose=False)
Şimdi, daha iyi bir anlayış için, aşağıdakiler 2D SVC için karar işlevlerini çizecektir -
def decision_function(model, ax=None, plot_support=True):
if ax is None:
ax = plt.gca()
xlim = ax.get_xlim()
ylim = ax.get_ylim()
Modeli değerlendirmek için aşağıdaki gibi grid oluşturmamız gerekiyor -
x = np.linspace(xlim[0], xlim[1], 30)
y = np.linspace(ylim[0], ylim[1], 30)
Y, X = np.meshgrid(y, x)
xy = np.vstack([X.ravel(), Y.ravel()]).T
P = model.decision_function(xy).reshape(X.shape)
Ardından, karar sınırlarını ve marjlarını aşağıdaki gibi çizmemiz gerekiyor -
ax.contour(X, Y, P, colors='k',
levels=[-1, 0, 1], alpha=0.5,
linestyles=['--', '-', '--'])
Şimdi, benzer şekilde destek vektörlerini aşağıdaki gibi çizin -
if plot_support:
ax.scatter(model.support_vectors_[:, 0],
model.support_vectors_[:, 1],
s=300, linewidth=1, facecolors='none');
ax.set_xlim(xlim)
ax.set_ylim(ylim)
Şimdi, modellerimizi aşağıdaki gibi uydurmak için bu işlevi kullanın -
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
decision_function(model);
Yukarıdaki çıktıdan, bir SVM sınıflandırıcısının verilere kenar boşluklarıyla, yani kesikli çizgilerle ve destek vektörleriyle, bu uyumun temel öğeleri, kesikli çizgiye dokunarak sığdığını gözlemleyebiliriz. Bu destek vektör noktaları, sınıflandırıcının support_vectors_ özniteliğinde aşağıdaki gibi saklanır -
model.support_vectors_
Çıktı aşağıdaki gibidir -
array([[0.5323772 , 3.31338909],
[2.11114739, 3.57660449],
[1.46870582, 1.86947425]])
SVM Çekirdekleri
Uygulamada, SVM algoritması, bir girdi veri alanını gerekli forma dönüştüren çekirdek ile uygulanır. SVM, çekirdeğin düşük boyutlu bir girdi alanı alıp onu daha yüksek boyutlu bir alana dönüştürdüğü çekirdek numarası adı verilen bir teknik kullanır. Basit bir deyişle, çekirdek, bölünemeyen sorunları, ona daha fazla boyut ekleyerek ayrılabilir sorunlara dönüştürür. SVM'yi daha güçlü, esnek ve doğru hale getirir. Aşağıda SVM tarafından kullanılan bazı çekirdek türleri verilmiştir -
Doğrusal Çekirdek
Herhangi iki gözlem arasında iç çarpım olarak kullanılabilir. Doğrusal çekirdeğin formülü aşağıdaki gibidir -
k (x, x ben ) = toplam (x * x ben )
Yukarıdaki formülden, iki vektör arasındaki çarpımın her girdi değeri çiftinin çarpımının toplamı olduğunu söylediğini görebiliriz.
Polinom Çekirdeği
Doğrusal çekirdeğin daha genelleştirilmiş şeklidir ve eğri veya doğrusal olmayan girdi uzayını ayırt eder. Polinom çekirdeğin formülü aşağıdadır -
K (x, xi) = 1 + toplam (x * xi) ^ d
Burada d, öğrenme algoritmasında manuel olarak belirtmemiz gereken polinom derecesidir.
Radyal Temel Fonksiyonu (RBF) Kernel
Çoğunlukla SVM sınıflandırmasında kullanılan RBF çekirdeği, belirsiz boyutlu uzayda girdi uzayını eşler. Aşağıdaki formül matematiksel olarak açıklıyor -
K (x, xi) = exp (-gamma * toplamı ((x - xi ^ 2))
Burada gama 0 ile 1 arasındadır. Öğrenme algoritmasında bunu manuel olarak belirtmemiz gerekir. İyi bir varsayılan gama değeri 0.1'dir.
Doğrusal olarak ayrılabilir veriler için SVM uyguladığımız için, doğrusal olarak ayrılamayan veriler için Python'da uygulayabiliriz. Çekirdekler kullanılarak yapılabilir.
Misal
Aşağıda, çekirdekleri kullanarak bir SVM sınıflandırıcısı oluşturmaya yönelik bir örnek verilmiştir. Scikit-learn'ün iris veri kümesini kullanacağız -
Aşağıdaki paketleri içe aktararak başlayacağız -
import pandas as pd
import numpy as np
from sklearn import svm, datasets
import matplotlib.pyplot as plt
Şimdi, giriş verilerini yüklememiz gerekiyor -
iris = datasets.load_iris()
Bu veri kümesinden ilk iki özelliği şu şekilde alıyoruz -
X = iris.data[:, :2]
y = iris.target
Ardından, SVM sınırlarını orijinal verilerle aşağıdaki gibi çizeceğiz -
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min)/100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
np.arange(y_min, y_max, h))
X_plot = np.c_[xx.ravel(), yy.ravel()]
Şimdi, düzenlileştirme parametresinin değerini aşağıdaki gibi sağlamamız gerekiyor -
C = 1.0
Ardından, SVM sınıflandırıcı nesnesi aşağıdaki gibi oluşturulabilir -
Svc_classifier = svm.SVC (çekirdek = 'doğrusal', C = C) .fit (X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap=plt.cm.tab10, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with linear kernel')
Çıktı
Text(0.5, 1.0, 'Support Vector Classifier with linear kernel')
SVM sınıflandırıcı oluşturmak için rbf çekirdek, çekirdeği şu şekilde değiştirebiliriz: rbf aşağıdaki gibi -
Svc_classifier = svm.SVC(kernel='rbf', gamma =‘auto’,C=C).fit(X, y)
Z = svc_classifier.predict(X_plot)
Z = Z.reshape(xx.shape)
plt.figure(figsize=(15, 5))
plt.subplot(121)
plt.contourf(xx, yy, Z, cmap=plt.cm.tab10, alpha=0.3)
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('Support Vector Classifier with rbf kernel')
Çıktı
Text(0.5, 1.0, 'Support Vector Classifier with rbf kernel')
Gama değerini 'otomatik' olarak koyarız ancak değerini 0 ile 1 arasında da sağlayabilirsiniz.
SVM Sınıflandırıcılarının Artıları ve Eksileri
SVM sınıflandırıcılarının artıları
SVM sınıflandırıcılar büyük bir doğruluk sunar ve yüksek boyutsal alanla iyi çalışır. SVM sınıflandırıcılar temelde eğitim noktalarının bir alt kümesini kullanır, bu nedenle sonuçta çok daha az bellek kullanır.
SVM sınıflandırıcılarının eksileri
Eğitim süreleri yüksektir, bu nedenle pratikte büyük veri kümeleri için uygun değildir. Diğer bir dezavantaj, SVM sınıflandırıcılarının çakışan sınıflarla iyi çalışmamasıdır.
Karar Ağacına Giriş
Genel olarak, Karar ağacı analizi birçok alanda uygulanabilen tahmine dayalı bir modelleme aracıdır. Karar ağaçları, veri setini farklı koşullara göre farklı şekillerde bölebilen algoritmik bir yaklaşımla oluşturulabilir. Karar bağları, denetimli algoritmalar kategorisine giren en güçlü algoritmalardır.
Hem sınıflandırma hem de regresyon görevleri için kullanılabilirler. Bir ağacın iki ana varlığı, verinin bölündüğü ve sonuç aldığımız yerde ayrıldığı karar düğümleridir. Yaş, yeme alışkanlıkları ve egzersiz alışkanlıkları gibi çeşitli bilgileri sağlayan bir kişinin formda olup olmadığını tahmin etmek için ikili ağaç örneği aşağıda verilmiştir -
Yukarıdaki karar ağacında, soru karar düğümleridir ve nihai sonuçlar, yapraklardır. Aşağıdaki iki tür karar ağacına sahibiz -
Classification decision trees- Bu tür karar ağaçlarında karar değişkeni kategoriktir. Yukarıdaki karar ağacı, sınıflandırma karar ağacının bir örneğidir.
Regression decision trees - Bu tür karar ağaçlarında karar değişkeni süreklidir.
Karar Ağacı Algoritmasını Uygulama
Gini Endeksi
Veri kümesindeki ikili bölünmeleri değerlendirmek için kullanılan ve kategori hedef değişkeni "Başarı" veya "Başarısız" ile çalışan maliyet fonksiyonunun adıdır.
Gini indeksinin değeri ne kadar yüksekse, homojenlik o kadar yüksek olur. Mükemmel bir Gini indeksi değeri 0 ve en kötüsü 0.5'dir (2 sınıf problem için). Bölünme için Gini endeksi, aşağıdaki adımların yardımıyla hesaplanabilir -
İlk olarak, başarı ve başarısızlık olasılık karelerinin toplamı olan p ^ 2 + q ^ 2 formülünü kullanarak alt düğümler için Gini indeksini hesaplayın.
Ardından, bölünmenin her bir düğümünün ağırlıklı Gini puanını kullanarak bölünme için Gini endeksini hesaplayın.
Sınıflandırma ve Regresyon Ağacı (CART) algoritması, ikili bölünmeler oluşturmak için Gini yöntemini kullanır.
Bölünmüş Oluşturma
Bölme, temel olarak veri kümesine bir öznitelik ve bir değer içerir. Aşağıdaki üç bölümün yardımıyla veri kümesinde bir bölünme oluşturabiliriz -
Part1 - Gini Puanının Hesaplanması: Bu bölümü daha önceki bölümde tartıştık.
Part2- Bir veri kümesini bölme: Bir veri kümesini, bir özniteliğin indeksine ve o özniteliğin bölme değerine sahip iki satır listesine ayırmak olarak tanımlanabilir. Veri setinden sağ ve sol olmak üzere iki grubu aldıktan sonra, birinci bölümde hesaplanan Gini skorunu kullanarak bölünme değerini hesaplayabiliriz. Bölünmüş değer, özelliğin hangi grupta yer alacağına karar verir.
Part3- Tüm bölünmeleri değerlendirme: Gini skorunu bulup veri setini ayırdıktan sonraki bölüm, tüm bölünmelerin değerlendirilmesidir. Bu amaçla, öncelikle her bir öznitelikle ilişkili her değeri bir aday bölünmesi olarak kontrol etmeliyiz. O halde, bölünmenin maliyetini değerlendirerek mümkün olan en iyi bölünmeyi bulmalıyız. En iyi ayrım, karar ağacında bir düğüm olarak kullanılacaktır.
Bir Ağaç Yapmak
Bir ağacın kök düğümü ve uç düğümleri olduğunu bildiğimiz gibi. Kök düğümü oluşturduktan sonra, iki bölümü izleyerek ağacı oluşturabiliriz -
Bölüm 1: Terminal düğümü oluşturma
Karar ağacının terminal düğümlerini oluştururken önemli bir nokta, ağacın büyümesinin ne zaman durdurulacağına veya başka terminal düğümlerinin oluşturulmasına karar vermektir. Maksimum ağaç derinliği ve minimum düğüm kayıtları olmak üzere iki kriter kullanılarak aşağıdaki şekilde yapılabilir -
Maximum Tree Depth- Adından da anlaşılacağı gibi, bu, kök düğümden sonra bir ağaçtaki maksimum düğüm sayısıdır. Bir ağaç maksimum derinliğe ulaştığında, yani bir ağaç maksimum sayıda terminal düğümüne ulaştığında, terminal düğümlerini eklemeyi bırakmalıyız.
Minimum Node Records- Belirli bir düğümün sorumlu olduğu minimum eğitim modeli sayısı olarak tanımlanabilir. Bu minimum düğüm kayıtlarında veya bu minimum değerin altında ağaca ulaşıldığında terminal düğümleri eklemeyi durdurmalıyız.
Son bir tahmin yapmak için terminal düğümü kullanılır.
Part2: Yinelemeli Bölme
Ne zaman terminal düğümleri oluşturacağımızı anladığımız için, şimdi ağacımızı oluşturmaya başlayabiliriz. Yinelemeli bölme, ağacı oluşturmak için bir yöntemdir. Bu yöntemde, bir düğüm oluşturulduktan sonra, aynı işlevi tekrar tekrar çağırarak, veri kümesini bölerek oluşturulan her veri grubu üzerinde özyinelemeli olarak çocuk düğümleri (mevcut bir düğüme eklenen düğümler) oluşturabiliriz.
Tahmin
Bir karar ağacı oluşturduktan sonra bunun hakkında bir tahmin yapmamız gerekiyor. Temel olarak tahmin, özel olarak sağlanan veri satırı ile karar ağacında gezinmeyi içerir.
Yukarıda olduğu gibi özyinelemeli fonksiyon yardımıyla bir tahmin yapabiliriz. Aynı tahmin rutini, sol veya alt sağ düğümlerle tekrar çağrılır.
Varsayımlar
Karar ağacını oluştururken yaptığımız varsayımlardan bazıları şunlardır -
Karar ağaçları hazırlanırken eğitim seti kök düğüm gibidir.
Karar ağacı sınıflandırıcısı, özellik değerlerinin kategorik olmasını tercih eder. Sürekli değerleri kullanmak istemeniz durumunda, model oluşturmadan önce bunların ayrı ayrı yapılması gerekir.
Özniteliğin değerlerine bağlı olarak kayıtlar yinelemeli olarak dağıtılır.
İstatistiksel yaklaşım, herhangi bir düğüm konumuna, yani kök düğüm veya dahili düğüm olarak öznitelikleri yerleştirmek için kullanılacaktır.
Python'da Uygulama
Misal
Aşağıdaki örnekte, Karar Ağacı sınıflandırıcısını Pima Indian Diabetes üzerinde uygulayacağız -
İlk olarak, gerekli python paketlerini içe aktararak başlayın -
import pandas as pd
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
Ardından, iris veri kümesini web bağlantısından aşağıdaki şekilde indirin -
col_names = ['pregnant', 'glucose', 'bp', 'skin', 'insulin', 'bmi', 'pedigree', 'age', 'label']
pima = pd.read_csv(r"C:\pima-indians-diabetes.csv", header=None, names=col_names)
pima.head()
pregnant glucose bp skin insulin bmi pedigree age label
0 6 148 72 35 0 33.6 0.627 50 1
1 1 85 66 29 0 26.6 0.351 31 0
2 8 183 64 0 0 23.3 0.672 32 1
3 1 89 66 23 94 28.1 0.167 21 0
4 0 137 40 35 168 43.1 2.288 33 1
Şimdi, veri kümesini özelliklere ve hedef değişkene aşağıdaki gibi bölün -
feature_cols = ['pregnant', 'insulin', 'bmi', 'age','glucose','bp','pedigree']
X = pima[feature_cols] # Features
y = pima.label # Target variable
Daha sonra, verileri tren ve test bölmesine ayıracağız. Aşağıdaki kod, veri kümesini% 70 eğitim verilerine ve test verilerinin% 30'una böler -
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)
Ardından, modeli DecisionTreeClassifier sklearn sınıfının yardımıyla aşağıdaki gibi eğitin -
clf = DecisionTreeClassifier()
clf = clf.fit(X_train,y_train)
Sonunda tahminde bulunmamız gerekiyor. Aşağıdaki komut dosyası yardımıyla yapılabilir -
y_pred = clf.predict(X_test)
Ardından, doğruluk puanını, karışıklık matrisini ve sınıflandırma raporunu aşağıdaki gibi alabiliriz -
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Çıktı
Confusion Matrix:
[[116 30]
[ 46 39]]
Classification Report:
precision recall f1-score support
0 0.72 0.79 0.75 146
1 0.57 0.46 0.51 85
micro avg 0.67 0.67 0.67 231
macro avg 0.64 0.63 0.63 231
weighted avg 0.66 0.67 0.66 231
Accuracy: 0.670995670995671
Karar Ağacını Görselleştirme
Yukarıdaki karar ağacı aşağıdaki kod yardımıyla görselleştirilebilir -
from sklearn.tree import export_graphviz
from sklearn.externals.six import StringIO
from IPython.display import Image
import pydotplus
dot_data = StringIO()
export_graphviz(clf, out_file=dot_data,
filled=True, rounded=True,
special_characters=True,feature_names = feature_cols,class_names=['0','1'])
graph = pydotplus.graph_from_dot_data(dot_data.getvalue())
graph.write_png('Pima_diabetes_Tree.png')
Image(graph.create_png())
Naif Bayes Algoritmasına Giriş
Naïve Bayes algoritmaları, tüm yordayıcıların birbirinden bağımsız olduğuna dair güçlü bir varsayımla Bayes teoremini uygulamaya dayanan bir sınıflandırma tekniğidir. Basit bir deyişle, varsayım, bir sınıftaki bir özelliğin varlığının, aynı sınıftaki diğer herhangi bir özelliğin varlığından bağımsız olduğudur. Örneğin bir telefon, dokunmatik ekranı, internet özelliği, iyi kamerası vb. Varsa akıllı olarak değerlendirilebilir. Tüm bu özellikler birbirine bağlı olmakla birlikte, telefonun akıllı telefon olma olasılığına bağımsız olarak katkıda bulunur.
Bayesian sınıflandırmasında temel ilgi, son olasılıkları, yani bazı gözlenen özellikler (|) verilen bir etiketin olasılığını bulmaktır. Bayes teoremi yardımıyla bunu nicel formda şu şekilde ifade edebiliriz:
$P(L |features)= \frac{P(L)P(features |L)}{()}$Burada (|), sınıfın sonsal olasılığıdır.
(), sınıfın öncelikli olasılığıdır.
(|) sınıf verilen tahmin edicinin olasılığı olan olasılıktır.
() tahmin edicinin önceki olasılığıdır.
Python'da Naïve Bayes kullanarak model oluşturma
Python kütüphanesi, Scikit Learn, Python'da Naïve Bayes modeli oluşturmamıza yardımcı olan en kullanışlı kütüphanedir. Scikit Python kitaplığı altında aşağıdaki üç Naïve Bayes modeline sahibiz -
Gauss Naif Körfezi
Her bir etiketten gelen verilerin basit bir Gauss dağılımından alındığı varsayımına sahip en basit Naïve Bayes sınıflandırıcısıdır.
Multinomial Naif Bayes
Diğer bir kullanışlı Naif Bayes sınıflandırıcısı, özelliklerin basit bir Multinomial dağılımdan alındığı varsayıldığı Multinomial Naif Bayes'tir. Bu tür Naif Bayes, ayrık sayıları temsil eden özellikler için en uygun olanıdır.
Bernoulli Naïve Bayes
Bir diğer önemli model, özelliklerin ikili (0s ve 1s) olduğu varsayıldığı Bernoulli Naïve Bayes'tir. Kelime torbası modeliyle metin sınıflandırması Bernoulli Naïve Bayes'in bir uygulaması olabilir.
Misal
Veri setimize bağlı olarak, yukarıda açıklanan Naif Bayes modellerinden herhangi birini seçebiliriz. Burada, Python'da Gauss Naïve Bayes modelini uyguluyoruz -
Gerekli ithalatla şu şekilde başlayacağız -
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
Şimdi, Scikit learn'ün make_blobs () işlevini kullanarak, aşağıdaki gibi Gauss dağılımı ile nokta blobları oluşturabiliriz -
from sklearn.datasets import make_blobs
X, y = make_blobs(300, 2, centers=2, random_state=2, cluster_std=1.5)
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer');
Sonra, GaussianNB modelini kullanmak için, nesnesini aşağıdaki gibi içe aktarmalı ve yapmalıyız -
from sklearn.naive_bayes import GaussianNB
model_GBN = GaussianNB()
model_GNB.fit(X, y);
Şimdi tahmin yapmalıyız. Aşağıdaki gibi bazı yeni veriler oluşturulduktan sonra yapılabilir -
rng = np.random.RandomState(0)
Xnew = [-6, -14] + [14, 18] * rng.rand(2000, 2)
ynew = model_GNB.predict(Xnew)
Ardından, sınırlarını bulmak için yeni verileri çiziyoruz -
plt.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap='summer')
lim = plt.axis()
plt.scatter(Xnew[:, 0], Xnew[:, 1], c=ynew, s=20, cmap='summer', alpha=0.1)
plt.axis(lim);
Şimdi, aşağıdaki kod satırlarının yardımıyla, birinci ve ikinci etiketin son olasılıklarını bulabiliriz -
yprob = model_GNB.predict_proba(Xnew)
yprob[-10:].round(3)
Çıktı
array([[0.998, 0.002],
[1. , 0. ],
[0.987, 0.013],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[1. , 0. ],
[0. , 1. ],
[0.986, 0.014]])
Artılar ve eksiler
Artıları
Aşağıdakiler, Naïve Bayes sınıflandırıcılarını kullanmanın bazı avantajlarıdır -
Naïve Bayes sınıflandırmasının uygulanması kolay ve hızlıdır.
Lojistik regresyon gibi ayırt edici modellerden daha hızlı birleşecektir.
Daha az eğitim verisi gerektirir.
Doğası gereği yüksek oranda ölçeklenebilir veya tahmin ediciler ve veri noktalarının sayısıyla doğrusal olarak ölçeklenirler.
Olasılıklı tahminler yapabilir ve kesikli verilerin yanı sıra sürekli verileri de işleyebilir.
Naïve Bayes sınıflandırma algoritması hem ikili hem de çok sınıflı sınıflandırma problemleri için kullanılabilir.
Eksileri
Aşağıdakiler, Naïve Bayes sınıflandırıcılarını kullanmanın bazı dezavantajlarıdır -
Naïve Bayes sınıflandırmasının en önemli dezavantajlarından biri güçlü özellik bağımsızlığıdır çünkü gerçek hayatta birbirinden tamamen bağımsız bir dizi özelliğe sahip olmak neredeyse imkansızdır.
Naïve Bayes sınıflandırması ile ilgili bir diğer sorun da 'sıfır frekansı'dır; bu, eğer bir kategori değişkeni bir kategoriye sahipse ancak eğitim veri setinde gözlenmiyorsa, Naif Bayes modelinin ona sıfır olasılık atayacağı ve bir tahmin.
Naïve Bayes sınıflandırmasının uygulamaları
Aşağıdakiler, Naïve Bayes sınıflandırmasının bazı yaygın uygulamalarıdır -
Real-time prediction - Uygulama kolaylığı ve hızlı hesaplama özelliği sayesinde gerçek zamanlı tahmin yapmak için kullanılabilir.
Multi-class prediction - Naïve Bayes sınıflandırma algoritması, birden çok hedef değişken sınıfının posterior olasılığını tahmin etmek için kullanılabilir.
Text classification- Çok sınıflı tahmin özelliği nedeniyle, Naïve Bayes sınıflandırma algoritmaları metin sınıflandırması için çok uygundur. Bu nedenle spam filtreleme ve duyarlılık analizi gibi sorunları çözmek için de kullanılır.
Recommendation system - İşbirliğine dayalı filtreleme gibi algoritmalarla birlikte, Naïve Bayes, görünmeyen bilgileri filtrelemek ve bir kullanıcının verilen kaynağı isteyip istemediğini tahmin etmek için kullanılabilecek bir Öneri sistemi yapar.
Giriş
Rastgele orman, hem sınıflandırma hem de regresyon için kullanılan denetimli bir öğrenme algoritmasıdır. Ancak, esas olarak sınıflandırma problemleri için kullanılır. Bildiğimiz gibi bir ormanın ağaçlardan oluştuğunu ve daha fazla ağaç daha sağlam orman anlamına geldiğini biliyoruz. Benzer şekilde, rastgele orman algoritması, veri örnekleri üzerinde karar ağaçları oluşturur ve daha sonra her birinden tahmini alır ve son olarak oylama yoluyla en iyi çözümü seçer. Tek bir karar ağacından daha iyi olan bir toplu yöntemdir çünkü sonucun ortalamasını alarak fazla uyumu azaltır.
Rastgele Orman Algoritmasının Çalışması
Random Forest algoritmasının çalışmasını aşağıdaki adımların yardımıyla anlayabiliriz -
Step1 - İlk olarak, belirli bir veri kümesinden rastgele örneklerin seçilmesiyle başlayın.
Step2- Daha sonra, bu algoritma her örnek için bir karar ağacı oluşturacaktır. Daha sonra her karar ağacından tahmin sonucunu alır.
Step3 - Bu adımda, tahmin edilen her sonuç için oylama yapılacaktır.
Step4 - Sonunda, nihai tahmin sonucu olarak en çok oylanan tahmin sonucunu seçin.
Aşağıdaki şema çalışmasını gösterecektir -
Python'da Uygulama
İlk olarak, gerekli Python paketlerini içe aktararak başlayın -
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Ardından, iris veri kümesini web bağlantısından aşağıdaki şekilde indirin -
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Ardından, veri kümesine aşağıdaki gibi sütun adları atamamız gerekiyor -
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Şimdi, pandas veri çerçevesine aşağıdaki gibi veri setini okumamız gerekiyor -
dataset = pd.read_csv(path, names=headernames)
dataset.head()
sepal uzunlukta |
sepal genişlik |
petal uzunlukta |
petal genişliği |
Sınıf |
|
---|---|---|---|---|---|
0 |
5.1 |
3.5 |
1.4 |
0.2 |
Iris-setosa |
1 |
4.9 |
3.0 |
1.4 |
0.2 |
Iris-setosa |
2 |
4.7 |
3.2 |
1.3 |
0.2 |
Iris-setosa |
3 |
4.6 |
3.1 |
1.5 |
0.2 |
Iris-setosa |
4 |
5.0 |
3.6 |
1.4 |
0.2 |
Iris-setosa |
Veri Ön İşleme aşağıdaki kod satırlarının yardımıyla yapılacaktır -
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
Daha sonra, verileri tren ve test bölmesine ayıracağız. Aşağıdaki kod, veri kümesini% 70 eğitim verilerine ve test verilerinin% 30'una böler -
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.30)
Ardından, modeli RandomForestClassifier sklearn sınıfının yardımıyla aşağıdaki gibi eğitin -
from sklearn.ensemble import RandomForestClassifier
classifier = RandomForestClassifier(n_estimators=50)
classifier.fit(X_train, y_train)
Sonunda tahmin yapmamız gerekiyor. Aşağıdaki komut dosyası yardımıyla yapılabilir -
y_pred = classifier.predict(X_test)
Ardından, sonuçları aşağıdaki gibi yazdırın -
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Çıktı
Confusion Matrix:
[[14 0 0]
[ 0 18 1]
[ 0 0 12]]
Classification Report:
precision recall f1-score support
Iris-setosa 1.00 1.00 1.00 14
Iris-versicolor 1.00 0.95 0.97 19
Iris-virginica 0.92 1.00 0.96 12
micro avg 0.98 0.98 0.98 45
macro avg 0.97 0.98 0.98 45
weighted avg 0.98 0.98 0.98 45
Accuracy: 0.9777777777777777
Rastgele Ormanın Artıları ve Eksileri
Artıları
Aşağıdakiler Random Forest algoritmasının avantajlarıdır -
Farklı karar ağaçlarının sonuçlarının ortalamasını alarak veya birleştirerek aşırı uyum sorununun üstesinden gelir.
Rastgele ormanlar, çok çeşitli veri öğeleri için tek bir karar ağacından daha iyi çalışır.
Rastgele orman, tek karar ağacından daha az varyansa sahiptir.
Rastgele ormanlar çok esnektir ve çok yüksek doğruluğa sahiptir.
Rasgele orman algoritmasında verilerin ölçeklendirilmesi gerekli değildir. Ölçeklendirmeden veri sağladıktan sonra bile iyi doğruluğu korur.
Rasgele orman algoritmasında verilerin ölçeklendirilmesi gerekli değildir. Ölçeklendirmeden veri sağladıktan sonra bile iyi doğruluğu korur.
Eksileri
Aşağıdakiler, Random Forest algoritmasının dezavantajlarıdır -
Karmaşıklık, Rastgele orman algoritmalarının ana dezavantajıdır.
Rastgele ormanların inşası, karar ağaçlarından çok daha zor ve zaman alıcıdır.
Random Forest algoritmasını uygulamak için daha fazla hesaplama kaynağı gereklidir.
Karar ağaçları koleksiyonumuzun geniş olması durumunda daha az sezgiseldir.
Rastgele ormanların kullanıldığı tahmin süreci, diğer algoritmalara kıyasla çok zaman alıcıdır.
Regresyona Giriş
Regresyon, diğer önemli ve yaygın olarak kullanılan istatistiksel ve makine öğrenimi aracıdır. Regresyon tabanlı görevlerin temel amacı, verilen girdi verileri için sayısal değerler olarak devam eden çıktı etiketlerini veya yanıtlarını tahmin etmektir. Çıktı, modelin eğitim aşamasında öğrendiklerine dayalı olacaktır. Temel olarak, regresyon modelleri, girdiler ve karşılık gelen çıktılar arasındaki belirli ilişkiyi öğrenmek için girdi veri özelliklerini (bağımsız değişkenler) ve bunlara karşılık gelen sürekli sayısal çıktı değerlerini (bağımlı veya sonuç değişkenleri) kullanır.
Regresyon Modeli Türleri
Regresyon modelleri aşağıdaki iki türdendir:
Simple regression model - Bu, tahminlerin verilerin tek, tek değişkenli bir özelliğinden oluşturulduğu en temel regresyon modelidir.
Multiple regression model - Adından da anlaşılacağı gibi, bu regresyon modelinde tahminler verinin birçok özelliğinden oluşur.
Python'da Regresör Oluşturma
Python'da regresör modeli, sınıflandırıcıyı oluşturduğumuz gibi inşa edilebilir. Makine öğrenimi için bir Python kütüphanesi olan Scikit-learn, Python'da bir regresör oluşturmak için de kullanılabilir.
Aşağıdaki örnekte, verilere bir doğru, yani doğrusal regresör uyduracak temel regresyon modeli oluşturacağız. Python'da bir regresör oluşturmak için gerekli adımlar aşağıdaki gibidir -
Adım 1: Gerekli python paketini içe aktarma
Scikit-learn kullanarak bir regresör oluşturmak için, onu diğer gerekli paketlerle birlikte içe aktarmamız gerekir. Aşağıdaki komut dosyasını kullanarak içe aktarabiliriz -
import numpy as np
from sklearn import linear_model
import sklearn.metrics as sm
import matplotlib.pyplot as plt
Adım 2: Veri kümesini içe aktarma
Gerekli paketi içe aktardıktan sonra, regresyon tahmin modeli oluşturmak için bir veri setine ihtiyacımız var. Sklearn veri setinden içe aktarabilir veya ihtiyacımıza göre diğerini kullanabiliriz. Kaydedilmiş girdi verilerimizi kullanacağız. Aşağıdaki komut dosyası yardımıyla içe aktarabiliriz -
input = r'C:\linear.txt'
Sonra, bu verileri yüklememiz gerekiyor. Yüklemek için np.loadtxt işlevini kullanıyoruz.
input_data = np.loadtxt(input, delimiter=',')
X, y = input_data[:, :-1], input_data[:, -1]
3. Adım: Verileri eğitim ve test setleri halinde düzenleme
Modelimizi görünmeyen veriler üzerinde test etmemiz gerektiğinden, veri setimizi iki bölüme ayıracağız: bir eğitim seti ve bir test seti. Aşağıdaki komut bunu gerçekleştirecek -
training_samples = int(0.6 * len(X))
testing_samples = len(X) - num_training
X_train, y_train = X[:training_samples], y[:training_samples]
X_test, y_test = X[training_samples:], y[training_samples:]
Adım4- Model değerlendirme ve tahmin
Verileri eğitim ve teste böldükten sonra modeli oluşturmamız gerekir. Bu amaçla Scikit-learn'ün LineaRegression () işlevini kullanacağız. Aşağıdaki komut doğrusal bir regresör nesnesi oluşturacaktır.
reg_linear= linear_model.LinearRegression()
Ardından, bu modeli eğitim örnekleri ile aşağıdaki şekilde eğitin -
reg_linear.fit(X_train, y_train)
Şimdi, sonunda test verileriyle tahmin yapmamız gerekiyor.
y_test_pred = reg_linear.predict(X_test)
Adım5- Çizim ve görselleştirme
Tahminden sonra, aşağıdaki komut dosyası yardımıyla onu çizebilir ve görselleştirebiliriz -
plt.scatter(X_test, y_test, color='red')
plt.plot(X_test, y_test_pred, color='black', linewidth=2)
plt.xticks(())
plt.yticks(())
plt.show()
Çıktı
Yukarıdaki çıktıda, veri noktaları arasındaki regresyon çizgisini görebiliriz.
Step6- Performance computation - Aşağıdaki gibi çeşitli performans ölçütleri yardımıyla regresyon modelimizin performansını da hesaplayabiliriz -
print("Regressor model performance:")
print("Mean absolute error(MAE) =", round(sm.mean_absolute_error(y_test, y_test_pred), 2))
print("Mean squared error(MSE) =", round(sm.mean_squared_error(y_test, y_test_pred), 2))
print("Median absolute error =", round(sm.median_absolute_error(y_test, y_test_pred), 2))
print("Explain variance score =", round(sm.explained_variance_score(y_test, y_test_pred), 2))
print("R2 score =", round(sm.r2_score(y_test, y_test_pred), 2))
Çıktı
Regressor model performance:
Mean absolute error(MAE) = 1.78
Mean squared error(MSE) = 3.89
Median absolute error = 2.01
Explain variance score = -0.09
R2 score = -0.09
ML Regresyon Algoritması Türleri
En kullanışlı ve popüler makine öğrenimi regresyon algoritması, ayrıca iki türe ayrılan Doğrusal regresyon algoritmasıdır:
Basit Doğrusal Regresyon algoritması
Çoklu Doğrusal Regresyon algoritması.
Bunu tartışacağız ve sonraki bölümde Python'da uygulayacağız.
Uygulamalar
ML regresyon algoritmalarının uygulamaları aşağıdaki gibidir -
Forecasting or Predictive analysis- Regresyonun önemli kullanımlarından biri tahmin veya tahmine dayalı analizdir. Örneğin, GSYİH'yi, petrol fiyatlarını veya basit bir deyişle zamanla değişen nicel verileri tahmin edebiliriz.
Optimization- Regresyon yardımı ile iş süreçlerini optimize edebiliriz. Örneğin, bir mağaza yöneticisi, müşterilerin gelme zamanını anlamak için istatistiksel bir model oluşturabilir.
Error correction- İş hayatında, doğru karar almak, iş sürecini optimize etmek kadar aynı derecede önemlidir. Gerileme, halihazırda uygulanmış olan kararı düzeltmemizin yanı sıra doğru karar almamıza yardımcı olabilir.
Economics- Ekonomide en çok kullanılan araçtır. Arzı, talebi, tüketimi, envanter yatırımını vb. Tahmin etmek için regresyon kullanabiliriz.
Finance- Bir finans şirketi her zaman risk portföyünü en aza indirmekle ilgilenir ve müşterileri etkileyen faktörleri bilmek ister. Bütün bunlar regresyon modeli yardımıyla tahmin edilebilir.
Doğrusal Regresyona Giriş
Doğrusal regresyon, bir bağımlı değişken ile verilen bağımsız değişkenler arasındaki doğrusal ilişkiyi analiz eden istatistiksel model olarak tanımlanabilir. Değişkenler arasındaki doğrusal ilişki, bir veya daha fazla bağımsız değişkenin değeri değiştiğinde (arttığında veya azaldığında), bağımlı değişkenin değerinin de buna göre değişeceği (artar veya azalır) anlamına gelir.
Matematiksel olarak ilişki, aşağıdaki denklem yardımıyla temsil edilebilir -
Y = mX + b
Burada Y, tahmin etmeye çalıştığımız bağımlı değişkendir
X, tahmin yapmak için kullandığımız bağımlı değişkendir.
m, X'in Y üzerindeki etkisini temsil eden regresyon doğrusunun eğimidir.
b, Y kesme noktası olarak bilinen bir sabittir. X = 0 ise Y, b'ye eşit olacaktır.
Ayrıca, doğrusal ilişki, aşağıda açıklandığı gibi doğası gereği olumlu veya olumsuz olabilir -
Pozitif Doğrusal İlişki
Hem bağımsız hem de bağımlı değişken artarsa, doğrusal bir ilişki pozitif olarak adlandırılacaktır. Aşağıdaki grafiğin yardımıyla anlaşılabilir -
Negatif Doğrusal ilişki
Bağımsız artışlar ve bağımlı değişken azalırsa doğrusal bir ilişki pozitif olarak adlandırılacaktır. Aşağıdaki grafiğin yardımıyla anlaşılabilir -
Doğrusal Regresyon Türleri
Doğrusal regresyon aşağıdaki iki türdendir -
Basit Doğrusal Regresyon
Çoklu doğrusal regresyon
Basit Doğrusal Regresyon (SLR)
Tek bir özelliği kullanarak bir yanıtı öngören doğrusal regresyonun en temel versiyonudur. SLR'deki varsayım, iki değişkenin doğrusal olarak ilişkili olmasıdır.
Python uygulaması
SLR'yi Python'da iki şekilde uygulayabiliriz; biri kendi veri kümenizi sağlamak, diğeri scikit-learn python kitaplığındaki veri kümesini kullanmaktır.
Example1 Aşağıdaki Python uygulama örneğinde, kendi veri setimizi kullanıyoruz.
İlk olarak, aşağıdaki gibi gerekli paketleri içe aktarmaya başlayacağız -
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
Ardından, SLR için önemli değerleri hesaplayacak bir işlev tanımlayın -
def coef_estimation(x, y):
Aşağıdaki kod satırı, gözlemlerin sayısını verecektir n -
n = np.size(x)
X ve y vektörünün ortalaması şu şekilde hesaplanabilir -
m_x, m_y = np.mean(x), np.mean(y)
X ile ilgili çapraz sapma ve sapmayı aşağıdaki gibi bulabiliriz -
SS_xy = np.sum(y*x) - n*m_y*m_x
SS_xx = np.sum(x*x) - n*m_x*m_x
Daha sonra, regresyon katsayıları, yani b aşağıdaki gibi hesaplanabilir -
b_1 = SS_xy / SS_xx
b_0 = m_y - b_1*m_x
return(b_0, b_1)
Daha sonra, regresyon çizgisini çizecek ve yanıt vektörünü tahmin edecek bir fonksiyon tanımlamamız gerekiyor -
def plot_regression_line(x, y, b):
Aşağıdaki komut dosyası satırı, gerçek noktaları dağılım grafiği olarak çizecektir -
plt.scatter(x, y, color = "m", marker = "o", s = 30)
Aşağıdaki komut dosyası satırı yanıt vektörünü tahmin edecektir -
y_pred = b[0] + b[1]*x
Aşağıdaki betik satırları regresyon çizgisini çizecek ve etiketleri üzerlerine koyacaktır -
plt.plot(x, y_pred, color = "g")
plt.xlabel('x')
plt.ylabel('y')
plt.show()
Sonunda, veri kümesi sağlamak ve yukarıda tanımladığımız işlevi çağırmak için main () işlevini tanımlamamız gerekiyor -
def main():
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
y = np.array([100, 300, 350, 500, 750, 800, 850, 900, 1050, 1250])
b = coef_estimation(x, y)
print("Estimated coefficients:\nb_0 = {} \nb_1 = {}".format(b[0], b[1]))
plot_regression_line(x, y, b)
if __name__ == "__main__":
main()
Çıktı
Estimated coefficients:
b_0 = 154.5454545454545
b_1 = 117.87878787878788
Example2 Aşağıdaki Python uygulama örneğinde, scikit-learn'den diyabet veri kümesini kullanıyoruz.
İlk olarak, aşağıdaki gibi gerekli paketleri içe aktarmaya başlayacağız -
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
Daha sonra, diyabet veri setini yükleyeceğiz ve nesnesini oluşturacağız -
diabetes = datasets.load_diabetes()
SLR'yi uygularken, aşağıdaki gibi yalnızca bir özellik kullanacağız -
X = diabetes.data[:, np.newaxis, 2]
Daha sonra, verileri aşağıdaki gibi eğitim ve test setlerine ayırmamız gerekiyor -
X_train = X[:-30]
X_test = X[-30:]
Daha sonra, hedefi eğitim ve test setlerine aşağıdaki gibi bölmemiz gerekiyor -
y_train = diabetes.target[:-30]
y_test = diabetes.target[-30:]
Şimdi, modeli eğitmek için aşağıdaki gibi doğrusal regresyon nesnesi oluşturmamız gerekiyor -
regr = linear_model.LinearRegression()
Ardından, modeli eğitim setlerini kullanarak aşağıdaki gibi eğitin -
regr.fit(X_train, y_train)
Ardından, test setini kullanarak aşağıdaki gibi tahminler yapın -
y_pred = regr.predict(X_test)
Ardından, MSE, Varyans skoru vb. Gibi bazı katsayıları aşağıdaki gibi yazdıracağız -
print('Coefficients: \n', regr.coef_)
print("Mean squared error: %.2f"
% mean_squared_error(y_test, y_pred))
print('Variance score: %.2f' % r2_score(y_test, y_pred))
Şimdi çıktıları aşağıdaki gibi çizin -
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
Çıktı
Coefficients:
[941.43097333]
Mean squared error: 3035.06
Variance score: 0.41
Çoklu Doğrusal Regresyon (MLR)
İki veya daha fazla özelliği kullanarak bir yanıtı tahmin eden basit doğrusal regresyonun uzantısıdır. Matematiksel olarak bunu şu şekilde açıklayabiliriz -
N gözlem, p özellikleri, yani bağımsız değişkenler ve bir yanıt olarak y, yani bağımlı değişken içeren bir veri setini düşünün, p özellikleri için regresyon çizgisi aşağıdaki gibi hesaplanabilir -
$h(x_{i})=b_{0}+b_{1}x_{i1}+b_{2}x_{i2}+...+b_{p}x_{ip}$Burada, h (x i ) tahmin edilen yanıt değeridir ve b 0 , b 1 , b 2 â € reg, b p regresyon katsayılarıdır.
Çoklu Doğrusal Regresyon modelleri her zaman artık hata olarak bilinen verilerdeki hataları içerir ve hesaplamayı aşağıdaki gibi değiştirir -
$h(x_{i})=b_{0}+b_{1}x_{i1}+b_{2}x_{i2}+...+b_{p}x_{ip}+e_{i}$Yukarıdaki denklemi şu şekilde de yazabiliriz -
$y_{i}=h(x_{i})+e_{i}$ $e_{i}= y_{i} - h(x_{i})$Python Uygulaması
bu örnekte, scikit learn'den Boston konut veri kümesini kullanacağız -
İlk olarak, aşağıdaki gibi gerekli paketleri içe aktarmaya başlayacağız -
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model, metrics
Ardından, veri kümesini aşağıdaki gibi yükleyin -
boston = datasets.load_boston(return_X_y=False)
Aşağıdaki kod satırları özellik matrisi, X ve yanıt vektörü Y'yi tanımlayacaktır -
X = boston.data
y = boston.target
Ardından, veri kümesini aşağıdaki gibi eğitim ve test kümelerine bölün -
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.7, random_state=1)
Şimdi, doğrusal regresyon nesnesi oluşturun ve modeli aşağıdaki gibi eğitin -
reg = linear_model.LinearRegression()
reg.fit(X_train, y_train)
print('Coefficients: \n', reg.coef_)
print('Variance score: {}'.format(reg.score(X_test, y_test)))
plt.style.use('fivethirtyeight')
plt.scatter(reg.predict(X_train), reg.predict(X_train) - y_train,
color = "green", s = 10, label = 'Train data')
plt.scatter(reg.predict(X_test), reg.predict(X_test) - y_test,
color = "blue", s = 10, label = 'Test data')
plt.hlines(y = 0, xmin = 0, xmax = 50, linewidth = 2)
plt.legend(loc = 'upper right')
plt.title("Residual errors")
plt.show()
Çıktı
Coefficients:
[-1.16358797e-01 6.44549228e-02 1.65416147e-01 1.45101654e+00
-1.77862563e+01 2.80392779e+00 4.61905315e-02 -1.13518865e+00
3.31725870e-01 -1.01196059e-02 -9.94812678e-01 9.18522056e-03
-7.92395217e-01]
Variance score: 0.709454060230326
Varsayımlar
Aşağıdakiler, Doğrusal Regresyon modeli tarafından yapılan veri kümesiyle ilgili bazı varsayımlardır -
Multi-collinearity- Doğrusal regresyon modeli, verilerde çok az çoklu doğrusallık olduğunu veya hiç olmadığını varsayar. Temel olarak, çoklu doğrusallık, bağımsız değişkenler veya özellikler içlerinde bağımlılığa sahip olduğunda ortaya çıkar.
Auto-correlation- Doğrusal regresyon modelinin varsaydığı başka bir varsayım, verilerde çok az veya hiç oto-korelasyon olduğunu varsayar. Temel olarak, otomatik korelasyon, artık hatalar arasında bağımlılık olduğunda ortaya çıkar.
Relationship between variables - Doğrusal regresyon modeli, yanıt ve özellik değişkenleri arasındaki ilişkinin doğrusal olması gerektiğini varsayar.
Kümelemeye Giriş
Kümeleme yöntemleri, en kullanışlı denetimsiz makine öğrenimi yöntemlerinden biridir. Bu yöntemler, veri örnekleri arasındaki benzerliğin yanı sıra ilişki modellerini bulmak için kullanılır ve daha sonra bu örnekleri özelliklere dayalı olarak benzerliğe sahip gruplar halinde kümelendirir.
Kümeleme önemlidir çünkü mevcut etiketlenmemiş veriler arasındaki içsel gruplamayı belirler. Temelde benzerliklerini oluşturmak için veri noktaları hakkında bazı varsayımlar yaparlar. Her varsayım, farklı ancak eşit derecede geçerli kümeler oluşturacaktır.
Örneğin, farklı kümelerdeki benzer türdeki verileri bir arada gruplandıran kümeleme sistemini gösteren şema aşağıdadır -
Küme Oluşturma Yöntemleri
Kümelerin küresel formda oluşması gerekli değildir. Diğer bazı küme oluşturma yöntemleri aşağıdadır -
Yoğunluğa dayalı
Bu yöntemlerde yoğun bölge olarak kümeler oluşturulur. Bu yöntemlerin avantajı, iki kümeyi birleştirme becerilerinin yanı sıra iyi bir doğruluğa sahip olmalarıdır. Örn. Gürültülü Uygulamaların Yoğunluğa Dayalı Mekansal Kümelenmesi (DBSCAN), Kümeleme yapısını (OPTICS) belirlemek için Sıralama Noktaları vb.
Hiyerarşik tabanlı
Bu yöntemlerde kümeler, hiyerarşiye dayalı olarak ağaç tipi bir yapı olarak oluşturulur. Aglomeratif (Aşağıdan yukarıya yaklaşım) ve Bölücü (Yukarıdan aşağıya yaklaşım) olmak üzere iki kategorileri vardır. Örn. Temsilciler (CURE) kullanarak kümeleme, Hiyerarşileri (BIRCH) kullanarak Kümelemeyi Dengeli Yinelemeli Azaltma vb.
Bölümleme
Bu yöntemlerde, kümeler, nesnelerin k kümelere bölünmesiyle oluşturulur. Küme sayısı, bölüm sayısına eşit olacaktır. Örn. K-, Rastgele Aramaya (CLARANS) dayalı Büyük Uygulamaları Kümeleme anlamına gelir.
Kafes
Bu yöntemlerde kümeler ızgara benzeri bir yapı olarak oluşturulur. Bu yöntemlerin avantajı, bu ızgaralar üzerinde yapılan tüm kümeleme işlemlerinin hızlı ve veri nesnelerinin sayısından bağımsız olmasıdır. Örn. İstatistiksel Bilgi Tablosu (STING), Görevde Kümeleme (CLIQUE).
Kümeleme Performansını Ölçme
Makine öğrenimi modeliyle ilgili en önemli hususlardan biri performansını değerlendirmektir ya da modelin kalitesi diyebilirsiniz. Denetimli öğrenme algoritmaları durumunda, modelimizin kalitesini değerlendirmek kolaydır çünkü her örnek için zaten etiketlerimiz vardır.
Öte yandan, denetimsiz öğrenme algoritmaları durumunda, etiketlenmemiş verilerle uğraştığımız için o kadar da mutlu değiliz. Ancak yine de, uygulayıcıya algoritmaya bağlı olarak kümelerde meydana gelen değişim hakkında fikir veren bazı ölçütlerimiz var.
Bu tür ölçütlere derinlemesine dalmadan önce, bu ölçütlerin modelin tahmininin geçerliliğini ölçmek yerine yalnızca modellerin karşılaştırmalı performansını değerlendirdiğini anlamalıyız. Modelin kalitesini ölçmek için kümeleme algoritmalarına uygulayabileceğimiz metriklerden bazıları aşağıda verilmiştir:
Siluet Analizi
Siluet analizi, kümeler arasındaki mesafeyi ölçerek kümeleme modelinin kalitesini kontrol etmek için kullanılır. Temel olarak bize, küme sayısı gibi parametreleri, aşağıdakilerin yardımıyla değerlendirmenin bir yolunu sağlar:Silhouette score. Bu puan, bir kümedeki her bir noktanın, komşu kümelerdeki noktalara ne kadar yakın olduğunu ölçer.
Silüet Puanının Analizi
Silhouette skorunun aralığı [-1, 1] 'dir. Analizi aşağıdaki gibidir -
+1 Score - +1 civarında Silhouette score örneğin komşu kümeden uzakta olduğunu gösterir.
0 Score - 0 Silhouette score numunenin iki komşu kümeyi ayıran karar sınırında veya çok yakın olduğunu gösterir.
-1 Score & eksi -1 Silhouette score örneklerin yanlış kümelere atandığını gösterir.
Silhouette puanının hesaplanması aşağıdaki formül kullanılarak yapılabilir -
= (-) / (,)
Burada, = en yakın kümedeki noktalara olan ortalama mesafe
Ve, = tüm noktalara küme içi mesafe anlamına gelir.
Davis-Bouldin Endeksi
DB indeksi, kümeleme algoritmalarının analizini gerçekleştirmek için başka bir iyi metriktir. DB indeksi yardımıyla, kümeleme modeli ile ilgili şu noktaları anlayabiliriz -
Kümelerin birbirinden iyi aralıklı olup olmadığı?
Kümeler ne kadar yoğun?
Aşağıdaki formül yardımıyla DB indeksini hesaplayabiliriz -
$DB=\frac{1}{n}\displaystyle\sum\limits_{i=1}^n max_{j\neq{i}}\left(\frac{\sigma_{i}+\sigma_{j}}{d(c_{i},c_{j})}\right)$Burada, = küme sayısı
σ i = küme merkezden kümedeki tüm noktaların ortalama mesafesi.
DB indeksi ne kadar azsa, kümeleme modeli daha iyidir.
Dunn Endeksi
DB indeksi ile aynı şekilde çalışır, ancak her ikisinin de farklı olduğu aşağıdaki noktalar vardır:
Dunn indeksi yalnızca en kötü durumu, yani birbirine yakın olan kümeleri dikkate alırken, DB indeksi kümeleme modelinde tüm kümelerin dağılımını ve ayrılmasını dikkate alır.
Performans arttıkça Dunn indeksi artar, kümeler iyi aralıklı ve yoğun olduğunda DB indeksi iyileşir.
Dunn indeksini aşağıdaki formül yardımıyla hesaplayabiliriz -
$D=\frac{min_{1\leq i <{j}\leq{n}}P(i,j)}{mix_{1\leq i < k \leq n}q(k)}$Burada, ,, = kümeler için her bir endeks
= küme arası mesafe
q = küme içi mesafe
ML Kümeleme Algoritması Türleri
Aşağıdakiler en önemli ve kullanışlı ML kümeleme algoritmalarıdır -
K-anlamına gelir Kümeleme
Bu kümeleme algoritması, ağırlık merkezlerini hesaplar ve en uygun ağırlık merkezini bulana kadar yineler. Küme sayısının zaten bilindiğini varsayar. Aynı zamanda düz kümeleme algoritması olarak da adlandırılır. Verilerden algoritma ile tanımlanan küme sayısı K-ortalamalarında 'K' ile temsil edilmektedir.
Ortalama Kaydırma Algoritması
Denetimsiz öğrenmede kullanılan bir başka güçlü kümeleme algoritmasıdır. K-ortalamalı kümelemeden farklı olarak, herhangi bir varsayımda bulunmaz, dolayısıyla parametrik olmayan bir algoritmadır.
Hiyerarşik kümeleme
Benzer özelliklere sahip etiketlenmemiş veri noktalarını bir arada gruplandırmak için kullanılan bir başka denetimsiz öğrenme algoritmasıdır.
Tüm bu algoritmaları ilerleyen bölümlerde detaylı olarak tartışacağız.
Kümeleme Uygulamaları
Aşağıdaki alanlarda kümelemeyi yararlı bulabiliriz -
Data summarization and compression- Kümeleme, veri özetleme, sıkıştırma ve azaltmaya ihtiyaç duyduğumuz alanlarda yaygın olarak kullanılmaktadır. Örnekler, görüntü işleme ve vektör nicemlemedir.
Collaborative systems and customer segmentation - Kümeleme benzer ürünleri veya aynı tür kullanıcıları bulmak için kullanılabildiğinden, işbirlikçi sistemler ve müşteri segmentasyonu alanında kullanılabilir.
Serve as a key intermediate step for other data mining tasks- Küme analizi; sınıflandırma, test etme, hipotez oluşturma için verilerin kompakt bir özetini oluşturabilir; bu nedenle, diğer veri madenciliği görevleri için de önemli bir ara adım görevi görür.
Trend detection in dynamic data - Kümeleme, benzer eğilimlerden çeşitli kümeler oluşturarak dinamik verilerde eğilim tespiti için de kullanılabilir.
Social network analysis- Kümeleme, sosyal ağ analizinde kullanılabilir. Örnekler resimlerde, videolarda veya seslerde sekanslar oluşturmaktır.
Biological data analysis - Kümeleme aynı zamanda görüntü ve video kümeleri oluşturmak için de kullanılabilir, dolayısıyla biyolojik veri analizinde başarıyla kullanılabilir.
K-Means Algoritmasına Giriş
K-anlamına gelen kümeleme algoritması, ağırlık merkezlerini hesaplar ve biz en uygun ağırlık merkezini bulana kadar yineler. Küme sayısının zaten bilindiğini varsayar. Aynı zamandaflat clusteringalgoritması. Verilerden algoritma ile tanımlanan küme sayısı K-ortalamalarında 'K' ile temsil edilir.
Bu algoritmada, veri noktaları bir kümeye, veri noktaları ile ağırlık merkezi arasındaki karesi alınmış mesafenin toplamı minimum olacak şekilde atanır. Kümelerdeki daha az varyasyonun, aynı küme içinde daha fazla benzer veri noktalarına yol açacağı anlaşılmalıdır.
K-Means Algoritmasının Çalışması
Aşağıdaki adımların yardımıyla K-Means kümeleme algoritmasının çalışmasını anlayabiliriz -
Step1 - Öncelikle bu algoritma tarafından üretilmesi gereken küme sayısını (K) belirlememiz gerekiyor.
Step2- Daha sonra, rastgele K veri noktası seçin ve her veri noktasını bir kümeye atayın. Basit bir deyişle, verileri veri noktalarının sayısına göre sınıflandırın.
Step3 - Şimdi küme merkezlerini hesaplayacak.
Step4 - Ardından, artık değişmeyen kümelere veri noktalarının atanması olan en uygun ağırlık merkezini bulana kadar aşağıdakileri yinelemeye devam edin -
4.1 - İlk olarak, veri noktaları ve ağırlık merkezleri arasındaki mesafenin karesi toplamı hesaplanacaktır.
4.2 - Şimdi, her bir veri noktasını diğer kümeden (centroid) daha yakın olan kümeye atamalıyız.
4.3 - Sonunda, o kümenin tüm veri noktalarının ortalamasını alarak kümeler için ağırlık merkezlerini hesaplayın.
K-şu anlama gelir Expectation-Maximizationsorunu çözmek için yaklaşım. Beklenti adımı, veri noktalarını en yakın kümeye atamak için kullanılır ve Maksimizasyon adımı, her kümenin merkezini hesaplamak için kullanılır.
K-anlamı algoritmasıyla çalışırken aşağıdaki şeylere dikkat etmemiz gerekir -
K-Means dahil kümeleme algoritmalarıyla çalışırken, verilerin standart hale getirilmesi önerilir çünkü bu tür algoritmalar veri noktaları arasındaki benzerliği belirlemek için mesafeye dayalı ölçüm kullanır.
K-Ortalamalarının yinelemeli doğası ve ağırlık merkezlerinin rastgele başlatılması nedeniyle, K-Ortalamaları yerel bir optimumda kalabilir ve küresel optimuma yakınlaşmayabilir. Bu yüzden centroidlerin farklı ilklendirmelerinin kullanılması tavsiye edilir.
Python'da Uygulama
K-Means kümeleme algoritmasının uygulanmasına ilişkin aşağıdaki iki örnek, daha iyi anlamamıza yardımcı olacaktır -
Örnek 1
K-ortalamasının nasıl çalıştığını anlamak için basit bir örnek. Bu örnekte, önce 4 farklı blob içeren 2D veri kümesi oluşturacağız ve ardından sonucu görmek için k-ortalamaları algoritmasını uygulayacağız.
İlk olarak, gerekli paketleri içe aktararak başlayacağız -
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
Aşağıdaki kod, dört blob içeren 2D'yi oluşturacaktır -
from sklearn.datasets.samples_generator import make_blobs
X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
Ardından, aşağıdaki kod, veri kümesini görselleştirmemize yardımcı olacaktır -
plt.scatter(X[:, 0], X[:, 1], s=20);
plt.show()
Ardından, küme sayısının yanı sıra KMeans nesnesi yapın, modeli eğitin ve aşağıdaki gibi tahmini yapın -
kmeans = KMeans(n_clusters=4)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)
Şimdi, aşağıdaki kodun yardımıyla, k-yolu Python tahmincisi tarafından seçilen kümenin merkezlerini çizebilir ve görselleştirebiliriz -
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=20, cmap='summer')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='blue', s=100, alpha=0.9);
plt.show()
Örnek 2
Basit basamak veri setine K-ortalama kümelemesini uygulayacağımız başka bir örneğe geçelim. K-araçları, orijinal etiket bilgilerini kullanmadan benzer basamakları tanımlamaya çalışacaktır.
İlk olarak, gerekli paketleri içe aktararak başlayacağız -
%matplotlib inline
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans
Ardından, sklearn'den rakam veri setini yükleyin ve bunun bir nesnesini yapın. Ayrıca bu veri kümesindeki satır ve sütun sayısını aşağıdaki gibi bulabiliriz -
from sklearn.datasets import load_digits
digits = load_digits()
digits.data.shape
Çıktı
(1797, 64)
Yukarıdaki çıktı, bu veri setinin 64 özelliğe sahip 1797 örneğe sahip olduğunu göstermektedir.
Kümelemeyi yukarıdaki Örnek 1'de yaptığımız gibi yapabiliriz -
kmeans = KMeans(n_clusters=10, random_state=0)
clusters = kmeans.fit_predict(digits.data)
kmeans.cluster_centers_.shape
Çıktı
(10, 64)
Yukarıdaki çıktı, K-ortalamasının 64 özelliğe sahip 10 küme oluşturduğunu göstermektedir.
fig, ax = plt.subplots(2, 5, figsize=(8, 3))
centers = kmeans.cluster_centers_.reshape(10, 8, 8)
for axi, center in zip(ax.flat, centers):
axi.set(xticks=[], yticks=[])
axi.imshow(center, interpolation='nearest', cmap=plt.cm.binary)
Çıktı
Çıktı olarak, k-araçlarıyla öğrenilen küme merkezlerini gösteren aşağıdaki resmi alacağız.
Aşağıdaki kod satırları, öğrenilen küme etiketlerini içlerinde bulunan gerçek etiketlerle eşleştirecektir -
from scipy.stats import mode
labels = np.zeros_like(clusters)
for i in range(10):
mask = (clusters == i)
labels[mask] = mode(digits.target[mask])[0]
Ardından, doğruluğu aşağıdaki gibi kontrol edebiliriz -
from sklearn.metrics import accuracy_score
accuracy_score(digits.target, labels)
Çıktı
0.7935447968836951
Yukarıdaki çıktı, doğruluğun% 80 civarında olduğunu göstermektedir.
Avantajlar ve dezavantajlar
Avantajlar
Aşağıdakiler, K-Means kümeleme algoritmalarının bazı avantajlarıdır -
Anlaması ve uygulaması çok kolaydır.
Çok sayıda değişkenimiz varsa, K-ortalamaları Hiyerarşik kümelemeden daha hızlı olacaktır.
Centroidlerin yeniden hesaplanmasında, bir örnek kümeyi değiştirebilir.
Hiyerarşik kümelemeye kıyasla K-ortalamaları ile daha sıkı kümeler oluşturulur.
Dezavantajları
Aşağıdakiler, K-Means kümeleme algoritmalarının bazı dezavantajlarıdır -
Küme sayısını, yani k değerini tahmin etmek biraz zordur.
Çıktı, küme sayısı (k değeri) gibi ilk girdilerden büyük ölçüde etkilenir.
Verilerin sırasının nihai çıktı üzerinde güçlü bir etkisi olacaktır.
Yeniden ölçeklendirmeye karşı çok hassastır. Verilerimizi normalleştirme veya standardizasyon yoluyla yeniden ölçeklendirirsek, çıktı tamamen değişecektir. Son çıktı.
Kümelerin karmaşık bir geometrik şekli varsa, kümeleme işi yapmak iyi değildir.
K-Means Kümeleme Algoritmasının Uygulamaları
Kümeleme analizinin ana hedefleri:
Üzerinde çalıştığımız verilerden anlamlı bir sezgi elde etmek için.
Farklı alt gruplar için farklı modellerin nerede oluşturulacağını küme sonra tahmin edin.
Yukarıda belirtilen hedefleri gerçekleştirmek için, K-anlamına gelir kümeleme yeterince iyi performans gösteriyor. Aşağıdaki uygulamalarda kullanılabilir -
Pazar bölümleme
Belge Kümeleme
Resim parçalama
Görüntü sıkıştırma
Müşteri segmentasyonu
Dinamik verilerdeki eğilimi analiz etmek
Ortalama Kaydırma Algoritmasına Giriş
Daha önce tartışıldığı gibi, denetimsiz öğrenmede kullanılan başka bir güçlü kümeleme algoritmasıdır. K-ortalamalı kümelemeden farklı olarak, herhangi bir varsayımda bulunmaz; dolayısıyla parametrik olmayan bir algoritmadır.
Ortalama kaydırma algoritması, temel olarak, noktaları en yüksek veri noktası yoğunluğuna, yani küme merkez noktasına kaydırarak, veri noktalarını kümelere yinelemeli olarak atar.
K-Ortalamalar algoritması ile Ortalama-Kayma arasındaki fark, daha sonra kümelerin sayısını önceden belirtmeye gerek kalmamasıdır, çünkü küme sayısı algoritma verileriyle belirlenecektir.
Ortalama Kayma Algoritmasının Çalışması
Mean-Shift kümeleme algoritmasının çalışmasını aşağıdaki adımlar yardımıyla anlayabiliriz -
Step1 - İlk olarak, kendi kümelerine atanan veri noktaları ile başlayın.
Step2 - Sonra, bu algoritma centroidleri hesaplayacak.
Step3 - Bu adımda, yeni centroidlerin konumu güncellenecektir.
Step4 - Şimdi, işlem yinelenecek ve daha yüksek yoğunluklu bölgeye taşınacaktır.
Step5 - Sonunda, centroidler daha fazla hareket edemeyeceği konuma ulaştığında durdurulacak.
Python'da Uygulama
Mean-Shift algoritmasının nasıl çalıştığını anlamak için basit bir örnek. Bu örnekte, önce 4 farklı blob içeren 2D veri seti oluşturacağız ve ardından sonucu görmek için Mean-Shift algoritmasını uygulayacağız.
%matplotlib inline
import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")
from sklearn.datasets.samples_generator import make_blobs
centers = [[3,3,3],[4,5,5],[3,10,10]]
X, _ = make_blobs(n_samples = 700, centers = centers, cluster_std = 0.5)
plt.scatter(X[:,0],X[:,1])
plt.show()
ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_
print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)
colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 3)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker=".",color='k', s=20, linewidths = 5, zorder=10)
plt.show()
Çıktı
[[ 2.98462798 9.9733794 10.02629344]
[ 3.94758484 4.99122771 4.99349433]
[ 3.00788996 3.03851268 2.99183033]]
Estimated clusters: 3
Avantajlar ve dezavantajlar
Avantajlar
Aşağıdakiler, Mean-Shift kümeleme algoritmasının bazı avantajlarıdır -
K-ortalamalarında veya Gauss karışımında olduğu gibi herhangi bir model varsayımı yapmaya gerek yoktur.
Konveks olmayan şekle sahip karmaşık kümeleri de modelleyebilir.
Yalnızca küme sayısını otomatik olarak belirleyen bant genişliği adlı bir parametreye ihtiyaç duyar.
K-ortalamalarında olduğu gibi yerel minimumlar sorunu yoktur.
Aykırı değerlerden herhangi bir sorun çıkmaz.
Dezavantajları
Aşağıdakiler, Ortalama Kaydırma kümeleme algoritmasının bazı dezavantajlarıdır -
Ortalama kayma algoritması, küme sayısının aniden değiştiği yüksek boyut durumunda iyi çalışmaz.
Küme sayısı üzerinde doğrudan bir kontrole sahip değiliz, ancak bazı uygulamalarda belirli sayıda kümeye ihtiyacımız var.
Anlamlı ve anlamsız modlar arasında ayrım yapamaz.
Hiyerarşik Kümelemeye Giriş
Hiyerarşik kümeleme, benzer özelliklere sahip etiketlenmemiş veri noktalarını bir arada gruplamak için kullanılan başka bir denetimsiz öğrenme algoritmasıdır. Hiyerarşik kümeleme algoritmaları iki kategoriye ayrılır:
Agglomerative hierarchical algorithms- Aglomeratif hiyerarşik algoritmalarda, her veri noktası tek bir küme olarak ele alınır ve daha sonra küme çiftlerini art arda birleştirir veya toplar (aşağıdan yukarıya yaklaşım). Kümelerin hiyerarşisi bir dendrogram veya ağaç yapısı olarak temsil edilir.
Divisive hierarchical algorithms - Öte yandan, bölücü hiyerarşik algoritmalarda, tüm veri noktaları tek bir büyük küme olarak ele alınır ve kümeleme işlemi, bir büyük kümeyi çeşitli küçük kümelere bölmeyi içerir (Yukarıdan aşağıya yaklaşım).
Aglomeratif Hiyerarşik Kümeleme Gerçekleştirme Adımları
En çok kullanılan ve en önemli Hiyerarşik kümelemeyi, yani kümeleşmeyi açıklayacağız. Aynısını gerçekleştirme adımları aşağıdaki gibidir -
Step1- Her veri noktasına tek bir küme olarak davranın. Bu nedenle, başlangıçta K kümelerine sahip olacağız. Veri noktalarının sayısı da başlangıçta K olacaktır.
Step2- Şimdi, bu adımda iki yakın veri noktasını birleştirerek büyük bir küme oluşturmamız gerekiyor. Bu, toplam K-1 kümeleri ile sonuçlanacaktır.
Step3- Şimdi, daha fazla küme oluşturmak için iki gizli kümeye katılmamız gerekiyor. Bu, toplam K-2 kümeleri ile sonuçlanacaktır.
Step4 - Şimdi, büyük bir küme oluşturmak için yukarıdaki üç adımı K 0 olana kadar tekrarlayın, yani birleştirilecek daha fazla veri noktası kalmadı.
Step5 - Sonunda, tek bir büyük küme yaptıktan sonra, probleme bağlı olarak birden çok kümeye bölünmek için dendrogramlar kullanılacaktır.
Aglomeratif Hiyerarşik Kümelemede Dendrogramların Rolü
Son adımda tartıştığımız gibi, dendrogramın rolü büyük küme oluştuğunda başlar. Dendrogram, problemimize bağlı olarak kümeleri birden fazla ilgili veri noktası kümesine ayırmak için kullanılacaktır. Aşağıdaki örnek yardımıyla anlaşılabilir -
Örnek 1
Anlamak için, gerekli kitaplıkları aşağıdaki gibi içe aktararak başlayalım -
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
Sonra, bu örnek için aldığımız veri noktalarını çizeceğiz -
X = np.array([[7,8],[12,20],[17,19],[26,15],[32,37],[87,75],[73,85], [62,80],[73,60],[87,96],])
labels = range(1, 11)
plt.figure(figsize=(10, 7))
plt.subplots_adjust(bottom=0.1)
plt.scatter(X[:,0],X[:,1], label='True Position')
for label, x, y in zip(labels, X[:, 0], X[:, 1]):
plt.annotate(label,xy=(x, y), xytext=(-3, 3),textcoords='offset points', ha='right', va='bottom')
plt.show()
Yukarıdaki diyagramdan, veri noktalarında iki kümemiz olduğunu görmek çok kolaydır, ancak gerçek dünya verilerinde binlerce küme olabilir. Sonra, Scipy kitaplığını kullanarak veri noktalarımızın dendrogramlarını çizeceğiz -
from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
linked = linkage(X, 'single')
labelList = range(1, 11)
plt.figure(figsize=(10, 7))
dendrogram(linked, orientation='top',labels=labelList, distance_sort='descending',show_leaf_counts=True)
plt.show()
Şimdi, büyük küme oluşturulduktan sonra, en uzun dikey mesafe seçilir. Ardından aşağıdaki diyagramda gösterildiği gibi dikey bir çizgi çizilir. Yatay çizgi mavi çizgiyi iki noktada geçtiği için küme sayısı iki olacaktır.
Sonra, kümeleme için sınıfı içe aktarmamız ve kümeyi tahmin etmek için fit_predict yöntemini çağırmamız gerekir. Sklearn.cluster kitaplığının AgglomerativeClustering sınıfını içe aktarıyoruz -
from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='ward')
cluster.fit_predict(X)
Ardından, aşağıdaki kodun yardımıyla kümeyi çizin -
plt.scatter(X[:,0],X[:,1], c=cluster.labels_, cmap='rainbow')
Yukarıdaki diyagram, veri noktalarımızdaki iki kümeyi göstermektedir.
Örnek2
Yukarıda tartışılan basit örnekten dendrogram kavramını anladığımız gibi, hiyerarşik kümeleme kullanarak Pima Indian Diabetes Dataset'deki veri noktalarının kümelerini oluşturduğumuz başka bir örneğe geçelim -
import matplotlib.pyplot as plt
import pandas as pd
%matplotlib inline
import numpy as np
from pandas import read_csv
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
data.shape
(768, 9)
data.head()
Sl. Yok hayır. | preg | Plas | Pres | cilt | Ölçek | kitle | pedi | yaş | sınıf |
---|---|---|---|---|---|---|---|---|---|
0 | 6 | 148 | 72 | 35 | 0 | 33.6 | 0.627 | 50 | 1 |
1 | 1 | 85 | 66 | 29 | 0 | 26.6 | 0.351 | 31 | 0 |
2 | 8 | 183 | 64 | 0 | 0 | 23.3 | 0.672 | 32 | 1 |
3 | 1 | 89 | 66 | 23 | 94 | 28.1 | 0.167 | 21 | 0 |
4 | 0 | 137 | 40 | 35 | 168 | 43.1 | 2.288 | 33 | 1 |
patient_data = data.iloc[:, 3:5].values
import scipy.cluster.hierarchy as shc
plt.figure(figsize=(10, 7))
plt.title("Patient Dendograms")
dend = shc.dendrogram(shc.linkage(data, method='ward'))
from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=4, affinity='euclidean', linkage='ward')
cluster.fit_predict(patient_data)
plt.figure(figsize=(10, 7))
plt.scatter(patient_data[:,0], patient_data[:,1], c=cluster.labels_, cmap='rainbow')
Giriş
K-en yakın komşular (KNN) algoritması, hem sınıflandırma hem de regresyon tahmini problemleri için kullanılabilen bir denetimli makine öğrenimi algoritması türüdür. Bununla birlikte, esas olarak endüstride sınıflandırma öngörücü problemleri için kullanılır. Aşağıdaki iki özellik KNN'yi iyi tanımlayacaktır -
Lazy learning algorithm - KNN, özel bir eğitim aşaması olmadığı ve sınıflandırma sırasında eğitim için tüm verileri kullandığı için tembel bir öğrenme algoritmasıdır.
Non-parametric learning algorithm - KNN ayrıca parametrik olmayan bir öğrenme algoritmasıdır çünkü temeldeki veriler hakkında hiçbir şey varsaymaz.
KNN Algoritmasının Çalışması
K-en yakın komşular (KNN) algoritması, yeni veri noktalarının değerlerini tahmin etmek için 'özellik benzerliği'ni kullanır; bu, yeni veri noktasına eğitim setindeki noktalarla ne kadar yakından eşleştiğine bağlı olarak bir değer atanacağı anlamına gelir. Aşağıdaki adımların yardımıyla çalışmasını anlayabiliriz -
Step1- Herhangi bir algoritmayı uygulamak için veri setine ihtiyacımız var. Bu nedenle KNN'nin ilk adımı sırasında eğitimi ve test verilerini yüklemeliyiz.
Step2- Sonra, K'nin değerini, yani en yakın veri noktalarını seçmemiz gerekiyor. K herhangi bir tam sayı olabilir.
Step3 - Test verilerindeki her nokta için aşağıdakileri yapın -
3.1- Euclidean, Manhattan veya Hamming distance gibi yöntemlerden herhangi birinin yardımıyla test verileri ile her eğitim verisi satırı arasındaki mesafeyi hesaplayın. Mesafeyi hesaplamak için en yaygın kullanılan yöntem Öklid'dir.
3.2 - Şimdi, mesafe değerine göre, bunları artan düzende sıralayın.
3.3 - Sonra, sıralanan diziden en üstteki K satırı seçecektir.
3.4 - Şimdi, bu satırların en sık kullanılan sınıfına göre test noktasına bir sınıf atayacaktır.
Step4 - Son
Misal
Aşağıdaki, K kavramını ve KNN algoritmasının çalışmasını anlamak için bir örnektir -
Aşağıdaki gibi çizilebilen bir veri kümemiz olduğunu varsayalım -
Şimdi, siyah noktalı yeni veri noktasını (60.60 noktasında) mavi veya kırmızı olarak sınıflandırmamız gerekiyor. K = 3 varsayıyoruz, yani en yakın üç veri noktası bulacaktır. Bir sonraki diyagramda gösterilmektedir -
Yukarıdaki diyagramda siyah noktalı veri noktasının en yakın üç komşusunu görebiliriz. Bu üçü arasında ikisi Red sınıfındadır, dolayısıyla siyah nokta da kırmızı sınıfta yer alacaktır.
Python'da Uygulama
Bildiğimiz gibi K-en yakın komşular (KNN) algoritması hem sınıflandırma hem de regresyon için kullanılabilir. Aşağıdakiler, Python'da KNN'yi hem sınıflandırıcı hem de regresör olarak kullanmak için tariflerdir -
Sınıflandırıcı olarak KNN
İlk olarak, gerekli python paketlerini içe aktararak başlayın -
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
Ardından, iris veri kümesini web bağlantısından aşağıdaki şekilde indirin -
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Ardından, veri kümesine aşağıdaki gibi sütun adları atamamız gerekiyor -
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Şimdi, pandas veri çerçevesine aşağıdaki gibi veri setini okumamız gerekiyor -
dataset = pd.read_csv(path, names=headernames)
dataset.head()
Sl. Yok hayır. | sepal uzunlukta | sepal genişlik | petal uzunlukta | petal genişliği | Sınıf |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa |
3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa |
4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa |
Veri Ön İşleme aşağıdaki kod satırlarının yardımıyla yapılacaktır -
X = dataset.iloc[:, :-1].values
y = dataset.iloc[:, 4].values
Daha sonra, verileri tren ve test bölmesine ayıracağız. Aşağıdaki kod, veri kümesini% 60 eğitim verilerine ve test verilerinin% 40'ına böler -
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.40)
Ardından, veri ölçeklendirme aşağıdaki gibi yapılacaktır -
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Ardından, modeli KNeighborsClassifier sklearn sınıfının yardımıyla aşağıdaki gibi eğitin -
from sklearn.neighbors import KNeighborsClassifier
classifier = KNeighborsClassifier(n_neighbors=8)
classifier.fit(X_train, y_train)
Sonunda tahminde bulunmamız gerekiyor. Aşağıdaki komut dosyası yardımıyla yapılabilir -
y_pred = classifier.predict(X_test)
Ardından, sonuçları aşağıdaki gibi yazdırın -
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score
result = confusion_matrix(y_test, y_pred)
print("Confusion Matrix:")
print(result)
result1 = classification_report(y_test, y_pred)
print("Classification Report:",)
print (result1)
result2 = accuracy_score(y_test,y_pred)
print("Accuracy:",result2)
Çıktı
Confusion Matrix:
[[21 0 0]
[ 0 16 0]
[ 0 7 16]]
Classification Report:
precision recall f1-score support
Iris-setosa 1.00 1.00 1.00 21
Iris-versicolor 0.70 1.00 0.82 16
Iris-virginica 1.00 0.70 0.82 23
micro avg 0.88 0.88 0.88 60
macro avg 0.90 0.90 0.88 60
weighted avg 0.92 0.88 0.88 60
Accuracy: 0.8833333333333333
Regresör olarak KNN
İlk olarak, gerekli Python paketlerini içe aktararak başlayın -
import numpy as np
import pandas as pd
Ardından, iris veri kümesini web bağlantısından aşağıdaki şekilde indirin -
path = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
Ardından, veri kümesine aşağıdaki gibi sütun adları atamamız gerekiyor -
headernames = ['sepal-length', 'sepal-width', 'petal-length', 'petal-width', 'Class']
Şimdi, pandas veri çerçevesine aşağıdaki gibi veri setini okumamız gerekiyor -
data = pd.read_csv(url, names=headernames)
array = data.values
X = array[:,:2]
Y = array[:,2]
data.shape
output:(150, 5)
Ardından, modele uyması için sklearn'dan KNeighborsRegressor'ı içe aktarın -
from sklearn.neighbors import KNeighborsRegressor
knnr = KNeighborsRegressor(n_neighbors=10)
knnr.fit(X, y)
Sonunda, MSE'yi şu şekilde bulabiliriz -
print ("The MSE is:",format(np.power(y-knnr.predict(X),2).mean()))
Çıktı
The MSE is: 0.12226666666666669
KNN'nin Artıları ve Eksileri
Artıları
Anlaması ve yorumlaması çok basit bir algoritmadır.
Doğrusal olmayan veriler için çok kullanışlıdır çünkü bu algoritmada veriler hakkında herhangi bir varsayım yoktur.
Sınıflandırma ve regresyon için kullanabildiğimiz için çok yönlü bir algoritmadır.
Nispeten yüksek doğruluğa sahiptir, ancak KNN'den çok daha iyi denetlenen öğrenme modelleri vardır.
Eksileri
Hesaplama açısından biraz pahalı bir algoritmadır çünkü tüm eğitim verilerini depolar.
Diğer denetimli öğrenme algoritmalarına kıyasla yüksek bellek depolaması gerekir.
Büyük N durumunda tahmin yavaştır.
Verilerin ölçeğine ve ilgisiz özelliklere çok duyarlıdır.
KNN uygulamaları
Aşağıdakiler, KNN'nin başarıyla uygulanabileceği alanlardan bazılarıdır -
Banka sistemi
KNN, bir bireyin kredi onayına uygun olup olmadığını tahmin etmek için bankacılık sisteminde kullanılabilir mi? Bu kişi temerrüde düşenlerinkine benzer özelliklere sahip mi?
Kredi Notlarının Hesaplanması
KNN algoritmaları, benzer özelliklere sahip kişilerle karşılaştırılarak bir bireyin kredi notunu bulmak için kullanılabilir.
Siyaset
KNN algoritmalarının yardımıyla, potansiyel bir seçmeni "Oy Verecek", "Oy Vermeyecek", "Partiye Oy Verecek" Kongresi "," Partiye Oy Verecek "BJP" gibi çeşitli sınıflara ayırabiliriz.
KNN algoritmasının kullanılabileceği diğer alanlar Konuşma Tanıma, El Yazısı Algılama, Görüntü Tanıma ve Video Tanıma'dır.
ML algoritmalarının, sınıflandırmanın ve regresyon algoritmalarının performansını değerlendirmek için kullanabileceğimiz çeşitli ölçütler vardır. Makine öğrenimi performansını değerlendirmek için metrikleri dikkatlice seçmeliyiz çünkü -
Makine öğrenimi algoritmalarının performansının nasıl ölçüldüğü ve karşılaştırıldığı tamamen seçtiğiniz metriğe bağlı olacaktır.
Sonuçtaki çeşitli özelliklerin önemini nasıl ağırlıklandırdığınız, tamamen seçtiğiniz metrikten etkilenecektir.
Sınıflandırma Sorunları için Performans Ölçütleri
Sınıflandırma ve algoritmalarını önceki bölümlerde tartıştık. Burada, sınıflandırma problemlerine yönelik tahminleri değerlendirmek için kullanılabilecek çeşitli performans ölçütlerini tartışacağız.
Karışıklık Matrisi
Çıktının iki veya daha fazla sınıf türünden olabileceği bir sınıflandırma probleminin performansını ölçmenin en kolay yoludur. Karışıklık matrisi, iki boyutlu bir tablodan başka bir şey değildir. "Gerçek" ve "Öngörülen" ve ayrıca, her iki boyutun da aşağıda gösterildiği gibi "Gerçek Pozitifler (TP)", "Gerçek Negatifler (TN)", "Yanlış Pozitifler (FP)", "Yanlış Negatifler (FN)" vardır -
Karışıklık matrisi ile ilgili terimlerin açıklaması aşağıdaki gibidir -
True Positives (TP) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 1 olduğu durumdur.
True Negatives (TN) - Hem gerçek sınıf hem de tahmin edilen veri noktası sınıfının 0 olduğu durumdur.
False Positives (FP) - Gerçek veri noktası sınıfının 0 ve tahmin edilen veri noktası sınıfının 1 olduğu durumdur.
False Negatives (FN) - Gerçek veri noktası sınıfının 1 ve tahmin edilen veri noktası sınıfının 0 olduğu durumdur.
Sınıflandırma modelimizin Karışıklık Matrisini hesaplamak için sklearn.metrics'in confusion_matrix işlevini kullanabiliriz.
Sınıflandırma Doğruluğu
Sınıflandırma algoritmaları için en yaygın performans ölçüsüdür. Yapılan tüm tahminlerin oranı olarak yapılan doğru tahminlerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$Accuracy =\frac{TP+TN}{+++}$Sınıflandırma modelimizin doğruluğunu hesaplamak için sklearn.metrics'in doğruluk_soru fonksiyonunu kullanabiliriz.
Sınıflandırma Raporu
Bu rapor, Kesinlik, Geri Çağırma, F1 ve Destek puanlarından oluşur. Aşağıdaki şekilde açıklanmıştır -
Hassas
Belge erişimlerinde kullanılan kesinlik, ML modelimiz tarafından iade edilen doğru belge sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$Precision=\frac{TP}{TP+FP}$Hatırlama veya Hassasiyet
Geri çağırma, ML modelimiz tarafından döndürülen pozitiflerin sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$Recall =\frac{TP}{TP+FN}$Özgüllük
Özgünlük, geri çağırmanın aksine, ML modelimiz tarafından döndürülen negatif sayısı olarak tanımlanabilir. Aşağıdaki formül yardımıyla karışıklık matrisi ile kolayca hesaplayabiliriz -
$Specificity =\frac{TN}{TN+FP}$Destek
Destek, her bir hedef değer sınıfında yer alan gerçek yanıtın örnek sayısı olarak tanımlanabilir.
F1 Puanı
Bu puan bize hassasiyet ve geri çağırmanın harmonik ortalamasını verecektir. Matematiksel olarak F1 skoru, hassasiyet ve geri çağırmanın ağırlıklı ortalamasıdır. F1'in en iyi değeri 1 ve en kötüsü 0 olacaktır. Aşağıdaki formül yardımıyla F1 puanını hesaplayabiliriz -
= ∗ (∗) / (+)
F1 skoru, hassasiyet ve geri çağırmanın eşit nispi katkısına sahiptir.
Sınıflandırma modelimizin sınıflandırma raporunu almak için sklearn.metrics'in sınıflandırma raporlama işlevini kullanabiliriz.
AUC (ROC eğrisi Altındaki Alan)
AUC (Eğri Altındaki Alan) -ROC (Alıcı Çalışma Karakteristiği), sınıflandırma problemleri için değişen eşik değerlerine dayanan bir performans ölçüsüdür. Adından da anlaşılacağı gibi, ROC bir olasılık eğrisidir ve AUC ayrılabilirliği ölçer. Basit bir deyişle, AUC-ROC metriği bize modelin sınıfları ayırt etme kabiliyetini anlatacaktır. AUC ne kadar yüksekse, model daha iyi.
Matematiksel olarak, TPR (Gerçek Pozitif Oran), yani Hassasiyet veya geri çağırma - FPR (Yanlış Pozitif Oran) yani 1-Özgüllük, çeşitli eşik değerlerinde çizilerek oluşturulabilir. Aşağıda, y ekseninde TPR'ye ve x ekseninde FPR'ye sahip olan ROC, AUC'yi gösteren grafik bulunmaktadır -
AUC-ROC'yi hesaplamak için sklearn.metrics'in roc_auc_score fonksiyonunu kullanabiliriz.
LOGLOSS (Logaritmik Kayıp)
Lojistik regresyon kaybı veya çapraz entropi kaybı olarak da adlandırılır. Temelde olasılık tahminleri üzerinde tanımlanır ve girdinin 0 ile 1 arasında bir olasılık değeri olduğu bir sınıflandırma modelinin performansını ölçer. Doğrulukla farklılaştırılarak daha net anlaşılabilir. Doğruluğun, modelimizdeki tahminlerin sayısı (tahmin edilen değer = gerçek değer) olduğunu bildiğimiz gibi, Log Loss ise gerçek etiketten ne kadar değiştiğine bağlı olarak tahminimizin belirsizlik miktarıdır. Log Loss değeri yardımıyla modelimizin performansını daha doğru bir şekilde görebiliriz. Log Loss'u hesaplamak için sklearn.metrics'in log_loss fonksiyonunu kullanabiliriz.
Misal
Aşağıda, ikili sınıflandırma modelinde yukarıda açıklanan performans ölçütlerini nasıl kullanabileceğimize dair bir fikir verecek olan Python'da basit bir tarif verilmiştir -
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import classification_report
from sklearn.metrics import roc_auc_score
from sklearn.metrics import log_loss
X_actual = [1, 1, 0, 1, 0, 0, 1, 0, 0, 0]
Y_predic = [1, 0, 1, 1, 1, 0, 1, 1, 0, 0]
results = confusion_matrix(X_actual, Y_predic)
print ('Confusion Matrix :')
print(results)
print ('Accuracy Score is',accuracy_score(X_actual, Y_predic))
print ('Classification Report : ')
print (classification_report(X_actual, Y_predic))
print('AUC-ROC:',roc_auc_score(X_actual, Y_predic))
print('LOGLOSS Value is',log_loss(X_actual, Y_predic))
Çıktı
Confusion Matrix :
[[3 3]
[1 3]]
Accuracy Score is 0.6
Classification Report :
precision recall f1-score support
0 0.75 0.50 0.60 6
1 0.50 0.75 0.60 4
micro avg 0.60 0.60 0.60 10
macro avg 0.62 0.62 0.60 10
weighted avg 0.65 0.60 0.60 10
AUC-ROC: 0.625
LOGLOSS Value is 13.815750437193334
Regresyon Sorunları için Performans Ölçütleri
Önceki bölümlerde regresyon ve algoritmalarını tartıştık. Burada, regresyon problemlerine yönelik tahminleri değerlendirmek için kullanılabilecek çeşitli performans ölçütlerini tartışacağız.
Ortalama Mutlak Hata (MAE)
Regresyon problemlerinde kullanılan en basit hata ölçüsüdür. Temel olarak tahmin edilen ve gerçek değerler arasındaki mutlak farkın ortalamasının toplamıdır. Basit bir deyişle, MAE ile tahminlerin ne kadar yanlış olduğuna dair bir fikir edinebiliriz. MAE, modelin yönünü göstermez, yani modelin düşük performansı veya aşırı performansı hakkında hiçbir gösterge yoktur. Aşağıdaki MAE'yi hesaplamak için formüldür -
$MAE = \frac{1}{n}\sum|Y -\hat{Y}|$Burada, = Gerçek Çıkış Değerleri
Ve $\hat{Y}$= Öngörülen Çıktı Değerleri.
MAE'yi hesaplamak için sklearn.metrics'in mean_absolute_error fonksiyonunu kullanabiliriz.
Ortalama Kare Hatası (MSE)
MSE, MAE gibidir, ancak tek fark, mutlak değeri kullanmak yerine hepsini toplamadan önce gerçek ve tahmin edilen çıktı değerlerinin farkının karesini almasıdır. Fark, aşağıdaki denklemde fark edilebilir -
$MSE = \frac{1}{n}\sum(Y -\hat{Y})$Burada, = Gerçek Çıkış Değerleri
Ve $\hat{Y}$ = Öngörülen Çıktı Değerleri.
MSE'yi hesaplamak için sklearn.metrics'in mean_squared_error fonksiyonunu kullanabiliriz.
R Kare (R 2 )
R Kare metrik genellikle açıklama amacıyla kullanılır ve bir dizi tahmini çıktı değerinin gerçek çıktı değerlerine uygunluğunun veya iyiliğinin bir göstergesini sağlar. Aşağıdaki formül onu anlamamıza yardımcı olacaktır -
$R^{2} = 1 -\frac{\frac{1}{n}\sum_{i{=1}}^n(Y_{i}-\hat{Y_{i}})^2}{\frac{1}{n}\sum_{i{=1}}^n(Y_{i}-\bar{Y_i)^2}}$Yukarıdaki denklemde pay MSE'dir ve payda değerlerdeki varyanstır.
R kare değerini hesaplamak için sklearn.metrics'in r2_score fonksiyonunu kullanabiliriz.
Misal
Aşağıdakiler, regresyon modelinde yukarıda açıklanan performans ölçümlerini nasıl kullanabileceğimiz konusunda bize fikir verecek Python'da basit bir tariftir -
from sklearn.metrics import r2_score
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
X_actual = [5, -1, 2, 10]
Y_predic = [3.5, -0.9, 2, 9.9]
print ('R Squared =',r2_score(X_actual, Y_predic))
print ('MAE =',mean_absolute_error(X_actual, Y_predic))
print ('MSE =',mean_squared_error(X_actual, Y_predic))
Çıktı
R Squared = 0.9656060606060606
MAE = 0.42499999999999993
MSE = 0.5674999999999999
Giriş
Sonuçları başarıyla yürütmek ve üretmek için, bir makine öğrenimi modelinin bazı standart iş akışlarını otomatikleştirmesi gerekir. Bu standart iş akışlarını otomatikleştirme süreci, Scikit-learn Pipelines yardımıyla yapılabilir. Bir veri bilimcinin bakış açısından, boru hattı genelleştirilmiş ancak çok önemli bir kavramdır. Temel olarak, ham formatından bazı yararlı bilgilere veri akışına izin verir. Boru hatlarının çalışması aşağıdaki şema yardımıyla anlaşılabilir -
ML boru hatlarının blokları aşağıdaki gibidir -
Data ingestion- Adından da anlaşılacağı gibi, ML projesinde kullanılmak üzere verilerin içe aktarılması işlemidir. Veriler, gerçek zamanlı olarak veya tekli veya çoklu sistemlerden gruplar halinde çıkarılabilir. Veri kalitesi tüm makine öğrenimi modelini etkileyebileceğinden, bu en zorlu adımlardan biridir.
Data Preparation- Verileri içe aktardıktan sonra ML modelimiz için kullanılacak verileri hazırlamamız gerekiyor. Veri ön işleme, veri hazırlamanın en önemli tekniklerinden biridir.
ML Model Training- Sonraki adım makine öğrenimi modelimizi eğitmektir. Verilerden özellikleri çıkarmak ve tahminlerde bulunmak için denetimli, denetimsiz, güçlendirme gibi çeşitli ML algoritmalarımız var.
Model Evaluation- Ardından, ML modelini değerlendirmemiz gerekiyor. AutoML ardışık düzeni olması durumunda, ML modeli çeşitli istatistiksel yöntemler ve iş kuralları yardımıyla değerlendirilebilir.
ML Model retraining- AutoML ardışık düzeni durumunda, ilk modelin en iyisi olması gerekli değildir. İlk model bir temel model olarak kabul edilir ve modelin doğruluğunu artırmak için onu tekrar tekrar eğitebiliriz.
Deployment- Sonunda modeli yerleştirmemiz gerekiyor. Bu adım, modelin kullanımları için iş operasyonlarına uygulanmasını ve taşınmasını içerir.
ML Boru Hatlarına Eşlik Eden Zorluklar
ML ardışık düzenleri oluşturmak için, veri bilimcileri birçok zorlukla karşı karşıyadır. Bu zorluklar aşağıdaki üç kategoriye ayrılır:
Veri Kalitesi
Herhangi bir makine öğrenimi modelinin başarısı, büyük ölçüde verilerin kalitesine bağlıdır. Makine öğrenimi modeline sağladığımız veriler doğru, güvenilir ve sağlam değilse, o zaman yanlış veya yanıltıcı çıktılarla sonuçlanacağız.
Veri Güvenilirliği
Makine öğrenimi ardışık düzenleriyle ilişkili bir diğer zorluk, makine öğrenimi modeline sağladığımız verilerin güvenilirliğidir. Bildiğimiz gibi, veri bilimcilerinin veri alabileceği çeşitli kaynaklar olabilir, ancak en iyi sonuçları elde etmek için veri kaynaklarının güvenilir ve güvenilir olduğundan emin olunmalıdır.
Veri Erişilebilirliği
Makine öğrenimi ardışık düzenlerinden en iyi sonuçları elde etmek için verilerin kendisinin erişilebilir olması gerekir; bu da verilerin birleştirilmesini, temizlenmesini ve iyileştirilmesini gerektirir. Veri erişilebilirliği özelliğinin bir sonucu olarak, meta veriler yeni etiketlerle güncellenecektir.
ML Pipeline Modelleme ve Veri Hazırlama
Eğitim veri setinden test veri setine kadar gerçekleşen veri sızıntısı, veri bilimcilerinin ML modeli için veri hazırlarken uğraşması gereken önemli bir konudur. Genel olarak, veri hazırlama sırasında, veri bilimcisi öğrenmeden önce tüm veri kümesinde standartlaştırma veya normalleştirme gibi teknikleri kullanır. Ancak bu teknikler, veri sızıntısından bize yardımcı olamaz çünkü eğitim veri kümesi, test veri kümesindeki verilerin ölçeğinden etkilenirdi.
ML ardışık düzenlerini kullanarak, bu veri sızıntısını önleyebiliriz çünkü ardışık düzenler, standardizasyon gibi veri hazırlığının çapraz doğrulama prosedürünün her katıyla sınırlandırılmasını sağlar.
Misal
Aşağıda veri hazırlığı ve model değerlendirme iş akışını gösteren bir Python örneği verilmiştir. Bu amaçla, Sklearn'dan Pima Indian Diabetes veri setini kullanıyoruz. İlk olarak, verileri standartlaştıran bir boru hattı oluşturacağız. Daha sonra bir Doğrusal Ayrımcı analiz modeli oluşturulacak ve sonunda boru hattı 10 kat çapraz doğrulama kullanılarak değerlendirilecektir.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
Ardından, aşağıdaki kodun yardımıyla bir boru hattı oluşturacağız -
estimators = []
estimators.append(('standardize', StandardScaler()))
estimators.append(('lda', LinearDiscriminantAnalysis()))
model = Pipeline(estimators)
Sonunda, bu boru hattını değerlendireceğiz ve doğruluğunu aşağıdaki gibi vereceğiz -
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7790148448043184
Yukarıdaki çıktı, veri kümesindeki kurulumun doğruluğunun özetidir.
ML Ardışık Düzeni ve Özellik Çıkarımını Modelleme
Makine öğrenimi modelinin özellik çıkarma aşamasında da veri sızıntısı meydana gelebilir. Bu nedenle, eğitim veri setimizdeki veri sızıntısını durdurmak için özellik çıkarma prosedürleri de sınırlandırılmalıdır. Veri hazırlamada olduğu gibi ML boru hatları kullanarak bu veri sızıntısını da önleyebiliriz. Bu amaçla ML ardışık düzenleri tarafından sağlanan bir araç olan FeatureUnion kullanılabilir.
Misal
Aşağıda, özellik çıkarma ve model değerlendirme iş akışını gösteren bir Python örneği verilmiştir. Bu amaçla, Sklearn'dan Pima Indian Diabetes veri setini kullanıyoruz.
İlk olarak, 3 özellik PCA (Temel Bileşen Analizi) ile çıkarılacaktır. Ardından, İstatistiksel Analiz ile 6 özellik çıkarılacaktır. Özellik çıkarıldıktan sonra, birden fazla özellik seçimi ve çıkarma prosedürlerinin sonucu kullanılarak birleştirilecektir
FeatureUnion aracı. Sonunda, bir Lojistik Regresyon modeli oluşturulacak ve boru hattı 10 kat çapraz doğrulama kullanılarak değerlendirilecektir.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import Pipeline
from sklearn.pipeline import FeatureUnion
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.feature_selection import SelectKBest
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
Ardından, özellik birliği aşağıdaki gibi oluşturulacaktır -
features = []
features.append(('pca', PCA(n_components=3)))
features.append(('select_best', SelectKBest(k=6)))
feature_union = FeatureUnion(features)
Ardından, ardışık düzen, aşağıdaki betik satırlarının yardımıyla oluşturulacak -
estimators = []
estimators.append(('feature_union', feature_union))
estimators.append(('logistic', LogisticRegression()))
model = Pipeline(estimators)
Sonunda, bu boru hattını değerlendireceğiz ve doğruluğunu aşağıdaki gibi vereceğiz -
kfold = KFold(n_splits=20, random_state=7)
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7789811066126855
Yukarıdaki çıktı, veri kümesindeki kurulumun doğruluğunun özetidir.
Topluluklarla Performans İyileştirme
Topluluklar, birkaç modeli birleştirerek bize makine öğrenimi sonucunu artırabilir. Temel olarak, topluluk modelleri, bireysel olarak eğitilmiş birkaç denetimli öğrenme modelinden oluşur ve sonuçları, tek bir modele kıyasla daha iyi tahmin performansı elde etmek için çeşitli şekillerde birleştirilir. Topluluk yöntemleri aşağıdaki iki gruba ayrılabilir -
Sıralı topluluk yöntemleri
Adından da anlaşılacağı gibi, bu tür toplu yöntemlerde, temel öğrenenler sırayla oluşturulur. Bu tür yöntemlerin motivasyonu, temel öğrenenler arasındaki bağımlılıktan yararlanmaktır.
Paralel topluluk yöntemleri
Adından da anlaşılacağı gibi, bu tür toplu yöntemlerde temel öğrenenler paralel olarak üretilir. Bu tür yöntemlerin motivasyonu, temel öğrenenler arasındaki bağımsızlıktan yararlanmaktır.
Topluluk Öğrenme Yöntemleri
Aşağıdakiler en popüler toplu öğrenme yöntemidir, yani farklı modellerden tahminleri birleştirmek için yöntemler -
Torbalama
Torbalama terimi, önyükleme toplama olarak da bilinir. Torbalama yöntemlerinde, topluluk modeli, rastgele oluşturulmuş eğitim örnekleri üzerinden eğitilen bireysel modellerin tahminlerini birleştirerek tahmin doğruluğunu iyileştirmeye ve model varyansını azaltmaya çalışır. Topluluk modelinin nihai tahmini, tek tek tahmin edicilerden gelen tüm tahminlerin ortalaması hesaplanarak verilecektir. Torbalama yöntemlerinin en iyi örneklerinden biri rastgele ormanlardır.
Artırma
Arttırma yönteminde, topluluk modeli oluşturmanın ana ilkesi, her bir temel model tahmin edicisini sırayla eğiterek onu aşamalı olarak oluşturmaktır. Adından da anlaşılacağı gibi, güçlü bir topluluk oluşturmak için temelde birkaç haftalık temel öğreniciyi, birden fazla eğitim verisi yinelemesi üzerinden sırayla eğitilmiş olarak birleştirir. Haftalık temel öğrencilerin eğitimi sırasında, daha önce yanlış sınıflandırılan öğrencilere daha yüksek ağırlıklar verilir. Artırma yöntemine örnek AdaBoost'tur.
Oylama
Bu toplu öğrenme modelinde, farklı türlerde birden fazla model oluşturulur ve tahminleri birleştirmek için ortalama veya medyan hesaplama gibi bazı basit istatistikler kullanılır. Bu tahmin, nihai tahminin yapılması için eğitim için ek girdi görevi görecektir.
Torbalama Topluluğu Algoritmaları
Aşağıdakiler üç torbalama topluluğu algoritmasıdır -
Torbalı Karar Ağacı
Torbalama topluluğu yöntemlerinin yüksek varyansa sahip algoritmalarla iyi çalıştığını bildiğimiz için ve bu bağlamda en iyisi karar ağacı algoritmasıdır. Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde DecisionTreeClasifier (bir sınıflandırma ve regresyon ağaçları algoritması) ile sklearn'ın BaggingClassifier işlevini kullanarak torbalı karar ağacı topluluk modeli oluşturacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import BaggingClassifier
from sklearn.tree import DecisionTreeClassifier
Şimdi, önceki örneklerde yaptığımız gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
cart = DecisionTreeClassifier()
İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 150 ağaç inşa ediyoruz -
num_trees = 150
Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -
model = BaggingClassifier(base_estimator=cart, n_estimators=num_trees, random_state=seed)
Sonucu şu şekilde hesaplayın ve yazdırın -
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7733766233766234
Yukarıdaki çıktı, torbalı karar ağacı sınıflandırıcı modelimizin yaklaşık% 77 oranında doğruluğunu elde ettiğimizi göstermektedir.
Rastgele Orman
Torbalı karar ağaçlarının bir uzantısıdır. Bireysel sınıflandırıcılar için, eğitim veri setinin örnekleri değiştirilerek alınır, ancak ağaçlar aralarındaki korelasyonu azaltacak şekilde inşa edilir. Ayrıca, her ağacın yapımında en iyi bölünme noktasını açgözlülükle seçmek yerine, rastgele bir özellik alt kümesinin her bir bölünme noktasını seçtiği kabul edilir.
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde RandomForestClassifier sklearn sınıfını kullanarak torbalı rasgele orman topluluk modeli oluşturacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -
num_trees = 150
max_features = 5
Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -
model = RandomForestClassifier(n_estimators=num_trees, max_features=max_features)
Sonucu şu şekilde hesaplayın ve yazdırın -
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7629357484620642
Yukarıdaki çıktı, torbalı rastgele orman sınıflandırıcı modelimizin yaklaşık% 76 oranında doğruluğunu elde ettiğimizi göstermektedir.
Ekstra Ağaçlar
Torbalı karar ağacı topluluk yönteminin bir başka uzantısıdır. Bu yöntemde, rastgele ağaçlar eğitim veri setinin örneklerinden oluşturulur.
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde ExtraTreesClassifier sklearn sınıfını kullanarak ekstra ağaç topluluk modeli oluşturacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import ExtraTreesClassifier
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
seed = 7
kfold = KFold(n_splits=10, random_state=seed)
İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -
num_trees = 150
max_features = 5
Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -
model = ExtraTreesClassifier(n_estimators=num_trees, max_features=max_features)
Sonucu şu şekilde hesaplayın ve yazdırın -
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7551435406698566
Yukarıdaki çıktı, torbalanmış ekstra ağaç sınıflandırıcı modelimizin yaklaşık% 75,5 doğruluğunu elde ettiğimizi göstermektedir.
Topluluk Algoritmalarını Güçlendirme
Aşağıdakiler en yaygın iki artırıcı topluluk algoritmasıdır -
AdaBoost
En başarılı artırıcı topluluk algoritmasıdır. Bu algoritmanın ana anahtarı, veri kümesindeki örneklere ağırlık vermeleridir. Bundan dolayı, algoritmanın sonraki modelleri oluştururken örneklere daha az dikkat etmesi gerekir.
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde AdaBoostClassifier sklearn sınıfını kullanarak sınıflandırma için Ada Boost topluluk modelini oluşturacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import AdaBoostClassifier
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -
num_trees = 50
Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -
model = AdaBoostClassifier(n_estimators=num_trees, random_state=seed)
Sonucu şu şekilde hesaplayın ve yazdırın -
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7539473684210527
Yukarıdaki çıktı, AdaBoost sınıflandırıcı topluluk modelimizin yaklaşık% 75 doğruluğuna sahip olduğumuzu göstermektedir.
Stokastik Gradyan Arttırma
Gradient Boosting Machines olarak da adlandırılır. Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde GradientBoostingClassifier sklearn sınıfını kullanarak sınıflandırma için Stokastik Gradient Boostingensemble modelini oluşturacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import GradientBoostingClassifier
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
seed = 5
kfold = KFold(n_splits=10, random_state=seed)
İnşa edeceğimiz ağaçların sayısını sağlamamız gerekiyor. Burada 5 özellikten seçilen bölünmüş noktalara sahip 150 ağaç inşa ediyoruz -
num_trees = 50
Ardından, modeli aşağıdaki komut dosyası yardımıyla oluşturun -
model = GradientBoostingClassifier(n_estimators=num_trees, random_state=seed)
Sonucu şu şekilde hesaplayın ve yazdırın -
results = cross_val_score(model, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7746582365003418
Yukarıdaki çıktı, Gradient Boosting sınıflandırıcı topluluk modelimizin yaklaşık% 77,5 doğruluğunu elde ettiğimizi gösteriyor.
Topluluk Algoritmalarını Oylama
Tartışıldığı gibi, oylama önce eğitim veri setinden iki veya daha fazla bağımsız model oluşturur ve ardından bir oylama sınıflandırıcı, yeni verilere ihtiyaç duyulduğunda alt model tahminlerinin ortalamasını alarak modeli sarar.
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde VotingClassifier sklearn sınıfını kullanarak sınıflandırma için Oylama topluluk modelini oluşturacağız. Lojistik regresyon, Karar Ağacı sınıflandırıcı ve SVM tahminlerini bir sınıflandırma problemi için aşağıdaki gibi bir araya getiriyoruz -
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, 10 kat çapraz doğrulama için girişi aşağıdaki gibi verin -
kfold = KFold(n_splits=10, random_state=7)
Ardından, aşağıdaki gibi alt modeller oluşturmamız gerekiyor -
estimators = []
model1 = LogisticRegression()
estimators.append(('logistic', model1))
model2 = DecisionTreeClassifier()
estimators.append(('cart', model2))
model3 = SVC()
estimators.append(('svm', model3))
Şimdi, yukarıda oluşturulan alt modellerin tahminlerini birleştirerek oylama topluluğu modelini oluşturun.
ensemble = VotingClassifier(estimators)
results = cross_val_score(ensemble, X, Y, cv=kfold)
print(results.mean())
Çıktı
0.7382262474367738
Yukarıdaki çıktı, oylama sınıflandırıcı topluluk modelimizin yaklaşık% 74 doğruluğuna sahip olduğumuzu gösteriyor.
Algoritma Ayarlama ile Performans İyileştirme
Makine öğrenimi modellerinin, davranışları belirli bir soruna göre ayarlanabilecek şekilde parametrelendirildiğini biliyoruz. Algoritma ayarı, ML modelinin performansının iyileştirilebilmesi için bu parametrelerin en iyi kombinasyonunu bulmak anlamına gelir. Bu süreç bazen hiperparametre optimizasyonu olarak adlandırılır ve algoritmanın kendisinin parametrelerine hiperparametreler ve ML algoritması tarafından bulunan katsayılara parametre adı verilir.
Burada, Python Scikit-learn tarafından sağlanan algoritma parametresi ayarlaması için bazı yöntemler hakkında tartışacağız.
Grid Arama Parametre Ayarı
Bu bir parametre ayarlama yaklaşımıdır. Bu yöntemin çalışmanın kilit noktası, modeli, bir ızgarada belirtilen her olası algoritma parametresi kombinasyonu için metodik olarak oluşturması ve değerlendirmesidir. Dolayısıyla bu algoritmanın arama özelliğine sahip olduğunu söyleyebiliriz.
Misal
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde Ridge Regresyon algoritması için çeşitli alfa değerlerini değerlendirmek için GridSearchCV sklearn sınıfını kullanarak ızgara araması yapacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
import numpy
from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, çeşitli alfa değerlerini aşağıdaki gibi değerlendirin -
alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0])
param_grid = dict(alpha=alphas)
Şimdi, modelimize grid arama uygulamamız gerekiyor -
model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid.fit(X, Y)
Sonucu aşağıdaki komut dosyası satırıyla yazdırın -
print(grid.best_score_)
print(grid.best_estimator_.alpha)
Çıktı
0.2796175593129722
1.0
Yukarıdaki çıktı bize en uygun puanı ve bu puanı elde eden ızgaradaki parametreler kümesini verir. Bu durumda alfa değeri 1.0'dır.
Rastgele Arama Parametre Ayarı
Bu bir parametre ayarlama yaklaşımıdır. Bu yöntemin çalışmanın kilit noktası, algoritma parametrelerini sabit sayıda yineleme için rastgele bir dağılımdan örneklemesidir.
Misal
Aşağıdaki Python tarifinde, Pima Indians diyabet veri setinde Ridge Regresyon algoritması için 0 ile 1 arasındaki farklı alfa değerlerini değerlendirmek için RandomizedSearchCV sklearn sınıfını kullanarak rastgele arama yapacağız.
İlk olarak, gerekli paketleri aşağıdaki şekilde içe aktarın -
import numpy
from pandas import read_csv
from scipy.stats import uniform
from sklearn.linear_model import Ridge
from sklearn.model_selection import RandomizedSearchCV
Şimdi, önceki örneklerde olduğu gibi Pima diyabet veri setini yüklememiz gerekiyor -
path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]
Ardından, Ridge regresyon algoritmasındaki çeşitli alfa değerlerini aşağıdaki gibi değerlendirin -
param_grid = {'alpha': uniform()}
model = Ridge()
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=50,
random_state=7)
random_search.fit(X, Y)
Sonucu aşağıdaki komut dosyası satırıyla yazdırın -
print(random_search.best_score_)
print(random_search.best_estimator_.alpha)
Çıktı
0.27961712703051084
0.9779895119966027
0.9779895119966027
Yukarıdaki çıktı bize tıpkı ızgara aramasına benzer şekilde en uygun puanı verir.