機器學習知識積累

世有因果知因求果發表於2018-07-22

資料科學兩大門派:統計學派.vs.機器學習學派

機器學習學派預測效果好,但是解釋性不強,人們很難說明為什麼就是工作的,為什麼就是不工作的。。在影像識別(語音識別。。)領域機器學習(深度學習)雖然解釋性差,但是確實有驚豔的表現;

統計學派往往使用線性模型或各種預設的分佈假設去研究資料,解釋性好,但是泛化預測能力差。。

 

機器學習的分類

是否需要人的監督和參與: supervised, unsupervised, semisupervised,reinforcement learning

是否能夠漸進持續學習(learn incrementally on the fly): online .vs. batch learning

是否通過簡單地比較新資料和已知資料還是洞察訓練集中的pattern並且構建一個預測模型(就像科學家一樣類似地工作):instance-based .vs. model based learning

這些分類的標準本身並不互相排斥,我們可以任意組合。比如一個好的spam郵件過濾系統可以使用由已知訓練集訓練過的一個深度神經網路持續on the fly學習。這構成一個online的model-based的監督式學習系統。

supervised learning(predictive model): 

K nearest neighbours,線性迴歸,邏輯迴歸,SVM,決策樹和隨機森林,神經網路

典型監督式學習:垃圾郵件過濾器

unsupervised learning(descriptive model):

clustering聚類: K-means, Hierarchical Cluster Analysis(HCA),Expectation maximization

visualization and dimensionality reduction:PCA,Kernel PCA, Locally linear embedding(LLE),t-distributed stochastic neighbor embedding(t-SNE)

association rule learning: apriori, eclat

典型的非監督學習例子:訪客畫像,特徵提取(比如汽車裡程和年齡可以組合為汽車損耗係數新特徵既實現了降維又實現了新特徵的提取和替換),信用卡異常監測, association rule learning:超市中買了尿不溼的很大可能會買奶粉,那麼我們將這兩樣物品擺放在比較近的位置。

semisupervised learning

一部分演算法場景可能是資料有小部分具有標籤,但是絕大部分是沒有標籤的。比如百度圖片:每個頭像分別在哪些照片中出現這個過程是clustering,屬於無監督學習,隨後我們指定一張照片中的頭像是誰,那麼就能知道哪個人在哪些照片中出現了,這屬於監督式學習。

再比如,DBN(Deep belief network)是基於被稱為restricted boltzmann machine(RBMs)的無監督元件一個個疊加起來。RBMs依次以無監督模式訓練,然後整個系統使用監督學習演算法更好的調整

Reinforcement learning:

在這裡,學習系統被稱為一個agent,可以觀察環境,選擇並執行對應動作,並且給到相應反饋(鼓勵還是懲罰)。隨後該演算法應該學習到最佳的策略(術語policy). 一個policy定義了在給定場景下,agent應該選擇什麼行動。

比如很多機器人都會實現Reinforcement學習演算法來學習如何走路。alphaGo也使用該演算法,alphaGo通過分析上百萬的遊戲學習到贏的policy是什麼樣子。在alphaGo正式比賽的時候關閉學習過程,而只是將這些Policy應用到實戰中。

Batch .vs. online learning

在batch learning下,系統無法"漸進"學習:必須使用全部的資料來做訓練。這將會需要很長的時間和計算資源,因此基本上都是離線訓練。部署模式為:學習獲得trained model部署上線應用,但是不再學習!"offline learning".這種情況下,如果希望系統能夠識別新的資料(比如能夠識別新型別的垃圾郵件),必須使用新的資料訓練出一個全新的模型。幸運的是我們可以比較容易實現自動化,即便我們無法實現真正online learning,也可以通過更新資料週期性地訓練新模型來實現模型更替。然而,這樣可以工作的前提是你必須有足夠的計算和儲存資源,但這並不總是滿足的,比如在移動應用上,我們的計算資源是很有限的。因此我們必須尋找新的解決方案---online learning

model-based泛化機器學習基本流程:

1. 學習資料EDA

2. 根據資料學習選擇一個合適的model

3. 訓練model

4. 部署該model做泛化

5. 部署人工效能評估工具(monitoring tool),週期性地監控Model效能並分析原因,重新訓練和部署

爭取將常規的model訓練選擇部署自動化

機器學習的主要挑戰:

既然機器學習的主要任務是選擇一個合適的演算法使用已知的資料來做訓練,那麼重要的挑戰也就有兩條:1.錯誤的模型假設;2.錯誤的輸入資料

