1. 這篇文章不會有太多機器學(xué)習(xí)方面的專業(yè)知識
2. 更多的只是學(xué)習(xí)經(jīng)歷與經(jīng)驗分享
入門之前先來讓大家心里看個數(shù)據(jù),機器學(xué)習(xí)工程師在市場上到底值幾斤幾兩呢?我們在拉勾網(wǎng)上搜索 機器學(xué)習(xí)關(guān)鍵字,得到了下面的結(jié)果:
可以看出來,這個待遇在當(dāng)前 IT 行業(yè)中還是很不錯的,究其原因,是由于這個市場目前是供不應(yīng)求,人才緊缺,自然而然與之相關(guān)的崗位待遇會相對 IT 行業(yè)中的其他崗位較高。
先來分享下在開始入門前我的基礎(chǔ)吧,先羅列下當(dāng)時我所掌握掌握的知識吧。
掌握了 Java SE
本科所學(xué)的微積分,線性代數(shù),概率論中的知識忘得所剩無幾
看了上面兩點,你會發(fā)現(xiàn),當(dāng)時的我其實除了掌握 Java SE 之外,連 Python 也不會,此外,微積分,線性代數(shù),概率論中的知識我也基本上全都還給了大學(xué)老師了。
這時你再想想你當(dāng)前的情況,你是不是發(fā)現(xiàn)你的情況跟我很像,甚至?xí)任业那闆r還好呢。
像我這樣的條件都可以入了門,你們有什么理由無法入門呢?
首先說明一點,我個人在入門過程中經(jīng)過了有看過視頻、也有看過書,看過博客,也有直接做一些項目,這些過程是交互進行的,現(xiàn)在我將這些按照相對順序來介紹下。
聊聊Python
在當(dāng)時Python在機器學(xué)習(xí)領(lǐng)域已經(jīng)使用非常多了,另外Python除了也可做機器學(xué)習(xí)外,還可以做后端(如Django/Flask等)。所以我首先學(xué)習(xí)的是 Python,在準(zhǔn)備學(xué)習(xí)它的時候,我最開始采取的方式是看教學(xué)視頻,但是發(fā)現(xiàn)太耗時了,所以看了兩節(jié)之后果斷放棄,進而我發(fā)現(xiàn)了廖雪峰關(guān)于Python的教程,看博客或者看書的方式會相對比看視頻快很多,由于我個人有 Java 編程的基礎(chǔ),所以在看廖雪峰關(guān)于 Python 的教程時相對容易點。這里建議如果沒有任何編程基礎(chǔ),建議還是選個Python的入門視頻來學(xué)習(xí)。
如果說單純的學(xué)習(xí)一門語言的話,這水其實是很深的,但對于我們大多數(shù)人來說,尤其是入門的時候,我們并不需要將Python的方方面面都學(xué)會,我們只需要有重點的掌握Python我們所需要的幾個部分就好,剩下的我們可以在之后工作項目中進步學(xué)習(xí)和加深。
對于要入門機器學(xué)習(xí)的同學(xué)們,我這里整理下前期Python所需要學(xué)習(xí)的部分:
Python語法基礎(chǔ),包括數(shù)據(jù)類型和變量、條件控制語句(if else、for、while)、列表(list)、集合(set)、字典(dict)、元組(tuple)等
面向?qū)ο蟛糠?,包括函?shù)的使用、函數(shù)的多種參數(shù)、匿名函數(shù)、類和實例、繼承和多態(tài)等
Python高級特性,包括切片、迭代、列表生成式、字典生成式、迭代器、生成器等
IO操作及異常處理,包括讀寫文本文件、讀寫二進制文件、異常捕獲和處理等
常用的內(nèi)置模塊,包括 datetime、os、system、re等
除了以上的關(guān)于Python的基礎(chǔ)外,還有一些第三方模塊我們需要掌握的。由于在使用機器學(xué)習(xí)算法時,經(jīng)常需要處理數(shù)據(jù)以及可視化結(jié)果。在這里推薦以下幾個第三方模塊:
pandas,數(shù)據(jù)分析必備神器,功能眾多,前期我們只需要掌握它的一些基本用法就OK
matplotlib,Python中眾多數(shù)據(jù)數(shù)據(jù)可視化的一個基礎(chǔ)庫,能夠使用它繪制基本圖形即可
對于我來說,這些第三方模塊都是在工作的時候?qū)W習(xí)的,并不是剛開始就學(xué)習(xí)的。以我的經(jīng)驗給大家指出一個陷阱,在我們?nèi)腴T階段,不建議大家剛開始就深入學(xué)習(xí)這些模塊的底層,我的原則是:先學(xué)會使用,再研究原理。以 pandas 為例,pandas 底層用到了 numpy、scipy、matplotlib,如果你要先系統(tǒng)地把這些底層所有的知識學(xué)習(xí)一遍,你會發(fā)現(xiàn)在你有限的時間內(nèi),你根本學(xué)不完,即便你有這么多時間去學(xué)完,你會發(fā)現(xiàn)學(xué)了后面,忘了前面。
相關(guān)的學(xué)習(xí)鏈接:
Python(廖雪峰),http://t.cn/RK0qGu7
Pandas,http://pandas.pydata.org/pandas-docs/stable/10min.html
Matplotlib,https://matplotlib.org/tutorials/index.html
聊聊機器學(xué)習(xí)算法課程
在掌握了 Python的基本用法后,我開始尋找學(xué)習(xí)機器學(xué)習(xí)的資料,當(dāng)時的情況是市面上并沒有眾多關(guān)于這方面的培訓(xùn)機構(gòu),經(jīng)過各種搜集,最后選擇了吳恩達在 Coursera 上的機器學(xué)習(xí)課程。雖說課程語音是英文,但有中文字幕,所以看起來還是很方便的。在將吳恩達課程學(xué)完之后,你會對常用的機器學(xué)習(xí)算法有一個基本的了解。
這里列舉出課程中所講解的一些常用算法和內(nèi)容:
線性回歸
邏輯回歸
神經(jīng)網(wǎng)絡(luò)
支持向量機
非監(jiān)督學(xué)習(xí)
降維、異常檢測
推薦系統(tǒng)
應(yīng)用機器學(xué)習(xí)建議
看了上面的各種算法,你可能會問,這么多聽起來很牛逼是算法,我的數(shù)學(xué)基礎(chǔ)(微積分、線性代數(shù)、概率論)不好,能聽的懂么?
在入門的時候,不建議大家將所有的數(shù)學(xué)知識全都學(xué)一遍,再來學(xué)習(xí)機器學(xué)習(xí)算法。一是時間長,而是學(xué)了不用就忘了。選擇一個好的視頻教程,你可以事半功倍,,吳恩達老師課程的一個優(yōu)點就在于他是專門針對我們這類的人群的,他的視頻中不會有很多數(shù)學(xué)公式推導(dǎo),但是仍然可以將這個算法跟你講解清楚。
此外,臺灣大學(xué)林軒田教授也有專門的機器學(xué)習(xí)視頻(包括兩部分:基石與技法)。這個視頻在國內(nèi)評價也較高,有興趣的也可以跟著這個視頻來學(xué)習(xí)。
關(guān)于吳恩達以及林軒田的機器學(xué)習(xí)相關(guān)的視頻課程,之前已經(jīng)有過分享,需要下載的請見:資源 | 2018年,你想要的機器/深度學(xué)習(xí)資料在這里
相關(guān)學(xué)習(xí)鏈接:
吳恩達機器學(xué)習(xí)課程,https://zh.coursera.org/learn/machine-learning
聊聊機器學(xué)習(xí)書籍
在學(xué)習(xí)了吳恩達老師的課程后,可以再讀一些相關(guān)的書籍來加強對機器學(xué)習(xí)的理解,當(dāng)時我買了挺多的書籍,有一本書叫做《機器學(xué)習(xí)實戰(zhàn)》,在這本書里會教你使用 Python 來實現(xiàn)常用的一些算法,當(dāng)時按照書上的講解手動敲了一些算法的實現(xiàn),當(dāng)你手動實現(xiàn)后,你會發(fā)現(xiàn)你對它的理解會更深了。
在實現(xiàn)書本上的一些算法時,會遇到某些算法的原理不太明白的地方,由于自己的數(shù)學(xué)知識(微積分、線性代數(shù)、概率論)基本上都還給了大學(xué)老師了,系統(tǒng)的去學(xué)習(xí)每個模塊是非常耗時的,這時候采取的策略是“缺啥補啥”,也就是說發(fā)現(xiàn)哪方面的知識和公式不太明白,就去查閱與之相關(guān)的資料。
在當(dāng)前,如果你想購買相關(guān)書籍,我可以再推薦兩本給你,一本是周志華的《機器學(xué)習(xí)》(通常也叫西瓜書),這本書在我學(xué)習(xí)的時候還沒出版;另一本是李航的《統(tǒng)計學(xué)習(xí)方法》。
聊聊如何通過工作/比賽提高水平
在掌握了Python的基本用法以及對機器學(xué)習(xí)有了基本了解之后,當(dāng)時的實習(xí)工作有一部分是使用機器學(xué)習(xí)算法來去識別用戶的評論是否違法,也就是一個二元分類問題。最開始的時候同閱讀同事實現(xiàn)的Python代碼,試圖去搞明白每一行的含義,也就是在這個時候,自己開始查閱 pandas 和 sklearn 相關(guān)的文檔,這樣最后不僅搞明白了同事的代碼,自己對 pandas 和 sklearn 基本的用法也有了一個認識。
這里多說兩句,掌握了 pandas 后,在處理小數(shù)據(jù)量的時候會非常得心應(yīng)手(如果數(shù)據(jù)量大的話,會非常慢);sklearn 是一個非常優(yōu)秀的開源的機器學(xué)習(xí)Python庫,這個庫實現(xiàn)了很多機器學(xué)習(xí)算法,并且提供了非常詳細的官方文檔,認真閱讀官方文檔可以收獲很多。如果你英文不太好的話,可以閱讀相應(yīng)的中文文檔,文檔地址可以見下面的學(xué)習(xí)鏈接。
如果說自己沒有實習(xí)或工作機會,我推薦你去參加 kaggle 比賽,kaggle 是一個提供數(shù)據(jù)挖掘相關(guān)的比賽平臺,在這里會有很多相對接近現(xiàn)實生活的比賽,此外,也會有很多大神分享自己的思路、做法和代碼,通過閱讀這些代碼也能快速的提高自己的水平。
相關(guān)學(xué)習(xí)鏈接:
sklearn,http://sklearn.apachecn.org/cn/latest/
kaggle,https://www.kaggle.com/
在入門了機器學(xué)習(xí)之后,在實際工作中,絕大多數(shù)的情況下你并不需要去創(chuàng)造一個新的算法。另外,大多數(shù)時間你也不是在去研究別人的算法時如何寫出來的,而是處理數(shù)據(jù),運用現(xiàn)有的第三方庫去跑模型、調(diào)參數(shù)。聽完我說的這些,你是不是很震驚,高大上的機器學(xué)習(xí)工程師在實際工作中大多數(shù)時間竟然是去洗數(shù)據(jù),調(diào)參數(shù)。但事實就是如此,除非你在一線互聯(lián)網(wǎng)公司,而且還是某些部門,你可能會需要自己重新去實現(xiàn)某個算法,否則其他公司的情況大多都是差不多的。
入門后再來聊一聊數(shù)學(xué)知識在機器學(xué)習(xí)中的作用,雖說你數(shù)學(xué)知識不好,一樣可以調(diào)用第三方庫的模型。但是如果你想要深入理解算法,數(shù)學(xué)的底子還必須是有一點的。如果你要入研究這個領(lǐng)域,你必須要撿起來你忘掉的數(shù)學(xué)知識。此外,在面試時,這些算法的原理相關(guān)的知識還是必問的。
聯(lián)系客服