演算法工程師學習流程

2021-08-20 03:54:32 字數 4024 閱讀 1602

1.完成機器學習基礎的學習

機器學習方面的知識是演算法工程師區別於普通程式設計師的核心。這部分知識要重點掌握。

1)學習資料:以林軒田的《機器學習基石》、《機器學習技巧》為主,以周志華的《機器學習》、李航的《統計學習方法》為輔。

2.練習

刷完《劍指offer》,大概50題,最後可以手寫**,並進行一些基本的邏輯訓練。

1)學習資料:以《劍指offer》、《大話資料結構》這兩本書為主

2)學習目標:最終能刷完《劍指offer》上的50題,並能在白紙上寫出重要的題目。

3.完成基礎語言的學習

精通python

4.計算機基礎學習

1)學習資料:《不周山之計算機系統導論》

5.對於經典演算法的學習,大體上分成幾個階段:

1)第一階段:對於某一具體的演算法,首先要搞清楚這個演算法解決的問題是什麼,可能是實現乙個具體的功能,也可能是在某些方面,比如時間複雜度或者空間複雜度方面很卓越,總之搞清楚這個演算法被研究出來的目的是什麼。

2)第二階段:然後就要弄清楚這個演算法的生存環境了,也就是看看你此時研究的東西是不是對別的知識有依賴,應該把底層依賴的知識理解並掌握。這些問題都解決之後,就進入到演算法本身的學習,理解乙個演算法是一件非常辛苦的事情,剛開始看必然會產生很多的困惑,比如經常會懷疑作者講述的內容的重要性?這些內容和這個演算法有什麼聯絡呢?經常會有這種摸不著頭腦的感覺,其實作者做的鋪墊都是為了建立起描述演算法主要內容的基礎,只有接受和理解這些基礎,才能逐漸觸碰到演算法的精髓,所以耐心是很重要的。

3)第三階段:演算法的主要過程看完之後,往往還是會趕到困惑,主要是不知道這個過程好在**,就進入了下乙個階段,理解作者對這個過程在功能性或者效率卓越這件事上的理解和證明。這才真正觸碰到演算法最精髓的部分,也就是深度的理解演算法的主要過程所帶來的好處,這才是最鍛鍊人理解能力的地方。

4)第四階段:上面幾點是演算法學習階段的過程了,接下來就是研究演算法的**實現,自己設計測試用例親自跑一下**,以及從**執行時間的角度分析這個演算法的優勢,也就是加深對演算法的理解的過程。

5)第五階段:最後是配合相應的題目練習,讓自己通過題目練習的方式,會用、善用學習到的演算法,並對這個演算法產生一定的敏感程度,具體是指看到某些題目時,能夠根據題目的特點,產生與該演算法的對應,也就是具備舉一反三的能力。

6.知識網路

1)機器學習理論

1.1. 基礎理論

a. bias-variance tradeoff

b. vc dimension

c. 資訊理論

d. 正則化

e. 最優化理論

1.2. 有監督學習

a. knn

b. ***** bayes

c. lr

d. decision tree

e. boosting & gbdt

f. bagging & random forest

g. 神經網路

h. factorization machine

1.3. 無監督學習

a. kmeans

b. hierarchical cluster algorithm

c. dbscan

d. gaussian mixed model

e. lsa & lda

f. pca

g. svd & nmf

h. word2vec

2)概率和統計基礎

a. 大數定律與中心極限定理

b. 常用概率分布

c. 假設檢驗理論

d. 最大似然理論

e. 最大後驗理論

f. em演算法

g. 貝葉斯理論

h. 最小錯誤率貝葉斯分類

3)基礎結構與演算法

a. 樹與相關演算法

b. 圖與相關演算法

c. 雜湊表與相關演算法

d. 矩陣與相關演算法

4)開發語言

a. python

5)特徵處理&工程

a. 特徵選擇方法

b. 特徵規範化

c. 特徵離散化

d. 特徵交叉&綜合

6)基礎開發能力

a. 單元測試

b. 邏輯復用

c. 穩定性、效能、健壯性

d. **整潔度、可讀性和可維護性

7)單機開發工具

a. numpy

b. sklearn

c. pandas

d. matplotlib

e. libsvm

f. xgboost

8)大資料開發工具

a. hadoop

b. spark

c. storm

9)架構設計

a. 資料倉儲&資料流架構

b. 機器學習相關服務架構

7.技能

1)基礎開發能力

所謂演算法工程師,首先需要是一名工程師,那麼就要掌握所有開發工程師都需要掌握的一些能力。在大多數企業的大多數職位中,演算法工程師需要負責從演算法設計到演算法實現再到演算法上線這乙個全流程的工作。

