Makine Öğrenimi - Eğitim/Test
Modelinizi Değerlendirin
Makine Öğreniminde, ağırlığı ve motor boyutunu bildiğimizde bir arabanın CO2 emisyonunu tahmin ettiğimiz önceki bölümde olduğu gibi, belirli olayların sonucunu tahmin etmek için modeller oluşturuyoruz.
Modelin yeterince iyi olup olmadığını ölçmek için Train/Test adlı bir yöntem kullanabiliriz.
Tren/Test Nedir?
Eğit/Test, modelinizin doğruluğunu ölçmek için kullanılan bir yöntemdir.
Eğitim/Test olarak adlandırılır çünkü veri kümesini iki kümeye bölersiniz: bir eğitim kümesi ve bir test kümesi.
Eğitim için %80 ve test için %20.
Modeli eğitim setini kullanarak eğitirsiniz .
Test setini kullanarak modeli test edersiniz .
Modeli eğitmek , modeli oluşturmak anlamına gelir .
Modeli test etmek, modelin doğruluğunu test etmek anlamına gelir.
Bir Veri Kümesiyle Başlayın
Test etmek istediğiniz bir veri seti ile başlayın.
Veri setimiz bir mağazadaki 100 müşteriyi ve onların alışveriş alışkanlıklarını göstermektedir.
Örnek
import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
plt.scatter(x, y)
plt.show()
Sonuç:
X ekseni, satın alma yapmadan önceki dakika sayısını temsil eder.
Y ekseni, satın alma işlemine harcanan para miktarını temsil eder.
Tren/Test olarak Böl
Eğitim seti, orijinal verilerin % 80'inden rastgele bir seçim olmalıdır.
Test seti kalan %20 olmalıdır.
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
Eğitim Setini Görüntüle
Eğitim seti ile aynı dağılım grafiğini görüntüleyin:
Örnek
plt.scatter(train_x,
train_y)
plt.show()
Sonuç:
Orijinal veri kümesine benziyor, bu nedenle adil bir seçim gibi görünüyor:
Test Setini Görüntüle
Test setinin tamamen farklı olmadığından emin olmak için test setine de bir göz atacağız.
Örnek
plt.scatter(test_x,
test_y)
plt.show()
Sonuç:
Test seti ayrıca orijinal veri setine benziyor:
Veri Kümesini Sığdır
Veri seti neye benziyor? Bence en uygun olanı polinom regresyonu olur, bu yüzden bir polinom regresyon doğrusu çizelim.
Veri noktalarından bir çizgi çekmek
plot()
için matplotlib modülünün yöntemini kullanıyoruz:
Örnek
Veri noktalarından bir polinom regresyon çizgisi çizin:
import numpy
import
matplotlib.pyplot as plt
numpy.random.seed(2)
x =
numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40, 100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y =
y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y, 4))
myline = numpy.linspace(0, 6, 100)
plt.scatter(train_x, train_y)
plt.plot(myline, mymodel(myline))
plt.show()
Sonuç:
Sonuç, veri kümesinin dışındaki değerleri tahmin etmeye çalışırsak bize bazı garip sonuçlar verecek olsa da, bir polinom regresyonuna uyan veri kümesi önerimi destekleyebilir. Örnek: satır, mağazada 6 dakika geçiren bir müşterinin 200 değerinde bir satın alma yapacağını gösterir. Bu muhtemelen fazla uydurmanın bir işaretidir.
Peki ya R-kare puanı? R-kare puanı, veri setimin modele ne kadar iyi uyduğunun iyi bir göstergesidir.
R2
R-kare olarak da bilinen R2'yi hatırlıyor musunuz?
X ekseni ile y ekseni arasındaki ilişkiyi ölçer ve 0 ile 1 arasında değişir, burada 0 ilişki yok ve 1 tamamen ilişkili anlamına gelir.
r2_score()
Sklearn modülünün bu ilişkiyi bulmamıza yardımcı olacak adında bir yöntemi vardır .
Bu durumda müşterinin mağazada kaldığı dakikalar ile ne kadar para harcadıkları arasındaki ilişkiyi ölçmek istiyoruz.
Örnek
Eğitim verilerim bir polinom regresyonuna ne kadar uyuyor?
import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y,
4))
r2 = r2_score(train_y, mymodel(train_x))
print(r2)
Not: 0,799 sonucu, bir OK ilişkisinin olduğunu gösterir.
Test Setini Getirin
Şimdi, en azından eğitim verileri söz konusu olduğunda, tamam olan bir model yaptık.
Şimdi aynı sonucu verip vermediğini görmek için modeli test verileriyle de test etmek istiyoruz.
Örnek
Test verilerini kullanırken R2 puanını bulalım:
import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
x = numpy.random.normal(3, 1, 100)
y = numpy.random.normal(150, 40,
100) / x
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
mymodel = numpy.poly1d(numpy.polyfit(train_x, train_y,
4))
r2 = r2_score(test_y, mymodel(test_x))
print(r2)
Not: 0.809 sonucu, modelin test kümesine de uyduğunu gösterir ve modeli gelecekteki değerleri tahmin etmek için kullanabileceğimizden eminiz.
Tahmin Değerleri
Artık modelimizin tamam olduğunu belirlediğimize göre, yeni değerleri tahmin etmeye başlayabiliriz.
Örnek
Satın alan bir müşteri, dükkanda 5 dakika kalırsa ne kadar para harcar?
print(mymodel(5))
Örnek, şemaya karşılık geldiği gibi, müşterinin 22.88 dolar harcamasını öngördü: