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.