Pembelajaran Mesin - Kereta/Tes
Evaluasi Model Anda
Dalam Machine Learning kami membuat model untuk memprediksi hasil dari peristiwa tertentu, seperti pada bab sebelumnya di mana kami memprediksi emisi CO2 mobil ketika kami mengetahui berat dan ukuran mesin.
Untuk mengukur apakah model sudah cukup baik, kita dapat menggunakan metode yang disebut Train/Test.
Apa itu Kereta/Tes
Train/Test adalah metode untuk mengukur keakuratan model Anda.
Disebut Train/Test karena Anda membagi set data menjadi dua set: set pelatihan dan set pengujian.
80% untuk pelatihan, dan 20% untuk pengujian.
Anda melatih model menggunakan set pelatihan.
Anda menguji model menggunakan set pengujian.
Melatih model berarti membuat model.
Menguji model berarti menguji keakuratan model.
Mulai Dengan Kumpulan Data
Mulailah dengan kumpulan data yang ingin Anda uji.
Kumpulan data kami menggambarkan 100 pelanggan di sebuah toko, dan kebiasaan belanja mereka.
Contoh
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()
Hasil:
Sumbu x menunjukkan jumlah menit sebelum melakukan pembelian.
Sumbu y menunjukkan jumlah uang yang dihabiskan untuk pembelian.
Dibagi Menjadi Kereta/Tes
Set pelatihan harus merupakan pilihan acak 80% dari data asli.
Set pengujian harus menjadi 20% sisanya.
train_x = x[:80]
train_y = y[:80]
test_x = x[80:]
test_y = y[80:]
Tampilkan Set Pelatihan
Tampilkan plot sebar yang sama dengan set pelatihan:
Contoh
plt.scatter(train_x,
train_y)
plt.show()
Hasil:
Sepertinya kumpulan data asli, jadi sepertinya ini pilihan yang adil:
Tampilkan Set Pengujian
Untuk memastikan set pengujian tidak sepenuhnya berbeda, kami akan melihat set pengujian juga.
Contoh
plt.scatter(test_x,
test_y)
plt.show()
Hasil:
Kumpulan pengujian juga terlihat seperti kumpulan data asli:
Sesuaikan Kumpulan Data
Seperti apa kumpulan data itu? Menurut pendapat saya, saya pikir yang paling cocok adalah regresi polinomial , jadi mari kita menggambar garis regresi polinomial.
Untuk menggambar garis melalui titik data, kami menggunakan
plot()
metode modul matplotlib:
Contoh
Gambarlah garis regresi polinomial melalui titik-titik data:
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()
Hasil:
Hasilnya dapat mendukung saran saya tentang kumpulan data yang cocok dengan regresi polinomial, meskipun itu akan memberi kita beberapa hasil yang aneh jika kita mencoba memprediksi nilai di luar kumpulan data. Contoh: garis menunjukkan bahwa pelanggan yang menghabiskan 6 menit di toko akan melakukan pembelian senilai 200. Itu mungkin tanda overfitting.
Tapi bagaimana dengan skor R-kuadrat? Skor R-kuadrat adalah indikator yang baik tentang seberapa baik kumpulan data saya sesuai dengan model.
R2
Ingat R2, juga dikenal sebagai R-kuadrat?
Ini mengukur hubungan antara sumbu x dan sumbu y, dan nilainya berkisar dari 0 hingga 1, di mana 0 berarti tidak ada hubungan, dan 1 berarti benar-benar terkait.
Modul sklearn memiliki metode yang dipanggil r2_score()
yang akan membantu kita menemukan hubungan ini.
Dalam hal ini kami ingin mengukur hubungan antara menit pelanggan tinggal di toko dan berapa banyak uang yang mereka belanjakan.
Contoh
Seberapa cocok data pelatihan saya dalam regresi polinomial?
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)
Catatan: Hasil 0,799 menunjukkan hubungan yang OK.
Bawa Set Pengujian
Sekarang kami telah membuat model yang OK, setidaknya dalam hal data pelatihan.
Sekarang kami ingin menguji model dengan data pengujian juga, untuk melihat apakah memberi kami hasil yang sama.
Contoh
Mari kita cari skor R2 saat menggunakan data pengujian:
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)
Catatan: Hasil 0,809 menunjukkan bahwa model juga cocok dengan set pengujian, dan kami yakin bahwa kami dapat menggunakan model untuk memprediksi nilai di masa mendatang.
Prediksi Nilai
Sekarang setelah kami menetapkan bahwa model kami baik-baik saja, kami dapat mulai memprediksi nilai baru.
Contoh
Berapa banyak uang yang akan dibelanjakan pelanggan yang membeli, jika dia tinggal di toko selama 5 menit?
print(mymodel(5))
Contoh tersebut memperkirakan pelanggan menghabiskan 22,88 dolar, seperti yang terlihat pada diagram: