算法建模的一些總結

問題建模

    解決一個機器學習問題,都先需要對問題進行分析,確定我們的目的是什麼,明確了目的後,對問題進行建立模型,建立的模型
前需要確定好我們建立的模型面對的目標,這個目標需要儘可能逼近最開始我們想解決問題的目的,只有我們最初的目的和建模的目標儘量一致才能確保後續所有的工作都是有效的。比如一個電商平臺想要利用推薦系統提高消費者的購買量,那麼我們的目的就是儘可能讓消費者買我們推薦的東西,提高GMV。把這個問題抽象化爲模型就是要讓我們模型推薦的商品讓消費者買,那麼模型的目標就是讓模型預測的結果和消費者真實購買想法的結果儘量一致,說白了就是建模過程中損失函數的定義,是否接近最初的目的。具體在建模過程中,只需要按照最初的目標進行建模即可,比如,我們可以將預測消費者買或者不買的行爲定義二分類問題,來最小化真實消費者意圖和模型預測的結果。也可以將問題定義爲點擊流預測,如消費者購買行爲數據流下,消費者下次購買行爲預測。這個就看具體情況了。

建模過程

    建模過程就是將問題抽象化的過程。在這個過程中,首先需要一份乾淨的數據,所以我們需要對數據進行篩選和清洗。比如還是消費者購買行爲,如果使用雙十一的數據來對問題建模,那麼十有八九模型並不會特別好,因爲這天的數據也許大家只是覺得便宜所以就買了。有了一份乾淨的數據,就需要將數據進行整理了。特徵工程上場了。數據分爲結構化數據和無結構話數據。通俗的講,結構化數據就是數據像表裏的每一行,一行表示一個消費者的一個行爲,他是誰,買了啥,都整理在每個字段中,整整齊齊。而非結構化數據就像圖片,沒有整齊的結構。大多數的機器學習模型都需要將數據處理成結構化數據。輸入模型的數據需要有一定的格式。

評價指標

精確率:預測正確的正樣本/預測爲正確的樣本

召回率:預測正確的正樣本/真正正確的正樣本

這兩者相互矛盾,精確率越高,往往召回率越低,反之依然;

所以不同的問題,可能對精確率和正確率 需求不一樣,需要對預測正樣本進行設置不同的閾值。當然也有一些評價整體性能的評價指標。

如PR曲線,ROC曲線

PR曲線 ,橫軸爲召回率,縱軸爲精確率,所以PR曲線,越往右上角越好;

ROC曲線,橫軸爲預測錯誤的負樣本佔整體訓練樣本中負樣本的比例;縱軸爲預測正確的正樣本佔整體訓練樣本中正樣本的比例;

因爲ROC的橫軸和縱軸的計算,都沒有用到預測出的正樣本集爲分母,所以在面對正負樣本不平衡的情況下,ROC並不敏感;而PR曲線反應出的結果就很敏感。繪製ROC曲線也較爲簡單,我們先把所有樣本按預測概率值從小到大排序好,然後以每條樣本的概率值爲閾值計算橫軸和縱軸的值,專業名詞好像叫FPR和TPR,可以去查下混淆矩陣,我不愛記這些名詞,懂含義就行了。然後把這些點連接起來就是ROC曲線。ROC曲線在正負樣本不平衡的時候,可能會有波動,比如極端情況,正樣本只有兩個,當預測出一個的時候,會縱軸一直保持在50%,然後橫軸一直往右走,當正樣本由預測出一個後,就一下子跳到了100%。

AUC值

談到ROC曲線,就肯定需要了解auc值,auc的英文是area under roc curve 就是指的roc曲線下的面積。因爲當ROC曲線越靠近左上角說明模型的整體效果越好,所以這和曲線下面積越大是等價的。當auc等於1的時候就是roc曲線是一條直線,模型是完美的。但是auc或者說roc曲線反應的只是是否正樣本比負樣本排在前面的一個值,反應的是模型的整體效果;但是沒有比較其具體的概率值,如果要比較整體的概率值,就需要用到其他評價指標,如MAE,MSE等;所以對一些爲了比較topN效果的任務跑的算法,單單比較auc值可能就不夠了,因爲也許auc值不錯,但是topN中召回的結果大部分是負樣本,這樣對最終的效果也是不會起到任何作用;所以在實際應用中要確保線上的目標和線下的評價指標一致。這樣纔能有效提高算法效果。在實踐中,對於正負樣本不平衡的數據,其實auc值是會偏高的,所以還需要做好正負樣本平衡,以及添加其他的評價指標來輔助。前面也說來,auc只是判斷了整體是否比負樣本排在前面的一個效果比較,所以針對不同任務,也許還需要加入topN等召回率,MSE等來一起判斷算法優化是否有效。還有一些排序相關的指標,可以去了解下,MAP,NDCG等。

數據噪聲

真實數據中,存在噪聲是不可避免的。數據中或多或少肯定會有噪聲,但是要想辦法把噪聲去掉一些,留有一點噪聲也沒關係,少量的噪聲反而能提高模型的性能。前提是訓練數據量還可以。
噪聲:特徵值缺失,超出特徵值域範圍,等,也可能標註不對。去除了一些特徵的噪聲模型效果反而變差,所以噪聲也帶有一些信息能用於構建模型,比如特徵數據缺失,可以把缺失也理解爲一種特徵。

採樣

用的比較多的:
簡單採樣:如負樣本下采樣,正樣本上採樣(上採樣的時候,如果正樣本確實很少,那麼可以用smote等生成數據來上採樣)
層級採樣:如某個類目預測準確率低,如果該類目樣本少,就用層級採樣,把這部分數據上採樣;
分層訓練:將負樣本劃分成多份,正樣本和一部分負樣本訓練,訓練多個模型。

