Apabila anda mendengar orang bercakap tentang pembelajaran mesin, adakah anda hanya mempunyai beberapa pemahaman yang kabur tentang apa yang dimaksudkan? Adakah anda bosan mengangguk ketika bercakap dengan rakan sekerja anda? Mari kita ubah!
Buku panduan ini ditujukan kepada semua rakan yang ingin tahu tentang pembelajaran mesin tetapi tidak tahu bagaimana untuk memulakan. Saya rasa ramai yang telah membaca terma Wikipedia tentang pembelajaran mesin yang tidak baik dan merasa kecewa kerana tidak ada yang dapat memberikan penjelasan peringkat tinggi.
Tujuan artikel ini adalah agar mudah diakses oleh orang ramai, yang bermaksud terdapat banyak generalisasi. Tetapi siapa yang peduli?
Konsep pembelajaran mesin berpendapat bahawa anda tidak perlu menulis kod program khusus untuk masalah yang belum diselesaikan, algoritma genetik (generic algorithms) dapat menghasilkan jawapan yang menarik untuk anda dalam set data. Untuk algoritma genetik, anda tidak perlu mengkod, tetapi memasukkan data, dan ia akan membina logiknya sendiri di atas data.
Sebagai contoh, terdapat satu jenis algoritma yang dipanggil algoritma pemisahan yang boleh membahagikan data ke dalam kumpulan yang berbeza. Algoritma pemisahan yang digunakan untuk mengenali nombor tulisan tangan, tanpa mengubah satu baris kod, boleh digunakan untuk membahagikan e-mel ke dalam e-mel spam dan e-mel biasa. Algoritma tidak berubah, tetapi data latihan yang dimasukkan berubah, jadi ia menghasilkan logik pemisahan yang berbeza.
Algoritma pembelajaran mesin adalah kotak hitam yang boleh digunakan untuk menyelesaikan banyak masalah klasifikasi yang berbeza.
Pembelajaran mesin terhad adalah istilah yang merangkumi banyak algoritma genetik yang serupa.
Anda boleh menganggap algoritma pembelajaran mesin terbahagi kepada dua kategori utama: pembelajaran yang dipantau (Supervised Learning) dan pembelajaran yang tidak dipantau (Unsupervised Learning).
Katakanlah anda seorang ejen hartanah dan perniagaan anda semakin besar, jadi anda mengupah sekumpulan pelajar magang untuk membantu anda. Tetapi masalahnya adalah anda boleh melihat rumah anda dan mengetahui berapa nilainya, pelajar magang tidak mempunyai pengalaman dan tidak tahu bagaimana untuk menilai.
Untuk membantu pelajar magang anda (mungkin untuk membebaskan diri anda untuk bercuti), anda memutuskan untuk menulis perisian kecil untuk menilai nilai rumah di kawasan anda berdasarkan faktor-faktor seperti saiz rumah, lokasi dan harga pembelian rumah yang serupa.
Anda menulis setiap urus niaga rumah di bandar selama tiga bulan, dan setiap satu anda merakam perincian panjang mengenai jumlah bilik tidur, saiz rumah, plot, dan lain-lain.
Ini adalah kumpulan data latihan yoga kami.
Kami akan menggunakan data latihan ini untuk menulis program untuk menganggarkan nilai rumah lain di kawasan ini:
Ini dipanggil pembelajaran pengawasan. Anda sudah tahu harga jual setiap rumah, dengan kata lain, anda tahu jawapan kepada soalan dan boleh mencari semula logik penyelesaian.
Untuk menulis perisian, anda akan memasukkan data latihan yang mengandungi setiap set hartanah ke dalam algoritma pembelajaran mesin anda. Algoritma cuba mengetahui operasi mana yang harus digunakan untuk mengeluarkan nombor harga.
Ini seperti latihan matematik, semua simbol operasi dalam formula telah dipadamkan:
Seorang pelajar jahat telah memadamkan semua simbol matematik pada jawapan guru.
Jika anda melihat soalan-soalan ini, adakah anda dapat memahami masalah matematik yang terdapat dalam ujian ini?
Dalam pembelajaran pengawasan, anda membiarkan komputer mengira hubungan antara nombor untuk anda. Dan apabila anda tahu kaedah matematik yang diperlukan untuk menyelesaikan masalah tertentu seperti ini, anda boleh menyelesaikan masalah lain yang sama.
Mari kita kembali ke contoh broker hartanah di awal. Jika anda tidak tahu berapa harga untuk menjual setiap rumah. Walaupun anda hanya tahu saiz rumah, lokasi, dan lain-lain, anda boleh membuat bunga yang keren. Ini dipanggil pembelajaran tanpa pengawasan.
Walaupun anda tidak mahu meramalkan data yang tidak diketahui (seperti harga), anda boleh menggunakan pembelajaran mesin untuk melakukan sesuatu yang menarik.
Ia agak seperti seseorang yang memberikan anda sekeping kertas dengan senarai nombor dan berkata kepada anda, "Eh, saya tidak tahu apa maksud nombor ini, mungkin anda boleh mencari peraturan daripadanya, atau anda boleh mengelaskannya, atau apa-apa lagi - semoga berjaya!"
Apa yang perlu anda lakukan dengan data ini? Pertama, anda boleh menggunakan algoritma untuk memisahkan segmen pasaran yang berbeza secara automatik dari data tersebut. Mungkin anda akan mendapati pembeli rumah berhampiran universiti lebih suka rumah kecil dengan banyak bilik tidur, sementara pembeli rumah di pinggir bandar lebih suka rumah besar dengan tiga bilik tidur. Maklumat ini boleh membantu pemasaran anda secara langsung.
Anda juga boleh melakukan sesuatu yang hebat, dengan mencari secara automatik data harga rumah yang berbeza, iaitu nilai yang berbeza dengan data lain. Harta yang terdapat dalam kumpulan ini mungkin bangunan tinggi, dan anda boleh memfokuskan penjual terbaik di kawasan ini kerana mereka mendapat bayaran lebih tinggi.
Kami akan membincangkan pembelajaran pengawasan di bahagian seterusnya, tetapi ini bukan kerana pembelajaran tanpa pengawasan tidak berguna atau tidak berguna; sebenarnya, pembelajaran tanpa pengawasan menjadi semakin penting kerana algoritma bertambah baik dan tidak perlu menghubungkan data dengan jawapan yang betul.
Jika anda seorang pelajar, sila lihat: terdapat banyak jenis algoritma pembelajaran mesin lain.
Memang hebat, tetapi adakah menilai harga rumah boleh dianggap sebagai belajar?
Sebagai manusia, otak anda boleh menangani kebanyakan keadaan dan tidak mempunyai arahan yang jelas untuk belajar bagaimana untuk menangani keadaan tersebut. Jika anda telah lama menjadi ejen hartanah, anda akan mempunyai perasaan yang sangat naluri tentang harga yang sesuai untuk hartanah, bagaimana ia akan dipasarkan dengan baik, dan pelanggan yang akan berminat, dan sebagainya. Tujuan penyelidikan AI yang kuat adalah untuk dapat meniru keupayaan ini dengan komputer.
Tetapi algoritma pembelajaran mesin semasa tidak begitu baik kerana mereka hanya dapat memberi tumpuan kepada masalah yang sangat spesifik dan terhad. Mungkin dalam kes ini, algoritma pembelajaran mesin yang lebih tepat adalah untuk mencari persamaan untuk menyelesaikan masalah tertentu berdasarkan data contoh yang sedikit.
Malangnya, mesin penapis mencari persamaan untuk menyelesaikan masalah tertentu berdasarkan data contoh yang kecil. Nama penapis itu terlalu buruk. Jadi akhirnya kami menggantikannya dengan pembelajaran mesin penapis.
Sudah tentu, jika anda membaca artikel ini dalam tempoh 50 tahun, maka kita telah menghasilkan algoritma kecerdasan buatan yang kuat, dan artikel ini kelihatan seperti barang antik.
Mari kita tulis kod!
Bagaimana anda akan menulis prosedur untuk menilai harga rumah dalam contoh sebelumnya?
Jika anda tidak tahu apa-apa tentang pembelajaran mesin, kemungkinan besar anda akan cuba menulis beberapa peraturan asas untuk menilai harga rumah, seperti berikut:
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
Mungkin ada sedikit hasil jika anda sibuk seperti ini selama beberapa jam, tetapi program anda tidak akan pernah sempurna dan sukar untuk dikekalkan apabila harga berubah.
Tidakkah lebih baik jika komputer dapat mencari cara untuk melaksanakan fungsi tersebut? Asalkan nombor harga rumah yang dikembalikan adalah betul, siapa yang peduli apa yang dilakukan oleh fungsi tersebut?
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <computer, plz do some math for me>
return price
Satu sudut pandang untuk mempertimbangkan masalah ini ialah melihat harga rumah sebagai satu pinggan piring yang lazat, yang terdiri daripada jumlah bilik tidur, kawasan dan lokasi. Jika anda dapat mengira berapa banyak setiap komponen mempengaruhi harga akhir, mungkin anda boleh mendapatkan peratusan tertentu bahan-bahan yang bercampur untuk membentuk harga akhir.
Ini boleh meringkaskan program asal anda (semua adalah frustasi jika lain-lain) menjadi sesuatu yang 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 nombor ajaib yang ditandakan dengan huruf besar. 841231951398213, 1231.1231231, 2.3242341421, dan 201.23432095. Mereka dipanggil berat badan. Jika kita dapat mencari berat badan sempurna untuk setiap rumah, fungsi kita dapat meramalkan semua harga rumah!
Satu cara yang mudah untuk mencari berat yang paling sesuai adalah sebagai berikut:
Langkah 1:
Pertama, letakkan setiap berat pada 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:
Mengambil setiap hartanah ke dalam operasi fungsi anda untuk memeriksa sejauh mana nilai anggaran berbeza dengan harga yang betul:
Menggunakan program anda untuk meramalkan harga rumah.
Sebagai contoh, set hartanah pertama dalam jadual di atas adalah $ 250,000 yang sebenarnya diperdagangkan, dan nilai fungsi anda adalah $ 178,000, dan set hartanah ini adalah $ 72,000 yang kurang.
Kemudian, letakkan nilai deviasi pertimbangan persegi bagi setiap set harta tanah dalam dataset anda. Katakan dataset anda mempunyai 500 transaksi harta tanah, dengan nilai deviasi pertimbangan persegi untuk jumlah $ 86,123,373. Ini mencerminkan tahap ketegangan yang betul pada fungsi anda sekarang.
Sekarang, bagi nilai keseluruhan dengan 500, anda akan mendapat nilai purata dari perpindahan perkiraan untuk setiap set hartanah; sebut nilai purata ini sebagai kos fungsi anda.
Jika anda boleh menyesuaikan berat supaya kos ini menjadi 0, fungsi anda sempurna. Ia bermakna, berdasarkan data yang dimasukkan, program anda akan menilai setiap urus niaga hartanah dengan cara yang sama.
Langkah 3:
Ulangi langkah 2, cuba semua kombinasi nilai berat yang mungkin. Kombinasi mana yang membuat kos paling dekat dengan 0, itulah yang akan anda gunakan, dan selagi anda mencari kombinasi seperti itu, masalah akan diselesaikan!
Pikiran mengganggu masa
Ia sangat mudah, kan? Fikirkan apa yang anda lakukan tadi. Anda mendapatkan beberapa data, masukkan mereka ke dalam tiga langkah mudah umum, dan akhirnya anda mendapat fungsi yang boleh menilai rumah di kawasan anda. Tetapi fakta berikut mungkin mengelirukan fikiran anda:
1. Dalam tempoh 40 tahun yang lalu, kajian dalam pelbagai bidang (seperti linguistik/terjemahan) menunjukkan bahawa algoritma pembelajaran seperti perkakas data bergetar (kata-kata yang saya buat) telah mengalahkan kaedah yang memerlukan penggunaan peraturan yang jelas dengan menggunakan orang sebenar.
2.你最后写出的函数真是笨,它甚至不知道什么是“面积”和“卧室数”。它知道的只是搅动,改变数字来得到正确的答案。
3.很可能你都不知道为何一组特殊的权重值能起效。所以你只是写出了一个你实际上并不理解却能证明的函数。
4.试想一下,你的程序里没有类似“面积”和“卧室数”这样的参数,而是接受了一组数字。假设每个数字代表了你车顶安装的摄像头捕捉的画面中的一个像素,再将预测的输出不称为“价格”而是叫做“方向盘转动度数”,这样你就得到了一个程序可以自动操纵你的汽车了!
Ia sangat gila, bukan?
Apa yang berlaku dengan setiap digit pada langkah 3?
Baiklah, tentu saja anda tidak boleh mencuba semua nilai berat yang mungkin untuk mencari kombinasi yang terbaik. Untuk mengelakkan ini berlaku, ahli matematik telah menemui banyak cara pintar untuk mencari nilai berat yang baik dengan cepat dan tanpa banyak usaha. Berikut adalah salah satu: Pertama, tulis persamaan mudah untuk menunjukkan langkah 2:
Ini adalah fungsi kos anda.
Kemudian, mari kita tulis semula istilah matematik pembelajaran mesin persamaan yang sama (Anda boleh mengabaikan mereka sekarang):
θ menunjukkan nilai berat semasa. J ((θ) bermaksud harga yang setara dengan nilai berat semasa.
Persamaan ini menunjukkan betapa besar kesesuaian kami dengan nilai berat semasa.
Jika semua nilai bobot yang mungkin diberikan kepada jumlah bilik tidur dan kawasan ditunjukkan dalam bentuk grafik, kita akan mendapat grafik yang serupa dengan gambar di bawah:
Grafik fungsi kos adalah seperti mangkuk.
Titik paling rendah dalam grafik biru adalah titik yang paling rendah kosnya. Titik paling tinggi bermaksud titik paling tinggi. Jadi, jika kita dapat mencari titik terendah dalam grafik yang membawa kita ke titik ini, kita akan mendapat jawapan!
Oleh itu, kita hanya perlu menyesuaikan berat badan supaya kita dapat melangkah ke titik terendah di grafik. Jika penyesuaian kecil untuk berat badan terus membuat kita terus bergerak ke titik terendah, akhirnya kita boleh sampai ke sana tanpa mencuba berat badan yang terlalu banyak.
Jika anda masih ingat sedikit matematik, anda mungkin ingat jika anda mencari fungsi, hasilnya akan memberitahu anda kemiringan fungsi pada mana-mana titik. Dengan kata lain, untuk titik yang diberikan pada rajah, ia memberitahu kita bahawa jalan itu adalah ke bawah. Kita boleh menggunakan ini untuk bergerak ke bawah.
Oleh itu, jika kita mengalihkan fungsi harga terhadap setiap berat, maka kita boleh mengurangkan nilai itu dari setiap berat. Ini akan membawa kita lebih dekat ke bawah gunung. Lakukan ini dan akhirnya kita akan sampai ke bawah dan mendapat nilai maksimum berat.
Kaedah ini untuk mencari berat yang optimum dipanggil penurunan gradien kuantiti, dan di atas adalah gambaran tinggi tentangnya. Jika anda ingin memahami perincian, jangan takut, teruskan dengan mendalam.http://hbfs.wordpress.com/2012/04/24/introduction-to-gradient-descent/Saya tidak mahu mengatakannya.
Apabila anda menggunakan perpustakaan algoritma pembelajaran mesin untuk menyelesaikan masalah sebenar, semua ini sudah siap untuk anda. Tetapi memahami beberapa butiran tertentu selalu berguna.
Apa lagi yang anda terlepas?
Algoritma tiga langkah yang saya terangkan di atas dipanggil regresi multilinear. Anda menganggarkan persamaan dengan mencari garis lurus yang dapat menampung semua titik data harga rumah. Kemudian anda menggunakan persamaan ini untuk menganggarkan harga rumah yang tidak pernah dilihat berdasarkan lokasi harga rumah mungkin muncul pada garis lurus anda.
Walau bagaimanapun, kaedah yang saya tunjukkan kepada anda mungkin berkesan dalam keadaan yang mudah, tetapi ia tidak akan berfungsi dalam semua keadaan. Salah satu sebabnya ialah harga rumah tidak akan selalu mengikut garis lurus yang berterusan.
Tetapi, untungnya, terdapat banyak cara untuk menangani keadaan ini. Untuk data bukan linear, banyak jenis algoritma pembelajaran mesin lain boleh diuruskan (seperti rangkaian saraf atau mesin vektor nukleus). Terdapat juga banyak cara untuk menggunakan regresi linear dengan lebih fleksibel, memikirkan untuk menyesuaikan dengan garis yang lebih kompleks. Dalam semua keadaan, idea asas mencari berat tertinggi masih berlaku.
Juga, saya mengabaikan konsep yang terlalu sesuai. Sangat mudah untuk menemui satu set berat yang dapat meramalkan harga rumah yang sempurna dalam dataset asal anda, tetapi tidak boleh meramalkan rumah baru di luar dataset asal anda. Terdapat banyak penyelesaian untuk keadaan ini (seperti merumuskan dan menggunakan dataset pengesahan silang). Belajar bagaimana menangani masalah ini adalah penting untuk pembelajaran mesin yang lancar.
Dalam erti kata lain, konsep asasnya sangat mudah dan memerlukan beberapa kemahiran dan pengalaman untuk menggunakan pembelajaran mesin untuk mendapatkan hasil yang berguna. Tetapi ini adalah kemahiran yang boleh dipelajari oleh setiap pemaju.
Sebaik sahaja anda mula memahami bahawa teknik pembelajaran mesin mudah digunakan untuk menyelesaikan masalah yang nampaknya sukar (seperti pengenalan tulisan tangan), anda akan merasakan bahawa anda boleh menggunakan pembelajaran mesin untuk menyelesaikan masalah apa pun dengan data yang mencukupi. Hanya dengan memasukkan data, anda dapat melihat persamaan yang sesuai dengan data seperti komputer mengubahnya.
Tetapi penting untuk diingat bahawa pembelajaran mesin hanya boleh digunakan untuk masalah yang dapat diselesaikan dengan data yang anda miliki.
Sebagai contoh, jika anda membina model untuk meramalkan harga rumah berdasarkan jumlah tanaman dalam setiap set rumah, ia tidak akan pernah berjaya. Tidak ada hubungan antara jumlah tanaman dalam rumah dan harga rumah. Oleh itu, tidak kira bagaimana ia cuba, komputer tidak dapat menyimpulkan hubungan antara kedua-duanya.
Anda hanya boleh memodelkan hubungan yang sebenarnya wujud.
Saya berpendapat bahawa masalah terbesar dengan pembelajaran mesin pada masa ini adalah bahawa ia aktif di kalangan organisasi penyelidikan akademik dan perniagaan. Tidak banyak bahan pembelajaran yang mudah difahami untuk orang luar yang ingin memahami secara amnya dan tidak ingin menjadi pakar. Tetapi keadaan ini bertambah baik setiap hari.
Kursus pembelajaran mesin percuma Prof Andrew Ng di Coursera sangat bagus. Saya sangat mengesyorkan untuk mulakan. Sesiapa yang mempunyai ijazah dalam sains komputer atau ingat sedikit matematik boleh faham.
Selain itu, anda juga boleh memuat turun dan memasang SciKit-Learn untuk menguji beribu-ribu algoritma pembelajaran mesin. Ia adalah rangka kerja Python yang mempunyai versi kotak hitam untuk semua algoritma standard.
Dipindahkan dari Python developer
okluoquanIni contoh yang diulangi oleh Prof. Nanda setiap kali dia memulakan kelas baru.
kereta apiJika anda mempunyai nilai yang sama, anda akan mempunyai nilai yang sama.