心法:資料決定了機器學習的上限,學習演算法只能無限逼近這個上限

非常重要的一點是:你必須使用能夠代表你需要泛化到的case的資料來做訓練,否則模型效果不可能優秀。優良的資料須解決兩個問題:取樣噪聲(sample noise),以及取樣偏差(sampling bias)\

特徵工程:

 1. feature selection:選擇哪些最有用的特徵;

 2. feature extraction:組合現有的特徵產生一個更加有用的特徵(比如降維PCA演算法)

 3. creating new feature:蒐集新的資料獲取新的更加關注的特徵

演算法帶來問題:

過擬合(over fitting)

regularization是緩解過擬合的有效手段,其原理是,比如對於線性迴歸,我們允許修改$\theta_1$但是強制它必須比較小,那麼演算法會生成一個介於1到2之間自由度的模型!折中了!

機器學習dataset資源:

http://archive.ics.uci.edu/ml/index.php

https://www.kaggle.com/datasets

http://aws.amazon.com/fr/datasets/

—http://dataportals.org/
—http://opendatamonitor.eu/
—http://quandl.com/

—Wikipedia’s list of Machine Learning datasets
—Quora.com question
—Datasets subreddit

資料集train/test切分注意事項:

最好不要純粹做隨機抽樣8、2分成,因為很有可能我們取得的資料是skewed的,需要確保train/test的資料分佈和總體是一致的。一個可行的方案是:拿出最重要的feature,然後根據樣本總體中隨該feature的分佈比例照樣隨機抽取,確保train/test資料的分佈和總體是一致的。