自助法(bootstrapping):自主採樣(Bootstrap Sampling)有放回的重複採樣,來構造訓練集和測試集;
這樣一條樣本沒有被採到的概率是1-1/n 經過n次採樣還沒有被採集到的概率是(1-1/n)^n
取極限 lim(1-1/n)^n 等於1/e 約等於0.368
這意味着當數據量很大的時候,約有36.8%的數據不會被採集到訓練集中,用這部分數據來作爲測試集。 
但是自助法改變了最開始的數據集分佈,所以單個模型的訓練會引入偏差,所以可以用在隨機森林這種很多模型和在一起的模型,來消除偏差。

特徵工程

數據和特徵決定了機器學習算法的上線,而模型和算法只是不斷逼近這個上線而已。
特徵工程相當於數據和模型之間的傳輸通道,如果通道太小,很大有用的信息根本傳不過去。或者說把數據轉化成
算法能理解的格式。不同的數據,如數值型,離散型,文本,圖像,視頻。都可以想辦法轉化爲實向量,特徵工程表示的越好,模型越能學習到數據中隱含的規律。

探索性數據分析

拿到一份數據後,先要對數據進行分析,畫圖,統計等等,至少要知道每個特徵有哪些取值,取值範圍等。目的是儘可能的理解數據本身的一些特性,方便提取特徵,去掉異常值,構建初步的模型。
可視化:箱形圖,直方圖,多變量圖,散點圖,主成分分析
定量技術:樣本均值,方差,分位數,峯度,偏度

數值特徵主要考慮大小和分佈,線性模型,線性迴歸,邏輯迴歸對大小敏感,因爲模型很難協調好不同參數之間的變化。
樹模型不需要歸一化,如果模型對輸入數據有一些隱式或者顯式的假設,那麼需要確保數據的分佈和模型的假設是一致的。線性迴歸用的是平方誤差,所以一般假設誤差是服從高斯分佈的。(這也是線性迴歸需要做歸一化的一個原因,一個原因是保障梯度優化時一致,減少震盪;還有一個是對數據歸一化,onehot來變換數據,使得數據服從高斯分佈。有時候數據的取值差的很多,onehot後,就能近似高斯。)

特徵處理常見方式:


1.截斷
  數據精度的截斷,有時候很多數據不需要太大的精度,比如金額,幾分幾分的不需要,精確到元就可以了。
2.離散化。分桶
連續性特徵離散化,有時候精度很小,可能只是噪聲。我們只需要保留必要的信息就可以了。離散化後可以把連續的特徵當作類別特徵。而且連續特徵在不同數據段的分佈不一致,離散化可以挖掘出這些信息。而一些長尾的信息,比如一些少量的很大的值,可以用對數轉換。
3.二值化
數值特徵的一種常用類型是計數特徵,點擊量等等;轉變爲用戶是否訪問過
4.縮放
數據歸一化(多種歸一化方式,l2,l1,標準化,對數縮放(對長尾數據很有效,能縮小長尾數據大端數據,擴大小端的數據))

5.缺失值處理
缺失數據可以補充,用均值,中值,差值,0值;對於特徵分佈是高斯分佈的,用均值填充;長尾的用中值,連續特徵用前後差值;不知道怎麼填的連續特徵用0值,或者單獨把缺失數據的提取出一列,作爲新的特徵;還可以訓練一個單獨的模型來預測出缺失值,這個可以作爲用戶畫像。或者不處理,現在有很多模型可以直接處理缺失數據,入xgboost,直接學習出分裂方向來處理缺失數據。
6.特徵交叉
來發現一些,非線形的特徵,對兩個特徵進行加,減,乘,除,可以通過特徵選擇方法;
用特徵選擇(統計檢驗或者模型的特徵重要性)或者直覺來選擇一些有用的交叉;現在很多模型可以自動學習特徵交叉組合,如FM,FFM等。

7.非線形編碼
如用核函數,比如高斯核,多項式核等來做非線形映射;像SVM一樣;

 

解決非線形問題:

1.svm的核函數,
2.樹模型
3.深度學習
4.特徵交叉

 

文本特徵

    現在nlp這塊快被DL佔領,但是一些機器學習算法還是很有效,文本特徵產生的數據比較稀疏,如BOW。
文本預處理:字符大小寫統一,分詞,去除無用字符,提取詞根,拼寫糾錯,詞幹提取,標點符號編碼,文檔特徵,實體插入和提取,word2vec,文本相似性,去除停用詞,去除稀有詞,TF-IDF,LDA,LSA等。
文本統計特徵:不考慮詞順序,計算文本長度,單詞個數,數字個數,字母個數,大小寫單詞個數,大小寫字母個數,標點符號個數,
特徵字符個數,數字佔比,字母佔比,特殊字符佔比等,以及名詞個數,動詞個數等;

餘弦相似度,jaccard傑卡德相似度
編輯距離:兩個字符串由一個轉化成另外一個所需要的最少的編輯操作次數,word2vec

特徵選擇
目的:
1. 簡化模型,讓模型更加具有可解釋性,高可解釋性可以讓模型穩定性更有把握,而且也爲業務運營工作提供指引和決策;
2. 改善性能
3. 降低過擬合風險

特徵選擇方法:去掉方差小的特徵,pearson相關係數,協方差,基於模型的特徵排序,LASSO通過l1懲罰,讓特定的迴歸係數變成0;

持續總結中。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章