1
為什么要學(xué)原理和公式推導(dǎo)
1)
現(xiàn)成的算法庫、學(xué)習(xí)框架料仗。
數(shù)據(jù)輸入工具、框架中伏蚊,
用幾行代碼指定模型的類型和參數(shù)立轧,
就能自動計(jì)算出結(jié)果。
2)
機(jī)器學(xué)習(xí)的原理和數(shù)學(xué)推導(dǎo)一定要學(xué)躏吊!
工具就像是武器氛改,只是學(xué)會了這種武器最基本的招式和套路。
而理論學(xué)習(xí)即策略學(xué)習(xí)颜阐,工具的活用平窘,拆開綜合用,還有設(shè)計(jì)新工具
3)
我們將學(xué)到:
算法庫的安裝+庫函數(shù)的調(diào)用凳怨;
數(shù)據(jù)的 I/O 轉(zhuǎn)換瑰艘。
會安裝幾個支持庫
會調(diào)幾個接口
4)
?DSAT 都 Fix 不了啊肤舞?
再多投入幾倍資源也達(dá)不到 95%——干脆直接用 Rule-Base 來解決紫新?
……
ML/DL
新框架/工具/模型/算法
?TensorFlow?
?Caffe?
分類器
邏輯回歸
換成 RNN
5)
用這個譜聚類做數(shù)據(jù)預(yù)處理,歸根到底不還是利用詞袋模型算詞頻李剖,
比直接計(jì)算 tf-idf 做排序能好多少呢芒率?
6)
模型特質(zhì)
適用場景
數(shù)據(jù)匹配
算力和時間的消耗;
框架對軟硬件的需求和并行化的力度篙顺;
7)
針對技術(shù)需求偶芍,提供高質(zhì)量模型。
針對業(yè)務(wù)需求德玫,提供高質(zhì)量的解決方案匪蟀。
8)
優(yōu)化模型
選特征、調(diào)超參宰僧、換模型材彪,
9)
?指標(biāo)有哪些,如何計(jì)算琴儿?
是怎么工作的段化?
超參數(shù)?
特征選取有哪些原則造成、方法可運(yùn)用显熏?
他們完全有可能針對具體業(yè)務(wù)問題,構(gòu)造出目標(biāo)函數(shù)晒屎,甚至開發(fā)出符合自身軟硬件資源特點(diǎn)的求解算法佃延。
?Google 一下 Best Practice
必須具備理論基礎(chǔ)和數(shù)學(xué)層面的建模能力才行现诀。
————————————————
2
了解一件事是如何運(yùn)行的夷磕,明晰事物發(fā)展的客觀規(guī)律履肃,知道從最簡單的原理學(xué)著手逐層推進(jìn),比從一個已經(jīng)很復(fù)雜的狀態(tài)入手坐桩,一下子糾纏在各種不得要領(lǐng)的細(xì)節(jié)中要高效得多尺棋。
大多數(shù)人最常用的思維模型是 KV Pair,有些人似乎終身只有這一種思維模型绵跷。
對于原因和結(jié)果的關(guān)系膘螟,多數(shù)人根本沒想過去探究其轉(zhuǎn)換模型,而直接默認(rèn)是線性關(guān)系碾局。
線性回歸模型:選定一些特征荆残,針對每個特征獨(dú)立打分,最終加權(quán)求和(例如大學(xué)排名之類)净当。
問題待以后會回答:如何驗(yàn)證打分
我分享出來只是想說明:學(xué)習(xí)機(jī)器學(xué)習(xí)原理和公式推導(dǎo)内斯,并非只是做一些無聊的數(shù)字變換。很可能由此為我們打開一扇窗像啼,讓我們從新的角度看待世界俘闯,并為日常的思考過程提供更加可量化的方法。
3
以模型為驅(qū)動忽冻,了解“機(jī)器學(xué)習(xí)”的本質(zhì)
我選擇了幾種經(jīng)典模型
(例如:線性回歸真朗、邏輯回歸、
決策樹僧诚、支持向量機(jī)遮婶、條件隨機(jī)場、
K 均值等)湖笨,作為入門的進(jìn)階旗扑。
一定要搞清楚其
問題域、模型函數(shù)赶么、目標(biāo)函數(shù)肩豁、訓(xùn)練算法……潛入到數(shù)學(xué)公式推導(dǎo)的層面,
對每一步的公式變換和對應(yīng)的物理意義有所理解辫呻,然后再去實(shí)踐清钥。
這一個個的模型,就是機(jī)器學(xué)習(xí)的“肌肉”放闺,我們要通過觀察學(xué)習(xí)這一塊塊肌肉祟昭,
以其為載體來了解機(jī)器學(xué)習(xí)的核心——將事物轉(zhuǎn)化為數(shù)值,將關(guān)系怖侦、變換轉(zhuǎn)化為運(yùn)算篡悟,以事實(shí)(數(shù)據(jù))為依據(jù)谜叹,以規(guī)章(算法)為準(zhǔn)繩,通過計(jì)算來掌握事物的客觀規(guī)律(模型)搬葬。
要知道荷腊,這些經(jīng)典模型固然經(jīng)典,但是到了實(shí)際應(yīng)用中急凰,它們并非神圣不可改變女仰。也不是說機(jī)器學(xué)習(xí)就僅限于這些經(jīng)典模型。
只有掌握了機(jī)器學(xué)習(xí)精髓的人抡锈,才可能靈活運(yùn)用現(xiàn)有模型去解決實(shí)際問題疾忍,甚至進(jìn)一步針對具體問題得出自己的模型和算法。
反復(fù)學(xué)習(xí)床三,從記憶到掌握
當(dāng)然一罩,達(dá)到這種程度并非一蹴而就,總要從最簡單的模型開始撇簿。
聂渊。
多學(xué)幾遍,從頭到尾掌握整件事情的邏輯补疑,知
掌握了事物內(nèi)在的邏輯歧沪,再去記憶,就容易多了莲组。
學(xué)習(xí)標(biāo)準(zhǔn)設(shè)置得不必太高诊胞,比如可以這樣:
第一遍學(xué),只要求自己能完全掌握機(jī)器學(xué)習(xí)數(shù)據(jù)锹杈、模型撵孤、算法相互作用的基本關(guān)系,訓(xùn)練過程和評價標(biāo)準(zhǔn)竭望。具體的模型邪码,掌握最簡單的線性回歸就可以。
只要從頭到尾掌握了第一個模型咬清,做到:能夠從模型函數(shù)開始推導(dǎo)出目標(biāo)函數(shù)闭专,再用梯度下降算法求解,用(偽)代碼實(shí)現(xiàn)梯度下降求解過程旧烧。
第一遍學(xué)習(xí)掌握一個模型影钉;第二遍學(xué)習(xí)就不難掌握2-3個模型;第三遍就有可能掌握本課列出的大部分模型………如此由易到難掘剪,螺旋式推進(jìn)平委。
對于一些本身就比較復(fù)雜的數(shù)學(xué)模型,比如條件隨機(jī)場夺谁、隱馬爾科夫這類涉及場論和勢函數(shù)的模型廉赔,如果直接入手肉微,往往會卡在模型函數(shù)本身上。但是當(dāng)有了前面幾個模型的基礎(chǔ)蜡塌,了解了更抽象層面的原理碉纳,掌握起來就容易多了。
數(shù)學(xué)需要多精深岗照?
村象。如果數(shù)學(xué)工具實(shí)在掌握得太少,最起碼也要讀懂一組公式推導(dǎo)中的第一個和最后一個式子:
讀懂它們都針對哪些變量進(jìn)行了怎么樣的運(yùn)算攒至;
這些變量和運(yùn)算的物理意義是什么;
第一個式子是對哪種真實(shí)場景的數(shù)學(xué)描述躁劣;
最后推導(dǎo)的結(jié)果又具備怎樣的特征迫吐。
enter image description here
兩條路徑反芻數(shù)學(xué)知識
所以,同學(xué)們應(yīng)力求理解每一步推導(dǎo)過程账忘。
如果有可能志膀,可以事先復(fù)習(xí)一下大學(xué)本科的高數(shù)(數(shù)學(xué)分析)、概率統(tǒng)計(jì)和線性代數(shù)鳖擒「日悖或者,在學(xué)習(xí)模型的過程中蒋荚,一旦遇到了數(shù)學(xué)上的阻礙戳稽,就回頭去查找相應(yīng)知識。
很多數(shù)學(xué)問題期升,之所以讓人頭大惊奇,其實(shí)并不是真的有多難,而是符號系統(tǒng)比較復(fù)雜播赁,運(yùn)算繁復(fù)颂郎,或者運(yùn)算所表達(dá)的物理意義多樣。
很多時候造成困擾是因?yàn)橄氩黄饋磉@里用到什么定理容为,哪個公式乓序,或者這樣操作表達(dá)的含義是什么。
如果把常用的細(xì)小知識點(diǎn)都記錄下來坎背,按主題整理成速查手冊(小字典)替劈,需要用的時候快速查找對應(yīng)的知識點(diǎn),這樣我們的“機(jī)器學(xué)習(xí)”學(xué)習(xí)之路就順暢不少沼瘫。
下面兩個是我自己制作的例子抬纸,供大家參考:
機(jī)器學(xué)習(xí)常用微積分知識速查手冊
機(jī)器學(xué)習(xí)常用線性代數(shù)知識速查手冊
日常學(xué)習(xí) Tips
記錄
準(zhǔn)備一個筆記本,紙質(zhì)版或電子版均可耿戚。有什么發(fā)現(xiàn)湿故、感想阿趁、疑問、經(jīng)驗(yàn)等等坛猪,全都記下來脖阵。
如果是對某個話題、題目有比較完整的想法墅茉,最好能夠及時整理成文命黔,至少記錄下要點(diǎn)。
隔一段時間把筆記整理一下就斤,把分散的點(diǎn)滴整理成塊悍募,一點(diǎn)點(diǎn)填充自己的“思維地圖”。
分享
知識技能這種東西洋机,學(xué)了坠宴,就得“炫耀”——把學(xué)習(xí)到的新知識、理論绷旗、方法喜鼓,分享給更多的人。
如此一來衔肢,倒逼自己整理體系庄岖、記憶要點(diǎn)。這可以說是與人方便自己方便的最佳實(shí)例角骤。
把自己的感想隅忿、體會、經(jīng)驗(yàn)分享出來的同時启搂,也鍛煉了自己的邏輯思維能力和歸納總結(jié)能力硼控。一舉多得,何樂而不為胳赌?
以上談到的關(guān)聯(lián)牢撼、記錄、分享的內(nèi)容疑苫,大家都可以通過社群內(nèi)的學(xué)習(xí)筆記來提交熏版。我會挑選優(yōu)秀的內(nèi)容進(jìn)行點(diǎn)評和回復(fù)。
4
第04課:為什么要學(xué) Python 以及如何學(xué) Python
理解原理——涉及動手實(shí)踐
去訓(xùn)練一個模型捍掺,測試一些數(shù)據(jù)撼短,編寫一個算法
那些公式、函數(shù)挺勿、算法才能真的在頭腦中留下印象曲横。
Python 是一種說人話的語言
開發(fā)者不需要關(guān)注底層;
不用自己費(fèi)心照顧存儲、網(wǎng)絡(luò)等資源禾嫉。
處理大量非結(jié)構(gòu)化數(shù)據(jù)
Python 的動態(tài)類型設(shè)計(jì)正好
語法簡單直觀灾杰,
表達(dá)形式一致。
Python 的設(shè)計(jì)理念就是讓不同的人所用的表達(dá)形式一致熙参。
容易讀懂艳吠,容易整合。
直接運(yùn)行孽椰。
一條條語句可以直接作為命令行運(yùn)行
大量機(jī)器學(xué)習(xí)支持庫
研究人員和數(shù)據(jù)科學(xué)家昭娩,編程語言本身于他們而言僅僅是一種工具。
作為回報黍匾,他們向 Python 反哺了大量用于數(shù)據(jù)處理和機(jī)器學(xué)習(xí)的支持庫栏渺。
?NumPy 和 sklearn(scikit-learn)。
TensorFlow膀捷、Caffe 之類的深度學(xué)習(xí)框架迈嘹,主體都是用 Python 來實(shí)現(xiàn),提供的原生接口也是 Python全庸。
怎么學(xué) Python
買書當(dāng)然可以,不過不是必須融痛,特別是壶笼,當(dāng)你學(xué)習(xí)編程的目的是要訓(xùn)練機(jī)器學(xué)習(xí)模型的時候。
個人認(rèn)為雁刷,
閱讀官網(wǎng)文檔或中文版教程
https://docs.python.org/3.7/tutorial/index.html
https://docs.python.org/3.7/index.html覆劈,
并在實(shí)踐中通過 Stack Overflow 直接查找所需實(shí)現(xiàn)問題的 Solution,
可能是比讀書更好的學(xué)習(xí)編程語言的方法沛励。
推薦這本:由 Eric Matthes 撰寫的《Python 編程從入門到實(shí)踐》责语。
不管買不買書,下面的過程都差不多目派。個人建議按照下面的順序入手 Python坤候。
(1)安裝 Python 運(yùn)行環(huán)境。
就選 Python 3吧企蹭。
第一步白筹,在你的系統(tǒng)上安裝好 Python 3。
(2)編寫第一個 Python 程序:“Hello world”谅摄。
雖然有效代碼只有:print(”hello world”)徒河。
但注意,你需要嘗試至少三種不同的運(yùn)行方法:
在命令行直接運(yùn)行送漠;
編寫一個 Python 文件顽照,將 print hello world 封裝為一個函數(shù),通過 main 函數(shù)調(diào)用它來運(yùn)行闽寡;
編寫一個 class代兵,將 print hello world 封裝為一個 method尼酿,通過 main 函數(shù)創(chuàng)建 class 實(shí)例來運(yùn)行 method。
(3)編寫一個或者多個復(fù)雜點(diǎn)的程序奢人,用(2)中第2種或第3種方式執(zhí)行谓媒。
具體程序的功能可以自己定義,目的是借此了解下面這些概念:數(shù)據(jù)類型何乎、變量句惯、函數(shù)、參數(shù)支救、返回值抢野、調(diào)用、遞歸……
學(xué)習(xí)流程控制:順序各墨、條件指孤、循環(huán)。
搞清幾種不同類型:array贬堵、list恃轩、dict、set 的用法黎做。
在這個過程中叉跛,學(xué)習(xí)什么是靜態(tài)類型、什么是動態(tài)類型蒸殿、什么是強(qiáng)類型筷厘、什么是弱類型,這些不同設(shè)計(jì)的目的和應(yīng)用場景分別是什么宏所。
如果你實(shí)在不知道寫什么程序好酥艳,那就寫寫 binary search 和 quick sorting 吧。并順便嘗試一下遞歸和非遞歸的不同實(shí)現(xiàn)爬骤。
——這塊聽不懂
(4)編寫程序練習(xí)文件讀寫充石,文件和目錄操作。
如果使用支持庫封裝好的模型算法盖腕,
把數(shù)據(jù)在文件和各種類型的變量之間導(dǎo)來導(dǎo)去赫冬。
(所以務(wù)必學(xué)會將 tsv、csv 之類的文件讀入 array溃列、list劲厌、dict 等結(jié)構(gòu)
以及將這些變量打印到文本文件中的方法。)——不會
(5)開始寫第一個機(jī)器學(xué)習(xí)程序听隐。
(首先 import numpy 和 sklearn补鼻。
之前當(dāng)然要安裝這兩個支持庫,
一般安裝支持庫使用 apt-get 或者 pip,可以根據(jù)需要選用风范。)——不會
其次咨跌,找一個模型,比如 Logistic Regression硼婿,
網(wǎng)絡(luò)搜索該模型訓(xùn)練和測試的 Example Code锌半,運(yùn)行后看結(jié)果,
并閱讀 Example Code(下面是個例子)寇漫。
? ? from numpy import *?
? ? from sklearn.datasets import load_iris? ? # import datasets?
? ? # load the dataset: iris?
? ? iris = load_iris()?
? ? samples = iris.data?
? ? #print samples?
? ? target = iris.target?
? ? # import the LogisticRegression?
? ? from sklearn.linear_model import LogisticRegression?
? ? classifier = LogisticRegression()? # 使用類刊殉,參數(shù)全是默認(rèn)的?
? ? classifier.fit(samples, target)? # 訓(xùn)練數(shù)據(jù)來學(xué)習(xí),不需要返回值?
? ? x = classifier.predict(array([5, 3, 5, 2.5]).reshape(1,-1))? # 測試數(shù)據(jù)州胳,分類返回標(biāo)記?
? ? print x?
一則學(xué)習(xí) sklearn 和 Numpy 庫函數(shù)的調(diào)用记焊,
一方面對 LR 有個感性認(rèn)識∷ㄗ玻——不懂
(6)自己設(shè)置一個實(shí)際問題遍膜,并準(zhǔn)備數(shù)據(jù)。修改(5)的程序瓤湘,用自己的數(shù)據(jù)訓(xùn)練并測試模型瓢颅。
——懂也不懂以前
(7)逐行解讀(6)中調(diào)用的 sklearn 函數(shù)的實(shí)現(xiàn)代碼,
結(jié)合該模型的原理弛说,對比印證惜索,徹底搞懂一個算法的實(shí)現(xiàn)細(xì)則。
——同上
比如例子中的:classifier.fit() 和 classifier.predict()剃浇。
(8)不依賴 sklearn,自己動手實(shí)現(xiàn)一個訓(xùn)練 LR 模型的算法猎物。
完成上面這些步驟后虎囚,你算是可以用 Python 輔助學(xué)習(xí)機(jī)器學(xué)習(xí)基礎(chǔ)知識了。
以上就是緒論部分需要學(xué)習(xí)的內(nèi)容蔫磨,不知道同學(xué)們通過這兩天是否對為什么學(xué)習(xí)和怎么學(xué)習(xí)有了更深的理解淘讥?請把你的心得和問題通過學(xué)習(xí)筆記提交出來吧,我們一起研究堤如,共同進(jìn)步蒲列。