Ketika Anda mendengar orang-orang berbicara tentang pembelajaran mesin, apakah Anda hanya memiliki beberapa pemahaman yang kabur tentang apa artinya? Apakah Anda bosan hanya mengangguk ketika berbicara dengan rekan kerja? Mari kita ubah!
Panduan ini ditujukan untuk semua teman yang ingin tahu tentang pembelajaran mesin tetapi tidak tahu bagaimana untuk memulai. Saya kira banyak dari Anda telah membaca artikel Wikipedia tentang pembelajaran mesin dan merasa frustrasi karena tidak ada yang dapat memberikan penjelasan tingkat tinggi.
Tujuan dari artikel ini adalah agar mudah diakses, yang berarti ada banyak generalisasi. Tapi siapa yang peduli?
Konsep pembelajaran mesin adalah bahwa Anda tidak perlu menulis kode program khusus untuk masalah yang belum diselesaikan, algoritma generik dapat menghasilkan jawaban yang menarik bagi Anda dari dataset. Untuk algoritma genetik, Anda tidak mengkode, tetapi memasukkan data, dan itu akan membangun logika sendiri di atas data.
Sebagai contoh, ada algoritma yang disebut algoritma pembagian yang dapat membagi data menjadi berbagai kelompok. Algoritma pembagian yang digunakan untuk mengenali angka tulisan tangan dapat digunakan untuk membagi email menjadi spam dan surat biasa tanpa mengubah satu baris kode. Algoritma tidak berubah, tetapi data pelatihan yang dimasukkan berubah, sehingga menghasilkan logika pembagian yang berbeda.
Algoritma pembelajaran mesin adalah kotak hitam yang dapat digunakan untuk memecahkan banyak masalah klasifikasi yang berbeda.
Mesin belajar acak adalah istilah yang mencakup banyak algoritma genetik yang serupa.
Anda dapat menganggap algoritma pembelajaran mesin terbagi menjadi dua kategori besar: pembelajaran yang diawasi (Supervised Learning) dan pembelajaran yang tidak diawasi (Unsupervised Learning).
Misalkan Anda seorang agen real estat dan bisnis Anda semakin besar, jadi Anda mempekerjakan sekelompok magang untuk membantu Anda. Tetapi masalahnya adalah Anda dapat mengetahui berapa nilainya rumah Anda dari sekilas, dan para magang tidak memiliki pengalaman dan tidak tahu cara menilai.
Untuk membantu magang Anda (mungkin untuk membebaskan diri Anda untuk berlibur), Anda memutuskan untuk menulis sebuah perangkat lunak kecil yang dapat menilai nilai rumah di daerah Anda berdasarkan faktor-faktor seperti ukuran rumah, lokasi, dan harga jual rumah serupa.
Anda menuliskan setiap transaksi rumah di kota selama tiga bulan terakhir, dan pada setiap transaksi Anda mencatat serangkaian detail, seperti jumlah kamar tidur, ukuran rumah, lokasi, dll.
Ini adalah kumpulan data pelatihan yoga kami.
Kami akan menggunakan data pelatihan ini untuk menulis program untuk memperkirakan nilai rumah lain di daerah ini:
Ini disebut pembelajaran pengawasan. Anda sudah tahu harga jual setiap rumah, dengan kata lain, Anda tahu jawaban atas pertanyaan dan dapat mencari kembali logika solusi.
Untuk menulis perangkat lunak, Anda akan memasukkan data pelatihan yang berisi setiap set properti ke dalam algoritma pembelajaran mesin Anda. Algoritma mencoba mencari tahu operasi apa yang harus digunakan untuk menghasilkan angka harga.
Ini seperti latihan matematika, dimana semua simbol operasi di dalam rumus dihapus:
Seorang siswa yang licik menghapus semua simbol aritmatika dari jawaban guru.
Setelah melihat pertanyaan-pertanyaan ini, apakah Anda dapat memahami masalah matematika apa yang ada dalam tes ini? Anda tahu apa yang harus Anda lakukan pada baris angka di sebelah kiri untuk mendapatkan jawaban di sebelah kanan.
Dalam pembelajaran yang diawasi, Anda membiarkan komputer menghitung hubungan antara angka-angka untuk Anda. Dan begitu Anda tahu metode matematika yang diperlukan untuk memecahkan masalah tertentu seperti ini, Anda dapat menjawab masalah lain yang sama.
Mari kita kembali ke contoh agen real estat di awal. Jika Anda tidak tahu berapa harga untuk menjual setiap rumah, bahkan jika Anda hanya tahu ukuran rumah, lokasi, dan lain-lain, Anda bisa membuat model yang keren. Ini disebut pembelajaran tanpa pengawasan.
Bahkan jika Anda tidak ingin memprediksi data yang tidak diketahui (misalnya harga), Anda dapat menggunakan pembelajaran mesin untuk melakukan sesuatu yang menarik.
Ini seperti seseorang memberikan Anda selembar kertas berisi banyak angka dan berkata kepada Anda, "Hei, saya tidak tahu apa artinya angka-angka ini, mungkin Anda bisa menemukan pola atau mengelompokkannya, atau apa pun - semoga berhasil!"
Apa yang harus Anda lakukan dengan data ini? Pertama, Anda dapat menggunakan algoritma untuk secara otomatis memisahkan segmen pasar yang berbeda dari data tersebut. Mungkin Anda akan menemukan bahwa pembeli rumah di dekat perguruan tinggi lebih menyukai rumah berukuran kecil dengan banyak kamar tidur, sedangkan pembeli rumah di pinggiran kota lebih menyukai rumah berukuran besar dengan tiga kamar tidur. Informasi ini dapat langsung membantu pemasaran Anda.
Anda juga bisa melakukan hal yang keren, dengan otomatis menemukan data harga apartemen yang berbeda dari data lainnya. Properti yang berada di dalam kelompok ini mungkin gedung tinggi, dan Anda dapat memusatkan penjual terbaik di daerah ini karena komisi mereka lebih tinggi.
Kami akan membahas pembelajaran yang diawasi di bagian selanjutnya, tetapi bukan karena pembelajaran yang tidak diawasi tidak berguna atau tidak ada gunanya; sebenarnya, pembelajaran yang tidak diawasi menjadi semakin penting karena peningkatan algoritme yang tidak memerlukan hubungan antara data dan jawaban yang benar.
Ada banyak jenis algoritma pembelajaran mesin lainnya. Tetapi ini sangat mudah dimengerti di sekolah dasar.
Sangat keren, tetapi apakah menilai harga rumah benar-benar dianggap sebagai belajar dari belajar?
Sebagai manusia, otak Anda dapat menangani sebagian besar situasi, dan tanpa instruksi yang jelas, Anda juga dapat belajar bagaimana menangani situasi tersebut. Jika Anda telah bekerja sebagai broker real estat untuk waktu yang lama, Anda akan memiliki perasaan intuitif tentang harga properti yang tepat, bagaimana memasarkannya dengan baik, dan pelanggan mana yang akan tertarik, dan sebagainya. Tujuan dari penelitian AI yang kuat adalah untuk dapat meniru kemampuan ini dengan komputer.
Namun, algoritma pembelajaran mesin saat ini belum begitu baik karena mereka hanya dapat berfokus pada masalah yang sangat spesifik dan terbatas. Mungkin dalam hal ini, definisi yang lebih tepat dari algoritma pembelajaran mesin adalah menemukan persamaan untuk memecahkan masalah tertentu berdasarkan data contoh yang sedikit.
Sayangnya, mesin pencari menemukan persamaan untuk memecahkan masalah tertentu berdasarkan sedikit data contoh. Nama ini terlalu buruk. Jadi akhirnya kita menggantikannya dengan mesin pencari pembelajaran.
Tentu saja, jika Anda membaca artikel ini 50 tahun ke depan, maka kita telah membuat algoritma AI yang kuat, dan artikel ini tampak seperti barang antik.
Mari kita tulis kode!
Bagaimana Anda akan menulis prosedur untuk menilai harga rumah di contoh sebelumnya?
Jika Anda tidak tahu apa-apa tentang pembelajaran mesin, kemungkinan besar Anda akan mencoba menulis beberapa aturan dasar untuk menilai harga rumah, seperti:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# In my area, the average house costs $200 per sqft
price_per_sqft = 200
if neighborhood == "hipsterton":
# but some areas cost a bit more
price_per_sqft = 400
elif neighborhood == "skid row":
# and some areas cost less
price_per_sqft = 100
# start with a base price estimate based on how big the place is
price = price_per_sqft * sqft
# now adjust our estimate based on the number of bedrooms
if num_of_bedrooms == 0:
# Studio apartments are cheap
price = price — 20000
else:
# places with more bedrooms are usually
# more valuable
price = price + (num_of_bedrooms * 1000)
return price
Jika Anda sibuk seperti ini selama beberapa jam, Anda mungkin akan mendapatkan hasil yang sedikit, tetapi program Anda tidak akan pernah sempurna, dan sulit dipertahankan ketika harga berubah.
Apakah tidak lebih baik jika komputer dapat menemukan cara untuk mengimplementasikan fungsi tersebut?
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <computer, plz do some math for me>
return price
Salah satu sudut pandang untuk mempertimbangkan masalah ini adalah dengan menganggap harga rumah sebagai sepiring nasi yang lezat, yang terdiri dari jumlah kamar tidur, luas, dan lokasi. Jika Anda dapat menghitung seberapa besar pengaruh masing-masing komponen pada harga akhir, Anda mungkin dapat mendapatkan proporsi tertentu dari berbagai bahan yang dicampur untuk membentuk harga akhir.
Dengan cara ini, Anda dapat menyederhanakan program awal Anda (semua adalah pernyataan if else yang gila) menjadi sesuatu seperti ini:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * .841231951398213
# and a big pinch of that
price += sqft * 1231.1231231
# maybe a handful of this
price += neighborhood * 2.3242341421
# and finally, just a little extra salt for good measure
price += 201.23432095
return price
Perhatikan angka-angka ajaib yang ditandai dengan huruf tebal. 841231951398213, 1231.1231231, 2.3242341421, dan 201.23432095. Mereka disebut berat. Jika kita dapat menemukan berat sempurna yang berlaku untuk setiap rumah, fungsi kita dapat memprediksi semua harga rumah!
Salah satu cara untuk menemukan bobot yang optimal adalah sebagai berikut:
Langkah 1:
Pertama, masing-masing bobot disetel menjadi 1.0:
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# a little pinch of this
price += num_of_bedrooms * 1.0
# and a big pinch of that
price += sqft * 1.0
# maybe a handful of this
price += neighborhood * 1.0
# and finally, just a little extra salt for good measure
price += 1.0
return price
Langkah 2:
Membawa setiap properti ke dalam operasi fungsi Anda dan memeriksa sejauh mana nilai estimasi menyimpang dari harga yang benar:
Menggunakan program Anda untuk memprediksi harga rumah.
Sebagai contoh: properti pertama dalam tabel di atas sebenarnya dijual dengan harga $250.000, dan nilai fungsi Anda adalah $178.000, yang berarti Anda kehilangan $72.000.
Selanjutnya, perhitungkan nilai deviasi dari tiap set properti di dataset Anda. Misalkan dataset memiliki 500 transaksi properti, nilai deviasi dari nilai deviasi dari nilai deviasi dari dataset tersebut adalah $86,123,373.
Sekarang, bagi nilai total dengan 500 untuk mendapatkan nilai rata-rata dari deviasi dari estimasi per properti. Anggaplah nilai rata-rata ini sebagai biaya dari fungsi Anda.
Jika Anda dapat menyesuaikan bobot sehingga biaya ini menjadi 0, fungsi Anda sempurna. Itu berarti bahwa berdasarkan data yang dimasukkan, program Anda akan memperkirakan setiap transaksi real estat dengan cara yang sama. Dan itulah tujuan kami untuk mencoba bobot yang berbeda untuk membuat biaya setinggi mungkin.
Langkah 3:
Terus-menerus ulangi langkah 2, cobalah semua kombinasi bobot yang mungkin. Kombinasi mana yang membuat biaya paling dekat dengan nol, itulah yang akan Anda gunakan, dan setelah Anda menemukan kombinasi seperti itu, masalah akan diselesaikan!
Pikiran Mengganggu Waktu
Ini sangat sederhana, bukan? Pikirkan tentang apa yang baru saja Anda lakukan. Anda mendapatkan beberapa data, masukkan ke dalam tiga langkah sederhana yang umum, dan akhirnya Anda mendapatkan fungsi yang dapat memperkirakan rumah di wilayah Anda. Tapi fakta-fakta di bawah ini mungkin mengganggu pikiran Anda:
1. Selama 40 tahun terakhir, penelitian di banyak bidang (misalnya linguistik/terjemahan) menunjukkan bahwa algoritma pembelajaran yang mirip dengan "data monster" (kata yang saya buat) telah mengalahkan metode yang membutuhkan aturan yang jelas dari orang-orang nyata.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
Ini gila, kan?
Apa yang terjadi dengan setiap digit di langkah 3?
Baiklah, tentu saja Anda tidak bisa mencoba semua nilai bobot yang mungkin untuk menemukan kombinasi yang terbaik. Untuk menghindari hal ini, para matematikawan telah menemukan banyak cara cerdas untuk menemukan nilai bobot yang baik dengan cepat dan tanpa harus mencoba terlalu banyak. Berikut adalah salah satunya: Pertama, tulislah persamaan sederhana yang mewakili langkah 2 di atas:
Ini adalah fungsi biaya Anda.
Kemudian, mari kita menulis ulang istilah matematika pembelajaran mesin dari persamaan yang sama (untuk saat ini Anda dapat mengabaikan mereka):
θ menunjukkan nilai bobot saat ini. J ((θ) berarti harga yang sesuai dengan nilai bobot saat ini.
Persamaan ini menunjukkan seberapa besar perhitungan kami menyimpang dari nilai bobot saat ini.
Jika semua nilai bobot yang mungkin diberikan untuk jumlah dan luas kamar tidur ditampilkan dalam bentuk grafik, kita akan mendapatkan grafik yang mirip dengan gambar di bawah ini:
Fungsi biaya digambarkan sebagai sebuah mangkuk.
Titik terendah dalam gambar yang berwarna biru adalah titik terendah biaya. Titik terendah berarti program kami paling sedikit menyimpang. Titik teratas berarti paling banyak menyimpang. Jadi, jika kita dapat menemukan titik terendah dalam gambar yang membawa kita ke titik terendah, kita akan menemukan jawabannya!
Oleh karena itu, kita hanya perlu menyesuaikan bobot agar kita dapat melangkah ke titik terendah di grafik. Jika penyesuaian kecil terhadap bobot terus membuat kita bergerak ke titik terendah, maka pada akhirnya kita bisa sampai di sana tanpa mencoba terlalu banyak bobot.
Jika Anda masih ingat sedikit tentang matematika, Anda mungkin ingat bahwa jika Anda mencari fungsi, hasilnya akan memberi tahu Anda kemiringan fungsi pada titik manapun. Dengan kata lain, untuk titik yang diberikan pada grafik, itu memberi tahu kita bahwa jalannya menurun. Kita dapat menggunakan ini untuk bergerak ke bawah.
Jadi, jika kita mengacu pada fungsi biaya untuk setiap bobot, maka kita dapat mengurangi nilai dari setiap bobot. Ini membuat kita lebih dekat ke bawah. Terus lakukan ini, dan akhirnya kita akan sampai ke bawah dan mendapatkan nilai optimal dari bobot.
Cara ini untuk menemukan bobot yang optimal disebut penurunan gradien massal, dan di atas ini adalah rangkuman tentang tingginya. Jika Anda ingin memahami detailnya, jangan takut, terus masuk lebih dalam.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Tidak, tidak.
Semua ini sudah siap untuk Anda ketika Anda menggunakan perpustakaan algoritma pembelajaran mesin untuk memecahkan masalah nyata.
Apa lagi yang Anda lewatkan?
Algoritma tiga langkah yang saya jelaskan di atas disebut regresi multilinear. Anda memperkirakan persamaan dengan mencari garis lurus yang dapat mencocokkan semua titik data harga rumah. Kemudian Anda menggunakan persamaan ini untuk memperkirakan harga rumah yang belum pernah dilihat berdasarkan lokasi harga rumah yang mungkin muncul di garis lurus Anda.
Namun, metode yang saya tunjukkan kepada Anda mungkin berhasil dalam situasi sederhana, tetapi tidak akan berhasil dalam semua situasi. Salah satu alasannya adalah bahwa harga rumah tidak akan selalu mengikuti garis lurus yang terus menerus.
Namun, untungnya, ada banyak cara untuk menangani situasi ini. Untuk data non-linier, banyak jenis algoritma pembelajaran mesin lainnya dapat ditangani (seperti jaringan saraf atau mesin vektor inti). Ada banyak cara untuk menggunakan regresi linier dengan lebih fleksibel, dengan gagasan untuk menyesuaikan dengan garis yang lebih kompleks. Dalam semua kasus, gagasan dasar tentang mencari bobot yang paling baik masih berlaku.
Selain itu, saya mengabaikan konsep overfitting. Sangat mudah untuk menemukan satu set bobot yang dapat memprediksi harga rumah dengan sempurna di dataset asli Anda, tetapi tidak dapat memprediksi rumah baru di luar dataset asli Anda. Ada banyak solusi untuk situasi ini (misalnya, perumusan dan penggunaan dataset penyangkalan silang). Belajar bagaimana menangani masalah ini sangat penting untuk menerapkan pembelajaran mesin dengan lancar.
Dengan kata lain, konsep dasarnya sangat sederhana, dan beberapa keterampilan dan pengalaman diperlukan untuk menggunakan pembelajaran mesin untuk mendapatkan hasil yang berguna. Namun, ini adalah keterampilan yang dapat dipelajari oleh setiap pengembang.
Setelah Anda mulai memahami bahwa teknologi pembelajaran mesin dapat dengan mudah diterapkan untuk memecahkan masalah yang tampaknya sulit (seperti pengenalan tulisan tangan), Anda akan memiliki perasaan bahwa Anda dapat menggunakan pembelajaran mesin untuk memecahkan masalah apa pun jika Anda memiliki cukup data. Hanya dengan memasukkan data, Anda dapat melihat persamaan yang sesuai dengan data seperti halnya komputer mengubahnya.
Tapi penting untuk diingat bahwa pembelajaran mesin hanya berlaku untuk masalah yang dapat diatasi dengan data yang Anda miliki.
Sebagai contoh, jika Anda membuat model untuk memprediksi harga rumah berdasarkan jumlah tanaman di setiap rumah, itu tidak akan pernah berhasil. Tidak ada hubungan antara jumlah tanaman di rumah dan harga rumah. Jadi, tidak peduli bagaimana ia mencoba, komputer tidak dapat menyimpulkan hubungan antara keduanya.
Anda hanya dapat memodelkan hubungan yang sebenarnya ada.
Menurut saya, masalah terbesar dengan pembelajaran mesin saat ini adalah bahwa ia terutama aktif di kalangan akademisi dan organisasi penelitian komersial. Tidak banyak materi pembelajaran yang mudah dipahami untuk orang-orang di luar yang ingin memahami secara umum dan bukan ingin menjadi ahli. Namun, situasi ini membaik setiap hari.
Program pembelajaran mesin gratis Prof Andrew Ng di Coursera sangat bagus. Saya sangat merekomendasikan untuk memulainya.
Selain itu, Anda juga dapat mengunduh dan menginstal SciKit-Learn, dan menggunakannya untuk menguji ribuan algoritma pembelajaran mesin. Ini adalah kerangka kerja Python yang memiliki versi kotak hitam untuk semua algoritma standar.
Dipindahkan dari Pengembang Python
okluoquanContoh ini diulang oleh Profesor Yanda setiap kali ia memulai kelas baru.
kereta apiJadi, jika kita menggunakan nilai 2m, kita bisa menggunakan nilai 2m.