1. 程式人生 > >【演算法】演算法知識點總結

【演算法】演算法知識點總結

## 專案知識點評估:

1、fm + ffm + lr
   # fm 相比 lr 引進了特徵組合(二次項)
   # fm 解決了資料稀疏性導致的引數訓練不充分問題(尤其對於one-hot編碼之後)
   # ffm 增加了field,隱向量不僅與特徵相關,也與field相關
   # 假設樣本的 n 個特徵屬於 f 個field,那麼FFM的二次項有 nf個隱向量。
   # 而在FM模型中,每一維特徵的隱向量只有一個。
   # FM可以看作FFM的特例,是把所有特徵都歸屬到一個field時的FFM模型。
   
2、gbdt + xgboost (結合泰勒公式 + 梯度下降 + 牛頓法 + 引數空間 + 函式空間 )
   # XGB還支援線性分類器
   # XGB對損失函式進行二階泰勒展開
   # xgboost在代價函式里加入了正則項(葉子節點個數、每個葉子節點上輸出的score的L2模的平方和)
   # XGB的權重衰減(shrinkage)
   # XGB支援列抽樣
   # XGB對缺失值的處理,對於特徵的值有缺失的樣本,XGBoost還可以自動學習出它的分裂方向
   # xgboost工具支援並行
   * 類別特徵必須編碼,因為xgboost把特徵預設都當成數值型的
   * XGBoost的特徵重要性是如何得到的?某個特徵的重要性(feature score),等於它被選中為樹節點分裂特徵的次數的和。
     比如特徵A在第一次迭代中(即第一棵樹)被選中了1次去分裂樹節點,在第二次迭代被選中2次…..那麼最終特徵A的feature score就是 1+2+….
3、深度學習(cnn + rnn)
4、常用聚類演算法
5、強化學習
6、圖計算(simrank + Graph Embadding)
7、NLP(Word2Vector + Lda)
   (1)Word2Vector
      # 基於 Hierarchical Softmax 的模型(CBOW & Skip-gram)
      # 基於 Negative Sampling 的模型(CBOW & Skip-gram)
      # 演算法細節:https://blog.csdn.net/itplus/article/details/37999613
   (2)Lda
      # 多項式分佈 & Dirichlet分佈
      # 涉及知識點
        * 蒙特卡洛數值積分
        * 均勻分佈,Box-Muller 變換
        * Monte Carlo principle
        * 接受-拒絕抽樣(Acceptance-Rejection sampling)
        * 重要性抽樣(Importance sampling)
        * 馬爾科夫鏈 & 馬爾科夫穩態 & 細緻平穩條件
        * MCMC——Metropolis-Hasting演算法(解決MCMC取樣接受率過低問題)
        * MCMC——Gibbs Sampling演算法(M-H取樣有兩個缺點:
                                    一是需要計算接受率,在高維時計算量大。並且由於接受率的原因導致演算法收斂時間變長。
                                    二是有些高維資料,特徵的條件概率分佈好求,但是特徵的聯合分佈不好求
                                    )
      # 演算法細節:http://www.cnblogs.com/pinard/p/6625739.html
      
      > 概率分佈取樣(蒙特卡羅方法的關鍵是得到x的概率分佈。如果求出了x的概率分佈,我們可以基於概率分佈去取樣基於這個概率分佈的n個x的樣本集)
      > 接受-拒絕取樣(對於概率分佈不是常見的分佈,一個可行的辦法是採用接受-拒絕取樣來得到該分佈的樣本)
      > 要想將蒙特卡羅方法作為一個通用的取樣模擬求和的方法,必須解決如何方便得到各種複雜概率分佈的對應的取樣樣本集的問題-->引出馬爾科夫鏈
      > 馬爾科夫鏈模型的狀態轉移矩陣收斂到的穩定概率分佈與我們的初始狀態概率分佈無關。這是一個非常好的性質,
        也就是說,如果我們得到了這個穩定概率分佈對應的馬爾科夫鏈模型的狀態轉移矩陣,則我們可以用任意的概率分佈樣本開始,
        帶入馬爾科夫鏈模型的狀態轉移矩陣,這樣經過一些序列的轉換,最終就可以得到符合對應穩定概率分佈的樣本
      > 重要的問題是,隨意給定一個平穩分佈π,如何得到它所對應的馬爾科夫鏈狀態轉移矩陣P呢?--> 引出MCMC的取樣,以及它的使用改進版取樣: M-H取樣和Gibbs取樣
      > 在解決從平穩分佈π, 找到對應的馬爾科夫鏈狀態轉移矩陣P之前,我們還需要先看看馬爾科夫鏈的細緻平穩條件
      > 常見的馬爾科夫鏈狀態轉移矩陣Q通過一定的接受-拒絕概率得到目標轉移矩陣P
      
      
8、常見優化演算法(SGD + OGD + BGD + FTRL)
   # L1在online(SGD->不是最優方向)模式下,不能產生更好的稀疏性
   # FOBOS -> RDA -> FTRL
9、貝葉斯平滑
10、Spark效能優化(JVM/GC調優)
11、不平衡樣本取樣之CTR校準
12、learn to rank
13、不平衡樣本的處理方法(過取樣 + 下采樣 + SMOTE&過取樣)

14、推薦系統EE問題 & 冷啟動問題
    # 常用Bandit演算法(累積遺憾->評估效果)
        * Thompson sampling演算法
        * UCB演算法
        * Epsilon-Greedy演算法
        * 樸素Bandit演算法
        * LinUCB(UCB演算法加入特徵資訊)
        * COFIBA演算法(Bandit和協同過濾結合)


## 基礎理論
(1)最優化理論
    # 無約最優化(BGD & SGD & MBGD & Momentum & AdaGrad & RMSProp & Adam + 牛頓法(海森矩陣計算量大)  + OWL-QN + 共軛梯度法&擬牛頓法(DFP -> BFGS -> L-BFGS))
    # 約束最優化(拉格朗日乘子)
(2)資訊理論(自資訊+ 熵 + 條件熵 + 聯合熵 + 互資訊 + 相對熵(KL散度) + 交叉熵 + 資訊增益 + 資訊增益率 + 基尼係數)
(3)VC維(增長函式 & growth function + 對分 & dichotomy+ 打散 & shattering+ 斷點 & break point)
    # 測試集合的loss是否和訓練集合的loss接近?VC維越小,理論越接近。
    # 訓練集合的loss是否足夠小?VC維越大,loss理論越小。
(4)bias-variance tradeoff (偏差 + 方差)
(5)辨別模型 vs 生成模型
(6)常見損失函式(0-1損失 + 平方損失 + 絕對損失 + 對數損失 & 對數似然損失)
(7)經驗風險 vs 期望風險(大數定律) & 泛化誤差
(8)經驗風險最小化 vs 結構風險最小化(正則化 & 符合奧卡姆剃刀原理)
(9)最小二乘 vs 梯度下降 vs 極大似然
    # 最小二乘和極大似然是目標函式,梯度下降是優化演算法。
    # 最小二乘和極大似然也不是對立的:最小二乘是從函式形式上來看的,極大似然是從概率意義上來看的。事實上,最小二乘可以由高斯噪聲假設+極大似然估計推匯出來。
    # 梯度下降和最小二乘不是對立的
    # logistic迴歸的引數估計時,損失函式為什麼是交叉熵,而不是最小二乘。
    # 可能有些人把求解線性最小二乘問題的close form叫最小二乘法,但是這是建立在損失函式是線性最小二乘問題的情況下,所以還是要討論損失函式的問題。
    # 最小二乘法只能解決線性最小二乘問題
    # 最小二乘法是一種演算法,最小二乘問題是一個loss function


## 概率統計基礎
(1)大數定理 & 中心極限定理(高斯分佈)
(2)常見概率分佈
(3)假設檢驗理論(u—檢驗法 & t檢驗法 & χ2檢驗法(卡方檢驗) & F—檢驗法 & 秩和檢驗)
(4)最大後驗理論 & 貝葉斯估計(貝葉斯派 -> 引數服從某種概率分佈)
(5)最大似然理論 & 極大似然估計(頻率派 -> 引數是固定的)
(6)EM演算法


## 特徵處理 & 工程
(0)特徵處理
    # 缺失值處理(刪除 + 補全(平均數 & 正態分佈 、中位數 & 偏態分佈、眾數 & 定性指標、最大值、最小值、固定值、插值) + 忽略(xgboost))
    # 異常值處理(單變數離群值檢測 & 箱圖 + 區域性離群值因子檢測 + 基於聚類方法的離群值檢測)
    # 描述變數轉為連續變數
(1)特徵選擇方法
    # 包裹式 & Wrapper (遞迴特徵消除演算法)
    # 過濾式 & Filter(卡方檢驗 + 資訊增益 + 相關係數)
    # 嵌入式 & Embedded(正則化 & 嶺迴歸)
(2)特徵規範化 & 歸一化[0-1]
    # 零均值規範化(非線性) & z-score (特徵值減去均值,除以標準差)
    # 最小-最大規範化(線性)
    # 對數函式法
(3)特徵離散化
(4)特徵交叉 & 組合


## 模型評估
(1)分類模型評估方法(Accuracy + Precision + Recall + F1 score + ROC 曲線 + AUC + PR 曲線)
(2)迴歸問題評估方法(MSE & 均方誤差 + RMSE & 平方根誤差 + MAE & 平均絕對差值)
(3)資料不均衡的評估方法
(4)過擬合和欠擬合
     # bias-variance tradeoff解釋
     # 貝葉斯先驗解釋


## 有監督學習
(0)感知機(原始形式 & 對偶形式)
(1)knn(三要素:K值選擇 + 距離度量 + 分類決策規則 & 實現方式kd樹)
(2)naive bayse(引數估計:極大似然估計 + 貝葉斯估計 & 拉普拉斯平滑)
(3)bagging & 隨機森林(RF)
(4)boosting & gbdt
(5)決策樹
(6)LR(並行化&行並行&列並行)
(7)fm
(8)神經網路(典型BP,其本質是梯度下降和鏈式法則)

 
## 無監督學習
(1)K-means
(2)均值漂移聚類
(3)混合高斯模型
(4)層次聚類
(5)DBSCAN(密度聚類)
(6)LSI & pLSA & LDA
(7)PCA
(8)SVD & NMF
(9)word2vec

  * 聚類分析中距離度量方法(歐氏距離 + 曼哈頓距離 + 切比雪夫距離 + 餘弦相似度 + 皮爾森相似度 + Jaccard相似度 + 馬氏距離)


## 深度學習
(1)CNN(LeNet5 +  AlexNet + VGG&16&19 + Inception&v2&v3&v4 + ResNet)
(2)RNN(LSTM + GRU)
(3)梯度消失和梯度膨脹
     * ReLU對比Sigmoid變化:單側抑制 + 相對寬闊的興奮邊界 + 稀疏啟用性
     * ReLU -> EIU -> PReLU -> RReLU 成為主流
     * Softplus雖具有單側抑制的作用,但是沒有稀疏啟用性    


## 強化學習
 # value-based & 基於價值
    (1)Q-learning & Deep Q Network(離線學習)
    (2)Sarsa & Sarsa lambda (線上學習)
 # policy-based & 基於概率
    (1)Policy Gradient
 # 基於概率 & 基於價值
    (1)Actor Critic(DDPG + A3C + DPPO)

 # model free & model base
 # 回合更新 & 單步更新