一.問題建模
1.評價指標
1.1分類指標
-
二分類
-
精確率
-
召回率
-
F1值
-
P-R曲線
-
ROC曲線
- 橫軸爲假正率FPF=FP/(FP+TN),縱軸爲真正率TPR=TP/(TP+FN)
-
AUC
- 直接計算ROC曲線下的面積 Wilcoxon-Mann-Witney Test:測試任意給一個正類樣本和一個負類樣本,正類樣本的score有多大機率大於負類樣本的score.
- 兩種計算方法: O(M * N):統計一下全部的M*N個正負樣本對中,有多少個組中的正樣本中的score大於負樣本的socre,而後除以MN,M/N爲正/負樣本的個數 O(M + N):首先對score從大到小排序,而後令最大score對應的sample 的rank爲n,第二大score對應sample的rank爲n-1,以此類推。而後把全部的正類樣本的rank相加,再減去M-1種兩個正樣本組合的狀況。獲得的就是全部的樣本中有多少對正類樣本的score大於負類樣本的score。而後再除以M×N。
-
對數損失
-
多分類
1.2迴歸指標
-
平均絕對偏差MAE
-
平均絕對百分偏差MAPR
-
均分根偏差RMSE
1.3聚類指標
1.4排序指標
2.樣本選擇
2.1好處
- 縮短模型的時間;具體問題不須要所有信息;去除噪聲數據
2.2數據噪聲
- 特徵值缺失
- 特徵值超出值域範圍
- 誤標註:二分類正樣本標註爲負樣本
- 集成過濾法(Ensembel filter,EF)
- 交叉驗證委員會過濾法(Cross-validated committees filter,CVCF)
- 迭代分割過濾法(Iterative partitioning filter,IPF)
- 清洗爬蟲數據
- 過濾無效曝光樣本
2.3採樣
- 好處
- 克服高維特徵以及大量數據致使的問題,有助於下降成本,縮短期甚至提高效果
- 採樣方法:
- 無放回的簡單抽樣:每條樣本被採到的機率相等且都爲1/N
- 有放回的簡單抽樣:每條樣本可能屢次被選中
- 平衡採樣,考慮正負比例
- 總體採樣
- 先將數據集T中的數據分組成G個互斥的簇,而後再從G個簇中簡單隨機採樣s個簇做爲樣本集.
- 分層採樣
- 數據集T劃分紅不一樣的層,而後在每層內部進行簡單隨機抽樣,最後彙總成樣本集合S.該方法也經常使用於不平衡分類問題中,對每一個類別進行採樣,能使每一個類別在樣本集S中的分佈和數據集T中的分佈更爲一致.
2.4原型選擇
- 基於實例的方法,在樣本選擇過程當中不須要訓練模型,而是選取類似度或距離度量標準來找到分類精度和數據量最佳的訓練集,多數採用KNN算法
- 根據從數據集T中選擇樣本集S的方法分類
- 根據選擇樣本的策略進行分類
- 包裝法:根據模型的目標函數,通常是模型預測結果來進行樣本選擇
- 過濾法:樣本的選擇標準不基於模型
- 根據選擇的樣本進行分類
- condensation:保留決策邊界處樣本
- Edition:刪除邊界的異常點,使得邊界更平滑
- Hybrid:嘗試找到最小的樣本集S,可以保持甚至提高測試集上的泛化精度
2.5訓練集選擇
- 構建預測模型來進行樣本選擇,好比決策樹、ANN和SVM
3.交叉驗證
3.1留出法
- 將數據集隨機劃分爲互斥的訓練集和測試集
- 缺點:訓練集和測試集的劃分驗證影響最終結果
- 適用場景:數據有明顯的時間序列因素,即線上數據的時間都在離線數據集以後
- 屢次留出法:考慮到單詞留出法獲得的結論每每不靠譜,咱們進行屢次留出法,每次隨機劃分,最終將屢次獲得的實驗結論進行平均.
3.2K折交叉驗證
- 好比分紅5份,每次用其餘的4份做爲訓練集,用該份進行驗證;能夠訓練5次
- K值過小實驗穩定性偏低,K值太大有可能致使實驗成本高,經常使用K爲5,10
- 留一法=N折交叉驗證
- K=N時,就是留一法(Leave-one-out,LLO)即每一條樣本當測試集,其他數據做訓練
- 訓練N個模型,每一個模型都基本用到了所有的數據,獲得的模型和所有數據D獲得的模型更類似,而且再也不受隨機樣本劃分方式的影響,由於劃分方式只有一種了.可是當數據量N很大時,計算成本很是高,當數據稀疏時,LOO很適用.
- 分層K折交叉驗證(stratified K-Fold)
3.3自助法Boostraping
- n個樣本的樣本集,重複有放回採樣取n次,分紅訓練集和測試集
- 缺點:自助法改變了初始數據集的分佈,會引入估計誤差
總結
- 數據量足夠時,通常採用留出法和交叉驗證法;
- 數據量較小時,而且難以有效區分訓練集和測試集時,自助法頗有用.
二.特徵工程
數據和特徵決定了機器學習算法的上限,而模型和算法只是不斷逼近這個上限而已.算法
1.特徵提取
1.1探索性的數據分析(Exploratory Data Analysis)
- 發現內部數據的規律、檢測異常值.
- 可視化技術:箱型圖/直方圖/多變量圖/鏈圖/帕累託圖/散點圖/莖葉圖
- 定量技術:均值/方差/分位數/峯度/偏度
1.2數值特徵
-
截斷
- 連續型的數值進行截斷或者對長尾數據進行對數後截斷(保留重要信息的前提下對特徵進行截斷,截斷後的特徵也能夠看做是類別特徵)
-
二值化
- 如網站天天的訪問量、餐廳的評論數、用戶對一首歌的播放次數.大數據時代,計算能夠很是快地增長,處理計算特徵時,首先要考慮,保留爲原始計數仍是轉換爲二值變量來標識是否存在或者進行分桶操做.
-
分桶
- 均勻分桶:如商品的評論次數、年齡
- 分位數分桶:若是數值變量的取值存在很大間隔時,有些桶裏沒有數據,能夠基於數據的分佈進行分桶,例如利用聚類將特徵分爲多個類別.
-
縮放
- 標準化縮放(Z縮放)
- 最大最小值縮放
- 最大絕對值縮放
- 範數歸一化:如使用L1範數、L2範數將數值向量的範數變爲1
- 平方根縮放、對數縮放
- 對數縮放適用於處理長尾分且取值爲正數的數值變量
- 兩者都是方差穩定的變換,冪變換的特例
- Box-Cox轉換僅對取值爲正數的特徵起做用
- 對於有異常點的數據,可使用更加健壯的縮放,與通常的標準化基於標準差進行縮放不一樣的是,健壯的縮放使用中位數而不是均值,基於分位數而不是方差.
-
缺失值處理
- 補均值、中位數
- 使用模型預測缺失值
- 直接忽略,即將缺失做爲一種信息進行編碼餵給模型讓其進行學習,如今有一些模型能夠直接處理缺失值,如Xgboost模型能夠處理缺失特徵
-
特徵交叉
- 針對兩個數值特徵作加減乘除,能夠經過特徵選擇方法(如統計檢驗或者模型的特徵重要性)來選擇有用的交叉組合.有些特徵交叉組合,雖然沒有直觀的解釋,但有可能對於模型效果有很大的提高
- 自動進行特徵交叉組合,如FM/FFM,特徵交叉能夠在線性模型中引入非線性模型,提高模型的表達能力.
-
非線性編碼
- 線性模型每每很難學習到數據中的非線性關係,除特徵交叉以外,也能夠經過非線性編碼來提高線性模型的效果.例如使用多項式核,高斯核等
- 將隨機森林模型的葉節點進行編碼餵給線性模型,這樣線性模型的特徵包含了複雜的非線性信息
- 基因算法/局部線性嵌入/譜嵌入/t-SNE等
-
行統計量
- 統計行向量中空值的個數、0的個數、正值或負值的個數
- 均值、方差、最大值、最小值、偏度、峯度
1.3類別特徵
-
天然數編碼
- 含有大小關係的數據,好比學生考試成績,分爲高中低三檔,1表示高,2表示中,3表示低
-
獨熱編碼
- 處理不具備大小關係的特徵
- 缺點:
- 會生成稀疏向量;
- KNN在高緯度下兩點之間的距離很難進行有效的衡量,在LR模型中,參數的數量會隨着維度的增高而增長,任意引發過擬合現象.
-
分層編碼
- 如郵政編碼、身份證等,能夠取不一樣維數進行分層,而後按層次進行天然數編碼
-
散列編碼
- 取值特別多的類別特徵,使用獨熱編碼獲得的特徵矩陣很是稀疏,所以在進行獨熱編碼以前能夠先對類別進行散列編碼,能夠避免特徵矩陣過於稀疏
- 缺點:可能會致使特徵取值衝突,這種衝突一般會削弱模型的效果,天然數編碼和分層編碼能夠看做散列編碼的特例.
-
計數編碼
- 將類別特徵用其對應的計數來代替,這對線性和非線性模型都有效.
- 缺點:對異常值比較敏感,特徵取值有可能衝突.
-
計數排名編碼
- 利用計數的排名對類別特徵進行編碼,這對線性和非線性模型都有效
- 缺點:對異常值不敏感,類別特徵取值不會衝突
-
目標編碼
- 基於目標變量對類別特徵進行編碼,對於基數(類別變量全部可能不一樣取值的個數)很大的離散特徵,例如IP地址、網站域名、城市名、家庭地址、街道、產品編號等,用天然數編碼,簡單模型任意欠擬合,而複雜模型任意過擬合;對於獨熱編碼,獲得的特徵矩陣太稀疏.對於高基數類別變量,有效方式是基於目標變量對類別特徵進行編碼,即有監督的編碼方式,適用於分類和迴歸問題.
- 分類:採用交叉驗證的方式,即將本來劃分爲5份,針對其中每一份數據,計算離散特徵每一個取值在另外4份數據中每一個類別的比例.爲了不過擬合,也能夠採用嵌套的交叉驗證劃分方法;迴歸問題一樣採用交叉驗證的方式計算目標變量均值對類別變量編碼.
- 目標編碼對於基數較低的離散變量一般頗有效,但對於基數特別高的離散數量,可能會有過擬合的風險,對於不少類別特徵的取值樣本個數太少,不具備統計意義.這種狀況,一般採用貝葉斯方式,即對統計特徵進行貝葉斯平滑,如拉普拉斯平滑或者先驗機率和後驗機率加權平均的方式.
-
類別特徵之間交叉組合
- 兩個類別特徵進行笛卡爾積操做:適用於兩個(或多個)類別特徵的基數較小的狀況.
- 基於統計的組合
- 如針對城市ID和商品ID兩個類別特徵,能夠計算某個城市有多少不一樣的商品ID以及當前ID出現次數的分佈,從而獲得新的數值特徵,或計算某個城市出現次數最多的商品ID,從而獲得一個新的類別特徵.
- 對於多個類別特徵也能夠,如針對年齡、性別、產品ID三個類別特徵,能夠計算某個年齡段不一樣性別的人購買過多少產品或者對當前產品ID購買次數的分佈等.
-
類別特徵和數值特徵之間交叉組合
- 一般是在某個類別中計算數值特徵的一些統計量,如針對用戶ID,統計過去一段時間內在網站上的瀏覽次數、購買次數、以及購買價格的統計量,如均值、中位數、標準差、最大值和最小值等;針對產品,統計用戶對產品的評分、評價次數、購買次數、瀏覽次數等.
- 例如統計產品在某個區域的銷量、產品的價格、或者當前產品的價格跟產品所在區域內的平均價格的差價等.
1.4時間特徵
-
單個時間變量
- 年、月、日、時、分、秒、星期幾、年的第多少天、一天過了多少分鐘、季度、是否閏年、是否季度初、是否季度末、是否週末、是否營業時間、是否節假日
-
兩個時間變量之間
- 計算產品上線到如今通過了多少時間、顧客上次借款距離如今的時間間隔、兩個事件間隔是否包含節假日或其餘特殊日期等.
-
時間序列相關的特徵
- 如股票價格、天氣溫度、降雨量、訂單量等
- 若問題是利用歷史數據預測將來,則對於t時刻,能夠將t-一、t-2和t-3時刻的值也做爲特徵使用,若問題能夠考慮將來信息,則t+一、t+二、t+3時刻的值也能夠做爲特徵使用【時間窗口寬度爲1】
-
基於滑動窗口統計特徵
- 如計算前n個值的均值(迴歸問題),或者前n個值中每一個類別的分佈(分類問題),時間窗口的選取能夠有多種方式,上面提到的滯後特徵是滑動窗口統計的一種特例,另外一種經常使用的窗口設置包含全部歷史數據,稱爲擴展窗口統計.
1.5空間特徵
-
經緯度
- 作散列處理,從而對空間區域進行分塊,獲得一個類別特徵
- 能夠經過座標拾取系統得到當前位置的行政區ID、街道ID、城市ID等類別特徵,從而進行類別特徵的處理方式進行特徵預處理.
-
計算兩個位置之間的距離
- 如用戶到超市或者電影院、餐廳的距離.距離的計算方式有不少種,例如能夠計算歐氏距離、球面距離、曼哈頓距離,也能夠是真實的街道距離.
1.6文本特徵
-
預處理
- 將字符轉化爲小寫、分詞、去除無用字符、提取詞根、詞幹提取、標點符號編碼、文檔特徵、實體插入和提取、word2vec、文本類似性、去除停用詞、去除稀有詞、TF-IDF、LDA、LSA等
-
語料構建
- 構建一個由文檔或短語組成的矩陣,矩陣的每一行爲文檔,能夠理解爲對產品的描述,每一列爲單詞,一般,文檔的個數與樣本的個數一致
-
文本清洗
- 若是數據經過網頁抓取,首先提出文本中的HTML標記;
- 停用詞只用於語句的構建,但不包含任何真實的信息,所以須要剔除,
- 爲了不文本中的大小寫差別,整個文本一般轉換爲小寫形式;
- 統一編碼;去除標點符號;去除數字;去除空格;還原爲詞根.
- 可是在某些狀況下,文本不必定須要進行清洗,這取決於具體的應用場景.例如考慮某編輯員對某物品的描述,若是咱們關心的對象是物品,則須要去除噪聲,保留關鍵信息,但若是咱們關心的對象是編輯員,則噪聲信息必定程度上反映了此編輯員的水平.
-
分詞
-
詞性標註
- 名詞、動詞、形容詞;詞性標註能夠幫助咱們瞭解語言的內在結構
-
詞形還原和詞幹提取
- 詞性還原能夠任何形式的語言還原爲通常形式(能完整表達語義)
- 詞幹提取是抽取詞的詞幹和詞根形式(不必定能表達完整語義)
-
文本統計特徵
- 不須要考慮詞序信息,包括計算文本的長度、單詞個數、數字個數、字母個數、大小寫單詞個數、大小寫字母個數、標點符號個數、特殊字符個數等,數字佔比、字母佔比、特殊字符佔比等,以及名詞個數、動詞個數等.
-
N-Gram模型
- 將文本轉換爲連續序列,序列的每一項包含n個元素(能夠是單詞),這種想法是將一個或者兩個甚至多個單詞同時出現的信息餵給模型.3-Gram是經常使用的選擇
-
Skip-Gram模型
-
詞集模型
- 將文本轉換爲實數或實向量;在詞集模型中,向量中的每一個份量的取值爲0和1,表明單詞是否在文檔彙總出現,向量空間模型沒有考慮詞序信息
-
詞袋模型
- 向量的每一個份量的取值爲單詞在文檔中的詞頻,爲了不向量維度太大,一般會過濾掉在文檔集合中詞頻很小的單詞.
-
TF-IDF
- TF(Term Frequency,詞頻)
- IDF(Inverese Document Frequency逆文檔頻率),用於評估單詞對於文件集或語料庫中的其中一份文件的重要程度.
- 單詞或短語的重要性隨着它在文檔中出現的次數成正比增長,同時隨着它在語料庫中出現的頻率成反比降低.
- 能夠基於文檔的TF-IDF向量表示計算文檔之間的類似度,但不能很好地表示特別長的文檔,並且這種向量表示也沒有考慮詞序信息.基於TF-IDF和詞袋模型獲得的表示文本的向量每每維度很是大,所以實際應用中通常須要降維處理.
-
餘弦類似度
- 計算檢索詞q和文檔d之間的相關性.如將檢索詞和文檔都表示爲向量,計算兩個向量之間的餘弦類似度.
-
Jaccard類似度
- 兩個文檔中相交的單詞個數除以兩個文檔出現單詞的總和.
-
Levenshtein(編輯距離)
- 指兩個字符串由一個轉成另一個所須要的最少編輯操做(如插入、刪除、替換)次數,它也是衡量兩個字符串類似度的指標
-
隱性語義分析
- 把高維的向量空間模型表示的文檔映射到低維的潛在語義空間中,即採用將文檔或詞矩陣進行SVD分解,因爲SVD分解自己是對文檔特徵進行排序,咱們能夠經過限制奇異值的個數對數據進行降噪和降維.通常而言,文檔和文檔或者文檔和查詢之間的類似性在簡化的潛在語義空間的表達更爲可靠.
-
Word2Vec
- 即將單詞所在的空間映射到一個低維的向量空間中,這樣每一個單詞對應一個向量,經過計算向量之間的餘弦類似度就能夠獲得某個單詞的同義詞.
2.特徵選擇
2.1目的
- 簡化模型;提升性能,減小內存和計算開銷;改善通用性、下降過擬合
2.2前提
- 訓練數據中包含許多冗餘或者無關的特徵,移除這些特徵並不會致使丟失信息
2.3過程
- 特徵產生過程
- 評價函數 - 衡量特徵或特徵子集的重要性或者好壞程度,所以須要量化特徵變量和目標變量之間的聯繫以及特徵之間的相互關係.爲了不過擬合,通常採用交叉驗證的方式來評估特徵的好壞
- 中止準則
- 爲了減小計算複雜度,能夠設定一個閾值,當評價指標達到閾值後搜索中止
- 驗證過程
2.4方法
2.4.1過濾法
因爲過濾方法與具體的機器學習算法獨立,所以過濾方法沒有考慮選擇的特徵集合在具體機器學習算法上的效果.封裝方法直接使用機器學習算法評估特徵子集的效果,它能夠檢測出兩個或多個特徵之間的交互關係,並且選擇的特徵子集讓模型的效果達到最優.網絡
2.4.2封裝方法
-
徹底搜索
-
啓發式搜索
-
思想:先用少許特徵,再慢慢加函數
-
方法:工具
-
序列向前選擇
-
序列向後選擇
-
雙向搜索
- 同時使用序列向前選擇和向後選擇,當二者搜索到相同的特徵子集時中止
-
增L去R
-
序列浮動選擇
-
隨機搜索
- 思想:執行序列向前或者向後選擇的時候,此算法隨機選擇特徵子集
- 模擬退火、隨機登山、基因算法
過濾方法與機器學習算法相互獨立,並且不須要交叉驗證,計算效率比較高,可是過濾算法沒有考慮機器學習算法的特色;封裝方法使用預先定義的機器學習算法來評估特徵子集的質量,須要不少次訓練模型,計算效率很低;嵌入方法則將特徵選擇嵌入到模型的構建過程當中,具備封裝方法與機器學習算法相結合的優勢,並且具備過濾方法計算效率高的優勢,是實際應用中最經常使用的方法.性能
2.4.3嵌入方法
-
Lasso迴歸
-
經過對迴歸係數添加L1懲罰項來防止過擬合,可讓特定的迴歸係數變爲0,從而能夠選擇一個不包含那些係數的更簡單的模型.lambta越大,迴歸係數越稀疏,lambta通常用交叉驗證的方法來肯定;任何廣義線性模型如邏輯迴歸/FM/FFM/神經網絡模型,均可以添加L1懲罰項學習
-
基於樹模型
- 能夠基於樹模型中特徵出現次數等指標對特徵進行重要性排序;深度較淺的節點通常特徵分類能力更強(能夠將更多的樣本區分開)
- 如決策樹、隨機森林、梯度提高樹
-
SVM
-
工具包
- 通常機器學習包的線性模型都支持L1正則,如Spark MLlib和Sklearn
- sklearn中的隨機森林;Xgboost包,支持根據不一樣指標(如增益或者分裂次數)對特徵進行排序
三.模型選擇
1.分類
傳統機器學習:測試
深度學習:大數據
2.迴歸
傳統機器學習:
深度學習:
四.模型融合
1.定義
- 單模型即從數據訓練而來的模型,也叫做基學習器、個體學習器、組件學習器
- 若是單模型是同一種模型,叫做同質模型融合;不然稱異質模型融合
2.融合的意義
- 統計的角度:平均假設,能夠獲得一個逼近f的優化假設
- 計算的角度:同一份數據集,從不一樣的出發點進行計算
- 表示的角度:模型融合使得假設空間擴大
3.融合的理論
- 模型的偏差分歧:單模型的差別性越大,最後融合的效果就越好
- 多樣性獨立:不一致度量、相關係數、Q統計、K統計、雙次失敗度量、KW差別、k度量、熵度量
- 多樣性加強:數據樣本的擾動、屬性的擾動、輸出的擾動、算法參數的擾動
4.融合的方法
-
4.1Bagging
-
4.2Boosting
-
思想
- 每一次都根據上一次訓練獲得的模型結果,調整數據集樣本分佈,而後再生成下一個模型;
- 直到生成M個模型;
- 根據M個模型的結果集成獲得最終的結果;
-
集成方式
每一個模型的重要度做爲每一個模型結果的權重,而後加權計算得出結果。
能夠看出Boosting中生成多個模型的方式並非和Bagging同樣並行生成,而是串行生成,所以也決定了多個模型結果的集成是串行集成,也就是每一個模型的結果權重並非同樣的。如何來調整樣本分佈以及計算模型的重要度,不一樣方法有不一樣的定義,詳情參見具體方法。
-
表明方法
-
AdaBoost
-
GBDT
-
XGBoost
-
LightGBM
-
CatBoost
-
4.3Stacking
-
4.4Blending