機器學習學派預測效果好,可是解釋性不強,人們很難說明爲何就是工做的,爲何就是不工做的。。在圖像識別(語音識別。。)領域機器學習(深度學習)雖然解釋性差,可是確實有驚豔的表現;php
統計學派每每使用線性模型或各類預設的分佈假設去研究數據,解釋性好,可是泛化預測能力差。。html
機器學習的分類python
是否須要人的監督和參與: supervised, unsupervised, semisupervised,reinforcement learninggit
是否可以漸進持續學習(learn incrementally on the fly): online .vs. batch learninggithub
是否經過簡單地比較新數據和已知數據仍是洞察訓練集中的pattern而且構建一個預測模型(就像科學家同樣相似地工做):instance-based .vs. model based learningweb
這些分類的標準自己並不互相排斥,咱們能夠任意組合。好比一個好的spam郵件過濾系統可使用由已知訓練集訓練過的一個深度神經網絡持續on the fly學習。這構成一個online的model-based的監督式學習系統。算法
supervised learning(predictive model): shell
K nearest neighbours,線性迴歸,邏輯迴歸,SVM,決策樹和隨機森林,神經網絡macos
典型監督式學習:垃圾郵件過濾器服務器
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切分注意事項:
最好不要純粹作隨機抽樣八、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)
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:隨機選擇一部分樣原本學習,對參數調整,
https://blog.csdn.net/zouxy09/article/details/8537620
ensemble模型訓練到部署到設備橋樑利器: treelite
https://treelite.readthedocs.io/en/latest/tutorials/first.html