Buku Machine Learning With Python
Buku Machine Learning With Python
Kom
Algoritma Machine
Dengan
Learning Python
YP
YAYASAN PRIMA AGUS TEKNIK
Algoritma Machine
Dengan
Learning Python
Dr. Joseph Teguh Santoso, [Link], [Link]
PENERBIT :
YAYASAN PRIMA AGUS TEKNIK
YP Jl. Majapahit No. 605 Semarang
Telp. (024) 6723456. Fax. 024-6710144
YAYASAN PRIMA AGUS TEKNIK
Email : penerbit_ypat@[Link]
Algoritma Machine
Dengan
Learning Python
Dr. Joseph Teguh Santoso, [Link], [Link]
PENERBIT :
YAYASAN PRIMA AGUS TEKNIK
Jl. Majapahit No. 605 Semarang
Telp. (024) 6723456. Fax. 024-6710144
Email : penerbit_ypat@[Link]
Algoritma Machine Learning Dengan Python
9 786235 734286
, [Link]., [Link]
Universitas STEKOM
KATA PENGANTAR
Puji syukur pada Tuhan Yang Maha Esa bahwa buku yang berjudul “Algoritma Machine
Learning Dengan Python” ini dapat diselesaikan dengan baik. Pembelajaran Mesin merupakan
faktor utama perubahan dunia, beranekaragam jenis aplikasi dan penelitian dilakukan
dibidang akademi, industry maupun hiburan. Pembelajaran merubah paradigma setiap bagian
dari kehidupan kita sehari-hari, dari cara pengambilan keputusan hingga prediksi dalam hal
tertentu.
Buku ini dibagi menjadi 4 Bab, bab pertama menulis memaparkan bahwa penulis telah
mempelajari banyak konsep yang berguna, beberapa konsep yang mungkin membuat Anda
sedikit kebingungan. Pembelajaran mesin: ML mengacu pada membuat mesin bekerja lebih
baik pada beberapa tugas, menggunakan data yang diberikan. Diantaranya pembelajaran
mesin datang dalam berbagai jenis, seperti pembelajaran terawasi, batch, tanpa pengawasan,
dan online. Untuk menjalankan proyek ML, mengumpulkan data dalam set pelatihan, lalu
mengumpankan set tersebut ke algoritma pembelajaran untuk mendapatkan keluaran,
“prediksi”. Jika ingin mendapatkan output yang tepat, sistem harus menggunakan data yang
jelas, yang tidak terlalu kecil dan yang tidak memiliki fitur yang tidak relevan. Di bab kedua,
mempelajari konsep baru yang berguna dan menerapkan banyak jenis algoritma klasifikasi.
Juga konsep baru, seperti: ROC (karakteristik pengoperasian receiver, alat yang digunakan
dengan pengklasifikasi biner); Analisis Kesalahan, Cara melatih pengklasifikasi acak
menggunakan fungsi Scikit, Memahami Klasifikasi Multi-Output dan multi-Label.
Bab ketiga, mempelajari konsep baru, dan mempelajari cara melatih model
menggunakan berbagai jenis algoritma, mempelajari kapan harus menggunakan setiap
algoritma, termasuk: Penurunan gradien batch, Penurunan gradien mini-batch, Regresi
polynomial, Model linier teratur, Regresi punggungan, Regresi Lasso.
Bab Terakhir akan membahas tentang algoritma pembelajaran mesin diantaranya
regresi linier, kompleksitas komputasi, dan penurunan gradien. Akhir kata semoga buku ini
bermanfaat bagi para pembaca.
iii
DAFTAR ISI
iv
3.7 Regresi Polinomial ............................................................................................. 30
3.8 Kurva Pembelajaran .......................................................................................... 31
BAB 4 KOMBINASI MODEL YANG BERBEDA .............................................................. 34
4.1 Klasifikasi Pohon ................................................................................................ 34
4.2 Fungsi Massa Dari Distribusi Binominal ............................................................ 36
4.3 Menerapkan Pengklasifikasi Mayoritas Sederhana .......................................... 37
4.4 Penggabungan Algoritma Berbeda Untuk Klasifikasi Suara Mayoritas ............. 41
DAFTAR PUSTAKA .................................................................................................... 49
v
1
BAB 1
PENGANTAR BELAJAR MESIN
1.1 TEORI
Jika saya bertanya tentang "Pembelajaran mesin", Anda mungkin akan membayangkan
robot atau sesuatu seperti Terminator. Pada kenyataannya t, pembelajaran mesin terlibat
tidak hanya dalam robotika, tetapi juga dalam banyak aplikasi lainnya. Anda juga dapat
membayangkan sesuatu seperti filter spam sebagai salah satu aplikasi pertama dalam
pembelajaran mesin, yang membantu meningkatkan kehidupan jutaan orang. Dalam bab ini,
saya akan memperkenalkan Anda apa itu pembelajaran mesin, dan cara kerjanya.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
2
Karena program ini bukan perangkat lunak, program ini berisi daftar aturan yang
sangat panjang yang sulit untuk dipelihara. Tetapi jika Anda mengembangkan perangkat lunak
yang sama menggunakan ML, Anda akan dapat memeliharanya dengan baik.
Selain itu, pengirim email dapat mengubah template email mereka sehingga kata
seperti “4U” sekarang menjadi “untuk Anda”, karena email mereka telah ditentukan sebagai
spam. Program yang menggunakan teknik tradisional perlu diperbarui, yang berarti, jika ada
perubahan lain, Anda perlu memperbarui kode Anda lagi dan lagi dan lagi.
Di sisi lain, program yang menggunakan teknik ML akan secara otomatis mendeteksi
perubahan ini oleh pengguna, dan mulai menandai mereka tanpa Anda memberi tahu secara
manual.
Selain itu, kita dapat menggunakan pembelajaran mesin untuk memecahkan masalah
yang sangat kompleks untuk perangkat lunak pembelajaran non-mesin. Misalnya, pengenalan
suara: ketika Anda mengatakan "satu" atau "dua", program harus dapat membedakan
perbedaannya. Jadi, untuk tugas ini, Anda perlu mengembangkan algoritma yang mengukur
suara.
Pada akhirnya, pembelajaran mesin akan membantu kita untuk belajar, dan algoritme
pembelajaran mesin dapat membantu kita melihat apa yang telah kita pelajari.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
3
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
4
Anda harus ingat bahwa beberapa algoritma regresi dapat digunakan untuk klasifikasi
juga, dan sebaliknya.
Algoritme terawasi yang paling penting
- K-tetangga dekat
- Regresi linier
- Jaringan saraf
- Mendukung mesin vektor
- Regresi logistik
- Pohon keputusan dan hutan acak
Pembelajaran tanpa pengawasan
Dalam sistem pembelajaran mesin jenis ini, Anda dapat menebak bahwa data tidak berlabel.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
5
Ada beberapa algoritma yang sangat penting, seperti algoritma visualisasi; ini adalah
algoritma pembelajaran tanpa pengawasan. Anda harus memberi mereka banyak data dan
data tidak berlabel sebagai input, lalu Anda akan mendapatkan visualisasi 2D atau 3D sebagai
output.
Anda dapat menemukan tipe pembelajaran ini di banyak aplikasi robotika yang mempelajari
cara berjalan
Anda dapat menggunakan sistem jenis ini untuk masalah yang memerlukan aliran data
yang berkelanjutan, yang juga perlu beradaptasi dengan cepat terhadap perubahan apa pun.
Selain itu, Anda dapat menggunakan sistem jenis ini untuk bekerja dengan kumpulan data
yang sangat besar,
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
7
Anda harus tahu seberapa cepat sistem Anda dapat beradaptasi dengan perubahan
apa pun dalam "kecepatan pembelajaran" data. Jika kecepatannya tinggi, berarti sistem akan
belajar cukup, cepat, tetapi juga akan cepat melupakan data lama.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
8
1.10 PENGUJIAN
Jika Anda ingin memastikan bahwa model Anda bekerja dengan baik dan model
tersebut dapat digeneralisasi dengan kasus baru, Anda dapat mencoba kasus baru dengannya
dengan meletakkan model di lingkungan dan kemudian memantau bagaimana kinerjanya. Ini
adalah metode yang baik, tetapi jika model Anda tidak memadai, pengguna akan mengeluh.
Anda harus membagi data Anda menjadi dua set, satu set untuk pelatihan dan yang
kedua untuk pengujian, sehingga Anda dapat melatih model Anda menggunakan yang
pertama dan mengujinya menggunakan yang kedua. Kesalahan generalisasi adalah tingkat
kesalahan dengan mengevaluasi model Anda pada set pengujian. Nilai yang Anda dapatkan
akan memberi tahu Anda apakah model Anda cukup baik, dan apakah itu akan berfungsi
dengan baik.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
9
Jika tingkat kesalahannya rendah, modelnya bagus dan akan bekerja dengan baik.
Sebaliknya, jika tingkat Anda tinggi, ini berarti model Anda akan berkinerja buruk dan tidak
berfungsi dengan baik. Saran saya untuk Anda adalah menggunakan 80% data untuk pelatihan
dan 20% untuk tujuan pengujian, sehingga sangat mudah untuk menguji atau mengevaluasi
model.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
11
BAB 2
KLASIFIKASI
2.1 INSTALASI
Anda harus menginstal Python, Matplotlib dan Scikit-belajar untuk bab ini. Cukup buka
bagian referensi dan ikuti langkah-langkah yang ditunjukkan.
2.2 MNIST
Dalam bab ini, Anda akan masuk lebih dalam ke sistem klasifikasi, dan bekerja dengan
kumpulan data MNIST. Ini adalah satu set 70.000 gambar angka yang ditulis tangan oleh siswa
dan karyawan. Anda akan menemukan bahwa setiap gambar memiliki label dan angka yang
mewakilinya. Proyek ini seperti contoh "Halo, dunia" dari pemrograman tradisional.
Jadi, setiap pemula dalam pembelajaran mesin harus memulai dengan proyek ini untuk
mempelajari tentang algoritma klasifikasi. Scikit-Learn memiliki banyak fungsi, termasuk
MNIST. Mari kita lihat kodenya:
•7000 di sini berarti ada 70.000 gambar, dan setiap gambar memiliki lebih dari 700 fitur:
"784". Karena, seperti yang Anda lihat, setiap gambar berukuran 28 x 28 piksel, Anda
dapat membayangkan bahwa setiap piksel adalah satu fitur.
Mari kita ambil contoh lain dari kumpulan data. Anda hanya perlu mengambil fitur instance,
lalu membuatnya menjadi array 26 x 26, dan kemudian menampilkannya menggunakan fungsi
imshow:
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
12
Seperti yang Anda lihat pada gambar berikut, sepertinya nomor lima, dan kami dapat
memberikan label yang memberi tahu kami bahwa itu adalah lima.
Pada gambar berikut, Anda dapat melihat tugas klasifikasi yang lebih kompleks dari kumpulan
data MNIST.
Selain itu, Anda harus membuat set pengujian dan membuatnya sebelum data Anda
diperiksa. Kumpulan data MNIST dibagi menjadi dua set, satu untuk pelatihan dan satu untuk
pengujian. x_tr, x_tes, y_tr, y_te = x [:60000], x[60000:], y[:60000], y[60000:]
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
13
Mari bermain dengan set latihan Anda sebagai berikut untuk membuat validasi silang menjadi
serupa (tanpa ada angka yang hilang)
Import numpy as np
myData = [Link](50000)
x_tr, y_tr = x_tr[myData], y_tr[myData]
Y_tr_6 = (y_tr == 6) // ini berarti benar untuk 6 detik, dan salah untuk nomor lainnya
Y_tes_6 = (Y_tes == 6)
Setelah itu, kita dapat memilih classifier dan melatihnya. Mulailah dengan
pengklasifikasi SGD (Stochastic Gradient Descent). Kelas Scikit-Learn memiliki keuntungan
menangani kumpulan data yang sangat besar. Dalam contoh ini, SGD akan menangani
instance secara terpisah, sebagai berikut.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
14
Anda akan mendapatkan rasio akurasi "prediksi yang benar" di semua lipatan.
Mari kita klasifikasikan setiap pengklasifikasi di setiap gambar di not-6
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
15
Untuk output, Anda akan mendapatkan tidak kurang dari 90%: hanya 10% dari gambar yang
6s, jadi kami selalu dapat membayangkan bahwa sebuah gambar bukan 6. Kami akan benar
sekitar 90% dari waktu. Ingatlah bahwa akurasi bukanlah ukuran kinerja terbaik untuk
pengklasifikasi, jika Anda bekerja dengan kumpulan data miring.
Fungsi ini, seperti fungsi cross_val_score(), melakukan validasi silang k fold, dan juga
mengembalikan prediksi pada setiap fold. Ini juga mengembalikan prediksi bersih untuk setiap
instance di set pelatihan Anda. Sekarang kita siap untuk mendapatkan matriks menggunakan
kode berikut.
Setiap baris mewakili kelas dalam matriks, dan setiap kolom mewakili kelas yang
diprediksi. Baris pertama adalah yang negatif: yang "berisi non-6 gambar". Anda dapat belajar
banyak dari matriks. Tapi ada juga yang bagus, menarik untuk dikerjakan jika Anda ingin
mendapatkan keakuratan prediksi positif, yaitu ketepatan pengklasifikasi menggunakan
persamaan ini.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
16
2.5 MENGINGAT
Sangat umum untuk menggabungkan presisi dan ingatan menjadi hanya satu metrik, yaitu
skor F1. F1 adalah mean dari presisi dan recall. Kita dapat menghitung skor F1 dengan
persamaan berikut:
F1 = 2 / ((1/precision) + (1)/recall)) = 2 * (precision * recall) / (precision + recall) = (TP) / ((TP)
+ (FN+FP)/2)
skor ini, itu akan menetapkan instance ke "positif atau negatif". Misalnya, jika ambang batas
keputusan berada di tengah, Anda akan menemukan 4 benar + di sisi kanan ambang batas,
dan hanya satu yang salah. Jadi rasio presisi akan hanya 80%.
Di Scikit-Learn, Anda tidak dapat menetapkan ambang batas secara langsung. Anda
harus mengakses skor keputusan, yang menggunakan prediksi, dan dengan memanggil fungsi
keputusan, ().
Dalam kode ini, SGDClassifier berisi ambang, = 0, untuk mengembalikan hasil yang
sama seperti fungsi prediksi ().
Kode ini akan mengkonfirmasi bahwa, ketika ambang batas meningkat, penarikan
berkurang.
Saatnya untuk menghitung semua kemungkinan presisi dan penarikan kembali untuk
ambang batas dengan memanggil fungsi precision_recall_curve()
presisi, penarikan, ambang batas = precision_recall_curve (y_tr_6, y_sco) dan sekarang mari
kita plot presisi dan penarikan kembali menggunakan Matplotlib
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
18
2.7 ROC
ROC singkatan dari karakteristik operasi penerima dan itu adalah alat yang digunakan
dengan pengklasifikasi biner. Alat ini mirip dengan kurva recall, tetapi tidak memplot presisi
dan recall: memplot tingkat positif dan tingkat palsu. Anda juga akan bekerja dengan FPR, yang
merupakan rasio sampel negatif. Bisa dibayangkan jika seperti (1 – rate negatif. Konsep lain
adalah TNR dan spesifisitasnya. Recall = 1 – spesifisitas. Mari bermain dengan Kurva ROC.
Pertama, kita perlu menghitung TPR dan FPR, cukup dengan memanggil fungsi roc-curve (),
Setelah itu, Anda akan memplot FPR dan TPR dengan Matplotlib sesuai dengan instruksi
berikut.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
19
Selain itu, Anda dapat memanggil decision_function () untuk mengembalikan skor “10 skor
untuk satu kelas”
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
20
Seperti yang Anda lihat, melatih pengklasifikasi hutan acak dengan hanya dua baris
kode sangat mudah. Scikit-Learn tidak menjalankan fungsi OvA atau OvO karena algoritme
semacam ini — “pengklasifikasi hutan acak” — dapat secara otomatis mengerjakan beberapa
kelas. Jika Anda ingin melihat daftar kemungkinan pengklasifikasi, Anda dapat memanggil
fungsi predict_oroba ().
Pengklasifikasi sangat akurat dengan prediksinya, seperti yang Anda lihat di output;
ada 0,8 pada indeks nomor 5. Mari kita evaluasi classifier menggunakan fungsi
cross_val_score().
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
21
Pertama, Anda harus membagi setiap nilai dalam matriks dengan jumlah gambar di kelas, dan
kemudian Anda akan membandingkan tingkat kesalahannya.
Langkah selanjutnya adalah membuat semua nol pada diagonal, dan itu akan
mencegah kesalahan terjadi.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
22
Dalam instruksi ini, kami telah membuat larik y_mullti yang berisi dua label untuk
setiap gambar. Dan yang pertama berisi informasi apakah angkanya “besar” (8,9,.), dan yang
kedua memeriksa ganjil atau tidak. Selanjutnya, kita akan membuat prediksi menggunakan
rangkaian instruksi berikut.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
23
Latihan
1. Buat pengklasifikasi untuk kumpulan data MNIST . Cobalah untuk mendapatkan
akurasi lebih dari 96% pada set pengujian Anda.
2. Tulis metode untuk menggeser gambar dari MNIST (kanan atau kiri) sebanyak 2 piksel.
3. Kembangkan program atau pengklasifikasi anti-spam Anda sendiri.
- Download contoh spam dari Google.
- Ekstrak kumpulan data.
- Bagilah kumpulan data menjadi pelatihan untuk kumpulan pengujian.
- Tulis program untuk mengonversi setiap email menjadi vektor fitur.
- Mainkan dengan pengklasifikasi, dan coba buat yang terbaik, dengan nilai tinggi
untuk ingatan dan presisi.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
24
BAB 3
CARA MELATIH MODEL
Setelah bekerja dengan banyak model pembelajaran mesin dan algoritma pelatihan,
yang tampak seperti kotak hitam yang tak terduga. Kami dapat mengoptimalkan sistem
regresi, juga bekerja dengan pengklasifikasi gambar. Tetapi kami mengembangkan sistem ini
tanpa memahami apa yang ada di dalamnya dan bagaimana cara kerjanya, jadi sekarang kami
perlu mempelajari lebih dalam sehingga kami dapat memahami cara kerjanya dan memahami
detail implementasinya.
Memperoleh pemahaman mendalam tentang detail ini akan membantu Anda dengan
model yang tepat dan dengan memilih algoritma pelatihan terbaik. Juga, ini akan membantu
Anda dengan debugging dan analisis kesalahan.
Dalam bab ini, kita akan bekerja dengan regresi polinomial, yang merupakan model
kompleks yang bekerja untuk kumpulan data nonlinier. Selain itu, kami akan bekerja dengan
beberapa teknik regularisasi yang mengurangi pelatihan yang mendorong overfitting.
Mari kita menulis beberapa kode untuk berlatih. Impor numpy sebagai np
V1_x = 2 * [Link] (100, 1)
V2_y = 4 + 3 * V1_x + [Link] (100, 1)
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
25
Setelah itu, kita akan menghitung Θ nilai menggunakan persamaan kita. Saatnya
menggunakan fungsi inv() dari modul aljabar linier numpy ([Link]) untuk menghitung invers
matriks apa pun, dan juga, fungsi dot() untuk mengalikan matriks kita
Value1 = np.c_[[Link]((100, 1)), V1_x]
myTheta = [Link]([Link](Value1)).dot(Value1.T).dot(V2_y)
>>>myTheta Array([[num], [num]])
Selain itu, Anda harus ingat bahwa ukuran langkah sangat penting untuk algoritma ini,
karena jika sangat kecil – “artinya laju pembelajaran” lambat, akan memakan waktu lama
untuk mencakup semua yang diperlukan.
Tetapi ketika tingkat pembelajaran tinggi, itu akan memakan waktu singkat untuk
menutupi apa yang dibutuhkan, dan itu akan memberikan solusi yang optimal.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
27
Pada akhirnya, Anda tidak akan selalu menemukan bahwa semua fungsi biaya itu
mudah, seperti yang Anda lihat, tetapi Anda juga akan menemukan fungsi tidak beraturan
yang membuat mendapatkan solusi optimal menjadi sangat sulit. Masalah ini terjadi ketika
minimum lokal dan minimum global terlihat seperti pada gambar berikut.
Jika Anda menetapkan salah satu untuk dua titik pada kurva Anda, Anda akan
menemukan bahwa segmen garis tidak akan bergabung dengan mereka pada kurva yang
sama. Fungsi biaya ini akan terlihat seperti mangkuk, yang akan terjadi jika fitur memiliki
banyak skala, seperti pada gambar berikut:
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
28
perubahan ini dengan turunan parsial. Kita dapat menghitung turunan parsial menggunakan
persamaan berikut:
Tapi kita juga akan menggunakan persamaan berikut untuk menghitung turunan parsial dan
vektor gradien bersama-sama.
Jika Anda mencoba mengubah nilai learning rate, Anda akan mendapatkan bentuk
yang berbeda, seperti pada gambar berikut.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
29
Tetapi saat menggunakan penurunan gradien stokastik, algoritme akan secara acak
memilih instance dari set pelatihan Anda di setiap langkah, dan kemudian akan menghitung
nilainya. Dengan cara ini, algoritma akan lebih cepat daripada penurunan gradien batch,
karena tidak perlu menggunakan seluruh rangkaian untuk menghitung nilainya. Di sisi lain,
karena keacakan metode ini, maka akan menjadi tidak teratur jika dibandingkan dengan
algoritma batch.
Gambar 3.11 penghitungan algoritma mini batch berdasarkan set kecil dan acak
Gambar 3.12 Penggunaan teknik regresi polinomial membuat bekerja dengan data yang
lebih kompleks
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
31
Seperti yang Anda lihat. lurus tidak akan pernah mewakili data dengan cara yang paling efisien.
Jadi kita akan menggunakan metode polinomial untuk mengatasi masalah ini.
>>>from [Link] import PolynomialFeatures
>>>P_F = PolynomialFeatures(degree = 2, include_bias=False)
>>>V1_P = P_F.fit_transform(V1)
>>>V1[0]
Array([num])
>>>V1_P[0]
Sekarang, mari kita buat fungsi ini dengan data kita benar, dan ubah garis lurusnya.
>>> ln_r = LinearRegression()
>>>ln_r.fit(V1_P, V2)
>>>ln_r.intercept_, ln_r.coef
Pada gambar di atas, Anda dapat melihat overfitting data saat Anda menggunakan
polinomial. Di sisi lain, dengan yang linier, Anda dapat melihat bahwa datanya jelas kurang
pas.
Model Linier Teratur
Kami telah bekerja, di bab pertama dan kedua, tentang cara mengurangi overfitting
dengan sedikit mengatur model, sebagai contoh, jika Anda ingin mengatur model polinomial.
Dalam hal ini, untuk memperbaiki masalah, Anda harus mengurangi jumlah derajat.
Regresi punggungan
Regresi punggungan adalah versi lain dari regresi linier, tetapi, setelah mengaturnya
dan menambahkan bobot pada fungsi biaya, ini membuatnya sesuai dengan data, dan bahkan
membuat bobot model sesederhana mungkin. Berikut adalah fungsi biaya dari regresi ridge:
Regresi Lasso
Regresi "Lasso" adalah singkatan dari regresi "Penyusutan Terkecil dan Operator
Seleksi". Ini adalah jenis lain dari versi reguler regresi linier. Ini terlihat seperti regresi
punggungan, tetapi dengan perbedaan kecil dalam persamaan, seperti pada gambar berikut:
Seperti yang Anda lihat pada gambar berikut, regresi lasso menggunakan nilai yang lebih kecil
daripada ridge.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
33
Gambar 3.16 Regresi Lasso Mempunyai Nilai Yang Lebih Kecil Dibandingkan Ridge
Latihan
1. Jika Anda memiliki satu set yang berisi sejumlah besar fitur (jutaan fitur), algoritma
regresi mana yang harus Anda gunakan, dan mengapa?
2. Jika Anda menggunakan penurunan gradien batch untuk memplot kesalahan pada
setiap periode, dan tiba-tiba tingkat kesalahan meningkat, bagaimana Anda
memperbaiki masalah ini?
3. Apa yang harus Anda lakukan jika Anda melihat kesalahan menjadi lebih besar saat
Anda menggunakan metode mini-batch? Mengapa?
4. Dari pasangan ini, metode mana yang lebih baik? Mengapa? :
Regresi punggungan dan regresi linier?
Regresi Lasso dan regresi ridge?
5. Tulis algoritma penurunan gradien batch.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
34
BAB 4
KOMBINASI MODEL YANG BERBEDA
sebagainya. Bahkan, Anda dapat menggunakan algoritma klasifikasi dasar yang sama untuk
menyesuaikan subset yang berbeda dari set pelatihan. Contoh dari metode ini adalah
algoritma hutan acak, yang menggabungkan banyak cara ansambel keputusan menggunakan
suara mayoritas.
Gambar 4.2 Metode algoritma hutan acak dengan menggabungkan banyak cara ansambel
suara mayoritas
Untuk memprediksi label kelas melalui pemungutan suara mayoritas atau pluralitas
sederhana, kami menggabungkan label kelas yang diprediksi dari masing-masing classifer
individu C j dan memilih label kelas yˆ yang menerima suara terbanyak:
Misalnya, dalam tugas klasifikasi biner di mana kelas1 1 = dan kelas2 1 = +, kita dapat menulis
prediksi suara mayoritas.
Untuk mengilustrasikan mengapa metode ansambel dapat bekerja lebih baik daripada
pengklasifikasi individual saja, mari kita terapkan konsep kombinasi yang sederhana. Untuk
contoh berikut, kami membuat asumsi bahwa semua n pengklasifikasi dasar untuk tugas
klasifikasi biner memiliki tingkat kesalahan yang sama, . Selain itu, kami berasumsi bahwa
pengklasifikasi independen dan tingkat kesalahan tidak berkorelasi. Seperti yang Anda lihat,
kami hanya dapat menjelaskan statistik kesalahan dari ensemble pengklasifikasi dasar sebagai
probabilitas.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
36
Mari kita menulis beberapa kode untuk menghitung tingkat kesalahan yang berbeda
memvisualisasikan hubungan antara kesalahan ensemble dan dasar dalam grafik garis:
>>> import numpy as np
>>> error_range = [Link](0.0, 1.01, 0.01)
>>> en_error = [en_er(n_classifier=11, er=er)
... for er in er_range]
>>> import [Link] as plt
>>> [Link](er_range, en_error,
... label='Ensemble error',
... linewidth=2)
>>> [Link](er_range, er_range,
... ls='--', label='B_ er',
... linewidth=2)
>>> [Link]('B_ er')
>>> [Link]('B/En_er')
>>> [Link](loc='upper left')
>>> [Link]()
>>> [Link]()
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
37
Seperti yang dapat kita lihat di plot yang dihasilkan, probabilitas kesalahan suatu
ensemble selalu lebih baik daripada kesalahan pengklasifikasi dasar individu selama
pengklasifikasi dasar berkinerja lebih baik daripada tebakan acak (ε <0,5). Anda harus
memperhatikan bahwa sumbu y menggambarkan kesalahan dasar serta kesalahan ensemble
(garis kontinu):
Di sini, pij adalah probabilitas yang diprediksi dari classifer ke-j untuk label kelas i. Untuk
melanjutkan contoh sebelumnya, mari kita asumsikan bahwa kita memiliki masalah klasifikasi
biner dengan label kelas i ∈ { } 0,1 dan ansambel tiga pengklasifikasi C j ( j ∈ { } 1,2,3 ). Mari
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
38
Jika 'cl_label' prediksi didasarkan pada argmax label kelas. Elif 'prob', argumen dari total probs
digunakan untuk memprediksi label kelas (disarankan untuk pengklasifikasi yang dikalibrasi).
w : arr-like, s = [n_cl]
s.w= w
def fit_cl(s, X, y):
""" Fit_cl.
Parameters
X : {array-like, sparse matrix},
s = [n_samples, n_features]
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
40
Vektor pelatihan, di mana n_samples adalah jumlah sampel dan n_features adalah jumlah
fitur.
Returns
av_prob : array-like,
sh = [n_samples, n_classes]
return av_prob
def get_ps(self, deep=True):
""" Get classifier parameter names for GridSearch"""
if not deep:
return super(MVC,
self).get_ps(deep=False)
else:
ou = s.n_cl.copy()
for n, step in\
[Link](s.n_cl):
for k, value in [Link](
step.get_ps(deep=True)):
ou['%s %s' % (n, k)] = value
return ou
Selanjutnya kami membagi sampel Iris menjadi 50 persen pelatihan dan 50 persen data uji:
>>> X_train, X_test, y_train, y_test =\
... train_test_split(X, y,
... test_size=0.5,
... random_state=1)
Dengan menggunakan dataset pelatihan, sekarang kita akan melatih tiga pengklasifikasi yang
berbeda — pengklasifikasi regresi logistik, pengklasifikasi pohon keputusan, dan
pengklasifikasi k-nearest neighbor — dan melihat kinerja masing-masing melalui validasi
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
42
silang 10 pada dataset pelatihan sebelum kita menggabungkan mereka menjadi satu
ansambel:
import the following
sklearn.cross_validation
sklearn.linear_model
[Link]
[Link]
Pipeline
numpy as np
>>> clf1 = LogisticRegression(penalty='l2',
... C=0.001,
... random_state=0)
>>> clf2 = DTCl(max_depth=1,
... criterion='entropy',
... random_state=0)
>>> cl = KNC(n_nb=1,
... p=2,
... met='minsk')
>>> pipe1 = Pipeline([['sc', StandardScaler()],
... ['clf', clf1]])
>>> pipe3 = Pipeline([['sc', StandardScaler()],
... ['clf', clf3]])
>>> clf_labels = ['Logistic Regression', 'Decision Tree', 'KNN']
>>> print('10-fold cross validation:\n')
>>> for clf, label in zip([pipe1, clf2, pipe3], clf_labels):
... sc = crossVSc(estimator=clf,
>>> X=X_train,
>>> y=y_train,
>>> cv=10,
>>> scoring='roc_auc')
>>> print("ROC AUC: %0.2f (+/- %0.2f) [%s]"
... % ([Link](), [Link](), label))
Output yang kami terima, seperti yang ditunjukkan dalam cuplikan berikut, menunjukkan
bahwa kinerja prediktif dari pengklasifikasi individu hampir sama:
10- lipat validasi silang:
ROC AUC: 0.92 (+/- 0.20) [Logistic Regression]
ROC AUC: 0.92 (+/- 0.15) [Decision Tree]
ROC AUC: 0.93 (+/- 0.10) [KNN]
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
43
... color=clr,
... linestyle=ls,
... la='%s (ac = %0.2f)' % (la, rc_ac))
>>> [Link](lc='lower right')
>>> [Link]([0, 1], [0, 1],
... linestyle='--',
... color='gray',
... linewidth=2)
>>> [Link]([-0.1, 1.1])
>>> [Link]([-0.1, 1.1])
>>> [Link]()
>>> [Link]('False Positive Rate')
>>> [Link]('True Positive Rate')
>>> [Link]()
Seperti yang dapat kita lihat pada ROC yang dihasilkan, classifer ensemble juga bekerja
dengan baik pada set pengujian (ROC AUC = 0,95), sedangkan classifer tetangga k-terdekat
tampaknya terlalu pas dengan data pelatihan (pelatihan ROC AUC = 0,93, pengujian ROC AUC
= 0,86):
Anda hanya memilih dua fitur untuk tugas klasifikasi. Akan menarik untuk menunjukkan
seperti apa sebenarnya wilayah keputusan dari classifer ensemble itu.
Meskipun tidak perlu menstandardisasi fitur pelatihan sebelum model agar sesuai
karena regresi logistik dan pipa k-nearest tetangga kami akan secara otomatis menangani ini,
Anda akan membuat set pelatihan sehingga wilayah keputusan dari pohon keputusan akan
berada di skala yang sama untuk tujuan visual.
Mari lihat:
>>> sc = SS()
X_tra_std = sc.fit_transform(X_train)
From itertools import product
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
45
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
46
Sebelum Anda mempelajari cara menyetel parameter classifer individual untuk klasifikasi
ensemble, mari panggil metode get_ps untuk menemukan ide penting tentang bagaimana kita
dapat mengakses parameter individual di dalam objek GridSearch:
>>> mv_clf.get_params()
{'decisiontreeclassifier':DecisionTreeClassifier(class_weight=None,
criterion='entropy', max_depth=1,
max_features=None, max_leaf_nodes=None, min_samples_
leaf=1,
min_samples_split=2,min_weight_fraction_leaf=0.0,
random_state=0, splitter='best'),
'decisiontreeclassifier class_weight': None,
'decisiontreeclassifier criterion': 'entropy',
[...]
'decisiontreeclassifier random_state': 0,
'decisiontreeclassifier splitter': 'best',
'pipeline-1': Pipeline(steps=[('sc', StandardScaler(copy=True, with_
mean=True, with_std=True)), ('clf', LogisticRegression(C=0.001, class_
weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr',
penalty='l2', random_state=0, solver='liblinear',
tol=0.0001,
verbose=0))]),
'pipeline-1_clf': LogisticRegression(C=0.001, class_weight=None,
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
47
dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr',
penalty='l2', random_state=0, solver='liblinear', tol=0.0001,
verbose=0),
'pipeline-1_clf_C': 0.001,
'pipeline-1_clf_class_weight': None, 'pipeline-1mclf dual': False,
[...]
'pipeline-1_sc_with_std': True,
'pipeline-2': Pipeline(steps=[('sc', StandardScaler(copy=True, with_
mean=True, with_std=True)), ('clf', KNeighborsClassifier(algorithm='au
to', leaf_size=30, metric='minkowski',
metric_params=None, n_neighbors=1, p=2, w='uniform'))]),
'p-2_cl”: KNC(algorithm='auto', leaf_ size=30, met='miski',
met_ps=None, n_neighbors=1, p=2, w='uniform'),
'p-2_cl algorithm': 'auto',
[...]
'p-2_sc with_std': T}
Bergantung pada nilai yang dikembalikan oleh metode get_ps, Anda sekarang tahu cara
mengakses atribut pengklasifikasi individu. Mari kita bekerja dengan parameter regularisasi
terbalik C dari pengklasifikasi regresi logistik dan kedalaman pohon keputusan melalui
pencarian grid untuk tujuan demonstrasi. Mari kita lihat:
>>> from sklearn.grid_search import GdSearchCV
>>> params = {'dtreecl_max_depth': [0.1, .02],
... 'p-1 clf C': [0.001, 0.1, 100.0]}
>>> gd = GdSearchCV(estimator=mv_cl,
... param_grid=params,
... cv=10,
... scoring='roc_auc')
>>> [Link](X_tra, y_tra)
Setelah pencarian grid selesai, kami dapat mencetak kombinasi nilai parameter hiper yang
berbeda dan skor R_C AC rata-rata yang dihitung melalui validasi silang 10 kali lipat. Kodenya
adalah sebagai berikut:
>>> for params, mean_sc, scores in grid.grid_sc_:
... print("%0.3f+/-%0.2f %r"
... % (mean_sc, [Link]() / 2, params))
0.967+/-0.05 {'p-1_cl_C': 0.001, 'dtreeclassifier_ma_depth': 1}
0.967+/-0.05 {'p-1_cl_C': 0.1, 'dtreeclassifier_ma_ depth': 1}
1.000+/-0.00 {'p-1_cl_C': 100.0, 'dtreeclassifier_ma_depth': 1}
0.967+/-0.05 {'p-1_cl_C': 0.001, 'dtreeclassifier_ma_depth': 2}
0.967+/-0.05 {'p-1_cl_C': 0.1, 'dtreeclassifier_ma_ depth': 2}
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
48
Pertanyaan
1. Jelaskan bagaimana menggabungkan model yang berbeda secara rinci.
2. Apa tujuan dan manfaat dari menggabungkan model?
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])
49
DAFTAR PUSTAKA
[Link]
[Link]
[Link]
[Link]
Kadir, A. 2018. Dasar Logika Pemrograman Komputer. Cetakan Kedua. Elexmedia Komputindo.
Algoritma Machine Learning Dengan Python (Dr. Joseph Teguh Santoso, [Link])