blog posts

Python ile makine öğreniminde veri bölümlemeyi öğretme

Veri bölme genellikle makine öğreniminde verileri üç eğitim setine (Eğitim Seti), test setine (Test Seti) ve doğrulama setine (Doğrulama Seti) ayırmak için kullanılır . Bu yazıda Python ile makine öğreniminde veri bölümleme eğitimi ele alınmıştır.

Makine öğreniminde veri bölümleme nedir?

Eğitim verilerine ve test verilerine (Train-Test Split) veri ayırma (veri bölme), bir makine öğrenimi algoritmasının performans kalitesini ölçmeye yönelik bir yöntemdir . Veri ayırma, sınıflandırma veya regresyon problemleri için kullanılabilir ve genel olarak bu yaklaşım, her türlü denetimli öğrenme algoritmasında kullanılır.Veri ayırma işlemi, bir veri kümesini iki veya üç alt kümeye bölmeyi içerir. Bu bölümde yapay zeka ve makine öğrenimindeki bazı önemli kavramlardan bahsedilmiştir. Bu nedenle aşağıda bu kavramlarla ilgili bazı maddeler tanıtılmıştır.

  • Önerilen makaleler:
    • Python ile verileri kategorilere ayırma — Pratik bir kılavuz
    • Basit doğrusal regresyon – basit dilde kavram ve hesaplamalar (+ ücretsiz eğitim videosunu indirin)
    • Python ile Denetimli Öğrenme — Kapsamlı bir kılavuz

Makine öğreniminde veriler neden önemlidir?

Makine öğrenimi biliminde veriler çok önemlidir ve bir tür iş yakıtı olarak kabul edilir.şu öğreniminde verilerin önemi iki nedenden dolayıdır:

  1. Modelin öğrenmesi için verilere ihtiyacı var, bu nedenle “Modelin işi verilerdeki bilimi çıkarmak ve kullanmaktır” diyebiliriz.
  2. Modeli test etmek için verilere ihtiyacımız var, çünkü model verilerdeki bilgileri iyi çıkaramamış olabilir.
Python ile makine öğreniminde veri ayırma eğitimi

Python ile makine öğreniminde veri bölümleme eğitimi

Makine öğrenimi sürecinin ilk kısmı için eğitim verileri (Train) kullanılır ve doğrulama verileri (Validation) izleme (İzleme) ve bazen modelin öğrenimini kesintiye uğratmak için kullanılabilir. Test verileri de bu sürecin ikinci kısmı için kullanılır. Bu 3 veri kategorisi arasında Doğrulama verilerini kullanamazsınız; Ancak bunların varlığı, bazı hiperparametrelerin daha iyi ayarlanmasına yardımcı olur.

Python ile makine öğreniminde veri bölümleme için gerekli kitaplıkları çağırma

Şimdi Python ortamına girin ve önce gerekli kütüphaneleri çağırın:

import numpy as np
import sklearn.model_selection as ms

Dizilerle çalışmak için Numpy kütüphanesine ve verileri bölmek için Sklearn kütüphanesindeki veya Scikit-Learn kütüphanesindeki Model Seçimi bölümüne ihtiyaç vardır.

Python ile makine öğreniminde bir veri segmentasyonu projesini uygulamak için veri yükleme

Artık veriyi bölmek için veriye ihtiyaç var; Bu proje için IRIS veri seti kullanılmıştır. Sklearn kitaplığı, IRIS verilerini aşağıdaki gibi yüklemek için de kullanılır:

import sklearn.datasets as dt

IRIS=dt.load_iris()

X = IRIS.data
Y = IRIS.target

Bu sayede gerekli veriler programlama ortamına girmiş olur.

İris verilerini iki kümeye ayırma Python’da Eğitim ve Test

Yalnızca Eğit ve Test verilerine ihtiyaç duyulursa, aşağıdaki gibi yapılabilir:

trX, teX, trY, teY = ms.train_test_split(X, Y, train_size=0.7)

Yukarıdaki kod satırının çalıştırılması sonucunda verinin %70’i eğitime, %30’u teste ayrılacaktır; Bu işlem rastgele gerçekleşecek, ancak her verinin X’i, karşılık gelen Y ile aynı kalacaktır.

Verileri iki kümeye ayırma Python’da yeniden üretilebilir bir şekilde Eğitin ve Test Edin

Bu kodun her çalıştırıldığında verileri farklı şekillerde böldüğüne ve programın aynı şekilde tekrar üretilemeyeceğine ve gerekirse Ransom State’in aşağıdaki gibi ayarlanabileceğine dikkat edilmelidir:

trX, teX, trY, teY = ms.train_test_split(X, Y, train_size=0.7, random_state=2)

Bu şekilde, veriler her çalıştırıldığında aynı şekilde bölünecektir. Train_test_split fonksiyonunun çıkış sırasının önce Xs sonra Ys için olduğu ve bir sonraki adımda Train verilerine öncelik verileceği unutulmamalıdır.

Python ile makine öğreniminde veri bölümleme için veri boyutlarının incelenmesi

Artık verilerin boyutlarını kontrol edebilirsiniz:

print(f'{X.shape = } -- {Y.shape = }')
print(f'{trX.shape = } -- {trY.shape = }')
print(f'{teX.shape = } -- {teY.shape = }')

Çıktı aşağıdaki gibidir:

X.şekli = (150, 4) -- Y.şekli = (150,)
trX.shape = (105, 4) -- trY.shape = (105,)
teX.shape = (45, 4) -- teY.shape = (45,)

Dolayısıyla hem verilerin oranı hem de verilerin birinci boyutunun boyutu gözlenmiştir. Ancak veriler üzerinde doğrulama yapma niyeti varsa, biraz farklı yapılmalıdır.

Python ile makine öğreniminde doğrulama için veri ayırma nasıl yapılır?

İlk olarak Train verilerini (eğitim verileri) ayırabilir ve ardından bir sonraki adımda doğrulama verilerini test verilerinden ayırabilirsiniz:

trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=0.7, random_state=2)

vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=0.5, random_state=2)

Bu bölümde, verilerin %70’i başlangıçta eğitim için ayrılır ve geri kalanı X 2 ve Y 2 değişkenlerinde saklanır .

Test ve doğrulama verilerini eşit olarak bölmek için veri oranı

Artık X2 ve Y2 , test verileri ve doğrulama verileri arasında 1:1 oranında bölünebilir Nihai oranlar aşağıdaki gibi olacaktır:

Ben=0.7=70%
benBenBenÖ=0.3=30%
benBenBenÖ=0,5X0.3=0,15=15%
=0,5X0.3=0,15=15%

İkinci fonksiyonda, train_size değerinin, bu koddaki doğrulanmış sete eşit olan fonksiyonun ilk çıkış setinin boyutunu gösterdiğine dikkat edilmelidir. Şimdi verilerin boyutlarını tekrar kontrol edebiliriz:

print(f'{X.shape = } -- {Y.shape = }')
print(f'{trX.shape = } -- {trY.shape = }')
print(f'{vaX.shape = } -- {vaY.shape = }')
print(f'{teX.shape = } -- {teY.shape = }')

Çıktı aşağıdaki gibi olacaktır:

X.şekli = (150, 4) -- Y.şekli = (150,)
trX.shape = (105, 4) -- trY.shape = (105,)
vaX.shape = (22, 4) -- vaY.shape = (22,)
teX.shape = (23, 4) -- teY.shape = (23,)

Python’da veri bölümleme işlevi tasarlama

Artık aynı işlemi gerçekleştiren ve kodlama görevlerini kolaylaştıran bir fonksiyon tasarlamak mümkün. Bunu yapmak için, ilk olarak girişte Tren ve Doğrulama setlerinin verileri ve boyutu alınır:

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float):

Veri türünün Numpy n-boyutlu diziler olması gerektiğine ve her kümenin boyutunun 0’dan 1’e kadar bir ondalık sayı olacağına dikkat edilmelidir. Şimdi Train verilerini ayırmamız gerekiyor:

    trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=trS)

Ardından Doğrulama ve Test verilerinin ayrılması gerekir. Bunun için öncelikle Test datasının boyutunu bulmalısınız:

    teS = 1 - trS - vaS

Şimdi ikinci bölümün verilerini bölebiliriz:

    vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=vaS/(vaS+teS))

Bu şekilde, her üç veri seti de ayrılır.

7. Python’da veri bölme işlevinin çıktı biçimini belirleme

Artık fonksiyonun çıktısı tanımlanabilir; Ancak çıktıda 6 dizi alındığından ve kullanım sırasında hatalara neden olabileceğinden Python’da sözlük veri türü kullanılır:

    Output = {'X':{'tr':trX,
                   'va':vaX,
                   'te':teX},
              'Y':{'tr':trY,
                   'va':vaY,
                   'te':teY}}

Bu şekilde her diziye tuşları kullanılarak erişilebilir.

8. Python ile makine öğreniminde veri bölümleme işlevinin son hali

Şimdi ortaya çıkan sözlük çıktıda döndürülür ve işlev aşağıdaki son biçimi alır:

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float):
    trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=trS)
    teS = 1 - trS - vaS
    vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=vaS/(vaS+teS))
    Output = {'X':{'tr':trX,
                   'va':vaX,
                   'te':teX},
              'Y':{'tr':trY,
                   'va':vaY,
                   'te':teY}}
    return Output

Şimdi bu işlev şu şekilde çağrılabilir ve kullanılabilir:

SD = Split(X, Y, 0.7, 0.15)

Diziler şu şekilde de mevcut olacaktır:

trX = SD['X']['tr']
teY = SD['Y']['te']

Bu sayede hata olasılığı da azalmış olacaktır.

Python’da veri bölme işlevinin ayarlanabilirliğini geliştirmek için özellikler eklendi

İşlev şu ana kadar tamamlandı, ancak davranışını daha özelleştirilebilir hale getirmek için bazı özellikler eklenmelidir. Birincisi, girişte bir Rastgele Durum ayarlamak ve bunu verileri bölmek için kullanmaktır. İkinci şey, Train ve Validation boyutunu kontrol etmektir. Bu iki öğeyi düzelttikten sonra, fonksiyonumuz aşağıdaki formu alır:

def Split (X:np.ndarray, Y:np.ndarray, trS:float, vaS:float, RS:int=None):
    assert trS + vaS < 1, 'Train Size + Validation Size Must be Smaller Than 1'
    trX, X2, trY, Y2 = ms.train_test_split(X, Y, train_size=trS, random_state=RS)
    teS = 1 - trS - vaS
    vaX, teX, vaY, teY = ms.train_test_split(X2, Y2, train_size=vaS/(vaS+teS), random_state=RS)
    Output = {'X':{'tr':trX,
                   'va':vaX,
                   'te':teX},
              'Y':{'tr':trY,
                   'va':vaY,
                   'te':teY}}
    return Output

RS’nin varsayılan değerinin Yok olarak ayarlandığına dikkat edilmelidir, çünkü belirli koşullar altında Rastgele Durumu düzeltme niyeti olmayabilir. iddia, veri boyutu hakkında bir hata mesajı oluşturmak için de kullanılır ve örneğin, işlev aşağıdaki gibi yanlış çağrılırsa bir hata oluşur:

SD = Split(X, Y, 0.8, 0.4)

Karşılık gelen hata aşağıdaki gibi olacaktır:

İstisna oluştu: AssertionError
Tren Boyutu + Doğrulama Boyutu 1'den Küçük Olmalıdır

Bu sayede Python ile makine öğrenimindeki veri bölme işlevi tamamlanmış olur ve projelerinizde kullanabilirsiniz. Şimdi bu makalenin son bölümünde Python ile makine öğreniminde veri bölme eğitimi ile ilgili eğitim kursları tanıtılmıştır.

Çözüm

Bu yazıda Python ile makine öğreniminde verilerin nasıl bölüneceği öğretildi. Python’da, makine öğrenimi projelerinizde kullanabileceğiniz yerleşik bir veri bölme işlevi vardır. Oluşturulan fonksiyonu ihtiyaçlarınıza göre değiştirebilir ve ihtiyaçlarınıza uygun hale getirebilirsiniz. Daha fazla kodlama pratiği için aynı işlev Python’da Numpy kitaplığı ve List veri türü kullanılarak uygulanabilir .