2)概率和統計基礎

概率和統計可以說是機器學習領域的基石之一,從某個角度來看,機器學習可以看做是建立在概率思維之上的一種對不確定世界的系統性思考和認知方式。學會用概率的視角看待問題,用概率的語言描述問題,是深入理解和熟練運用機器學習技術的最重要基礎之一。

在統計方面,一些常用的引數估計方法也需要掌握,典型的如最大似然估計、最大後驗估計、em 演算法等。這些理論和最優化理論一樣,都是可以應用於所有模型的理論,是基礎中的基礎。這些分布貫穿著機器學習的各種模型之中,也存在於網際網路和真實世界的各種資料之中,理解了資料的分布,才能知道該對它們做什麼樣的處理。

3)開發語言和開發工具

近年來 python 可以說是資料科學和演算法領域最火的語言,主要原因是它使用門檻低,上手容易,同時具有著完備的工具生態圈,同時各種平台對其支援也比較好。但是在模型訓練方面,有一些更加專注的工具可以給出更好的訓練精度和效能,典型的如 libsvm、liblinear、xgboost 等。大資料工具方面,目前離線計算的主流工具仍然是hadoop和spark,實時計算方面 spark streaming 和 storm 也是比較主流的選擇。

4)機器學習理論(最重要)

雖然現在開箱即用的開源工具包越來越多,但並不意味著演算法工程師就可以忽略機器學習基礎理論的學習和掌握。這樣做主要有兩方面的意義:

a.掌握理論才能對各種工具、技巧靈活應用,而不是只會照搬套用。只有在這個基礎上才能夠真正具備搭建一套機器學習系統的能力,並對其進行持續優化。否則只能算是機器學習搬磚工人,算不得合格的工程師。出了問題也不會解決,更談不上對系統做優化。

b.學習機器學習的基礎理論的目的不僅僅是學會如何構建機器學習系統,更重要的是,這些基礎理論裡面體現的是一套思想和思維模式,其內涵包括概率性思維、矩陣化思維、最優化思維等多個子領域,這一套思維模式對於在當今這個大資料時代做資料的處理、分析和建模是非常有幫助的。如果你腦子裡沒有這套思維,面對大資料環境還在用老一套非概率的、標量式的思維去思考問題,那麼思考的效率和深度都會非常受限。

8.機器學習演算法工程師學習資源推薦

1)統計學習,基礎理論方面,如vc維、正則化、bias-variance tradeoff、最優化方法、資訊理論等。推薦李航老師的《統計學習方法》,入門必讀。

2)有監督學習,如線性回歸、logistic、決策樹、knn、svm、神經網路、樸素貝葉斯等。推薦周志華老師的西瓜書《機器學習》和《機器學習實戰》,經典中的經典。

3)無監督學習,如em演算法、聚類、競爭學習等,可以參考《機器學習》的部分章節

4)深度學習,如cnn、rnn、lstm等,推薦goodfellow的《深度學習》,dl的聖經。

5)強化學習,近年來比較火,alphago的核心演算法,推薦richard sutton的《強化學習》

6.1. stanford machine learning by andrew ng:

經典中的經典(

6.2. ng在網易雲課堂的深度學習課程:

6.3. neural network for machine learning by geoffrey hinton:hinton老先生開的唯一一門課,這門課程絕對是有紀念意義的:

6.4. coursera上的各種課程,包括微積分、線性代數、程式語言等等。

前端工程師學習筆記

優達學城 第1天筆記 1.完整的html樹結構 2.解釋說明 文件的標題 瀏覽器標籤中顯示的文字 about me,將定義文件的標題,並在使用者訪問頁面時顯示在瀏覽器的標籤中 相關的 css 檔案 針對樣式 網頁使用的字符集 文字的編碼 關鍵字 作者和描述 通常對搜尋引擎優化 seo 起作用 是十分...

前端工程師學習路線

前端工程師學習路線 第一階段 html css html高階 css高階 div css布局 html css整站開發 js基礎 js基礎教程 js內建物件常用方法 常見dom樹操作大全 es dom bom 定時器和焦點圖 js基本特效 常見特效 tab 導航 頁面滾動 輪播圖 js製作幻燈片 淡...

Python工程師學習之旅

1.python軟體開發基礎 1.linux作業系統2.docker基礎3.python基礎語法4.python字串解析5.python正規表示式6.python檔案操作7.python 模組8.python異常9.python gui程式設計10.python時間和日曆 掌握技能 1.掌握計算機的...