特徵相關性指標相關係數corelation coefficient(Pearson'r)矩陣

注意Pearson'r引數僅能表徵兩個變數之間的線性相關程度,對於非線性關係則無法描述。比如最後一行的圖中雖然相關係數為0,但實際上他們明視訊記憶體在非線性的關係

圖形化庫matplotlib

什麼是matplotlib的backend?

https://matplotlib.org/tutorials/introductory/usage.html#what-is-a-backend

matplotlib可以被多種不同的場景並支援不同的輸出格式。很多人從python shell中互動模式地使用matplotlib,當他們敲出相關命令時會彈出繪圖視窗。而又有很多人將matplotlib嵌入到富互動應用的圖形使用者介面中,比如wxpython, pygtk。還有一些人在batch script中使用matplotlib以便從一些數字模擬中產生postscript image.還有一些人則將matplotlib作為web app專門用於serve圖表。為了支援這些use case,matplotlib可以target這些不同的輸出型別和場景,每種這類能力都被稱為一個“backend”;而frontend指使用者直接面對的程式碼,比如:plotting code,而backend則在幕後執行所有產生圖片的繁重工作。總的來說,有兩種型別的backend: user interface bakcends(用在pygtk,wxpython,tkinter,qt4,或者macosx中),也往往被稱為"interactive backends"以及hardcopy backends來生成image檔案(PNG, SVG,PDF,PS),這種型別也被稱為non-interactive backends.

 

 

 

判別模型(discriminative) vs生成模型(generative)

邏輯迴歸演算法簡單,對特徵工程的要求就非常高。必須做特徵歸一化,否則各特徵重要程度不一。

http://www.cnblogs.com/maybe2030/p/6336896.html

特徵正規化

from sklearn import preprocessing
df['normized'] = preprocessing.scale(df['non-normalized'])

L1 Distance/L1-Norm .vs. L2 Distance/L2-Norm

L1 = sum(abs(t1_i-t2_i))

L1-norm = |A|+|B_1|+... + |b_n|

L2 = sqrt(sum(t1_i-t2_i)^2)

bias .vs. variance

http://ogrisel.github.io/scikit-learn.org/sklearn-tutorial/tutorial/astronomy/practical.html

low bias:  對資料符合一個model(比如我們假設資料符合線性模型)沒有強假設(沒有假設一定要用線性模型),會將資料本身被model擬合看得更加重要,對model本身引數(比如線性模型的a,b兩個引數)重要性看得更輕一些。往往會產生更加複雜的模型(比如產生多項式擬合的模型),過擬合風險加大, overfit

high bias:有對資料分佈的model強假設,比如假設資料分佈為線性關係,會認為資料遵循model更加重要,而對資料本身是否能夠完全擬合併不是非常關心,這往往導致model過於簡單.under fit

Regression就是典型的high bias演算法

Decision Tree, 深度神經網路就是high variance的典型

我們再來看使用交叉驗證的場景下,過擬合欠擬合的特徵:

 

學習曲線是判斷模型是否overfit還是underfit的一個重要依據

上圖我們分別對high-bias和high variance的兩種模型分別調整train set數量來看在不同訓練集樣本數的情況下,其訓練誤差及測試誤差的變化情況。左邊的圖是high-bias(underfit)的典型圖例:traing error和test error都很高,這種情況下,即使增加再多的測試資料集也不會有多大幫助,兩條線都漸進收斂域一個相對高的error值;

右面的圖則是一個high-variance的模型(過擬合):訓練錯誤遠遠小於驗證集錯誤。隨著我們增加更多的資料到訓練中,訓練錯誤持續攀升,而test error會持續下降,直到趨於中值。

 

處理overfit的幾種手段:

cross-validation

regularization

Lasso Regression:使用L1-Norm$Loss = \sqrt {(y-y^{predict})^2}+\alpha(|A|^2+|B|^2)$

Ridge Regression:使用L2-Norm作為正則懲罰項($Loss = \sqrt {(y-y^{predict})^2}+\alpha(|A|+|B|)$)

drop off(神經網路)

 

機器學習知識小結

模型融合和整合學習是不同的哦。
比如整合學習: 弱學習機(往往演算法型別單一元學習機)-》組合形成一個強學習機
模型融合:強學習機(多個)強強結合形成一個更強的模型

voting, averaging, bagging, boosting, stacking:
比如
SVM(y1)+
GBGT(y2)+
LR(y3)
通過voting,眾人智慧. averaging:往往用於迴歸問題

特徵選擇:
1. 去掉方差特別小的特徵
2. 相關性:特徵之間最好無相關性,特徵與目標有強相關性。基於統計學的方法,相關性或者協方差為1,則正相關

1.coding的資料結構,演算法設計是要求用python嗎?
用虛擬碼都行。。

2.怎麼判斷特徵與目標的相關性?
統計學Pirson,

3.請問在人工智慧的公司中有哪些崗位分別是什麼角色及其工作是什麼?
推薦演算法增加CTR,
資料探勘,
資料分析:分析先有的業務資料
人臉識別指紋解碼

機器學習的一般步驟
業務問題抽象,比如從log中發現一些有用的特徵:
資料獲取,比如log: kafe,hbare,hdfs
特徵工程
模型訓練,調優,
模型驗證,誤差分析,誤差小的
模型融合
模型上線

多引數調參方法: grid search:可以調整步長,逐步細分範圍

XGBoost演算法主要引數及其作用,高緯稀疏不適合用XGBoost,可能需要深度學習演算法

所謂平行計算:樣本(資料)緯度和特徵緯度的並行。 比如特徵和特徵之間可以並行,再比如樣本和樣本之間可以平行計算

L1正則為何產生稀疏解: 黃色為約束區域,藍色的為可行解區域。 結構風險最小化:引數越簡單

資料不均衡問題的解決方案:
1. 訓練集隨機欠(多的減少)的取樣和過取樣(少的倍增)
2. 設計適合不均衡資料集的模型
3. 聚類豐富類, 比如100萬 vs 100的資料 先用kmeans k=100做訓練,生成100箇中心,這100箇中心外加100個資料作為新的樣本集做訓練


整合學習大部分都是基於決策樹,決策樹容易過擬合,但是整合的決策樹不容易產生過擬合
SVM曾經是演算法一哥,結構風險最小化,泛化錯誤率低,只能解決小樣本,只能處理小資料集,大資料集計算開銷太大

CNN適合解決具備相關性的問題,RNN適合解決時序性問題,企業界都不用

LR不單用,一般聯合使用 GBDT+LR , wdie & deep最後交給LR來做
adaboost是boost界元老

大規模機器學習
spark mllib:容錯能力強,但是效能不強
mpi: 分散式高效能運算,沒有容錯,但是效率會高一些,小規模資料比較好
PS: 引數伺服器,在比spark規模更大的機器學習平臺
以上三種都是適合於用於批量訓練(基於全體的訓練集訓練)
但是也可以使用增量式學習,線上學習來解決批量式學習,或者SGD:隨機選擇一部分樣本來學習,對引數調整,

從最大似然估計到EM演算法

https://blog.csdn.net/zouxy09/article/details/8537620

ensemble模型訓練到部署到裝置橋樑利器: treelite

https://treelite.readthedocs.io/en/latest/tutorials/first.html

 

相關文章