為了構建乙個模型,我們需要經歷以下步驟。
step-1:資料準備。
step-3:測試——將測試集資料輸入給訓練獲得的模型,得到**結果;再將**結果與這些資料原本預期的結果進行比較。
將全部資料分割成訓練集、驗證集和測試集。這些集合都是做什麼的呢?
訓練集(train set):用來做訓練的資料的集合。
測試集(test set):用來測試的資料的集合,用於檢驗最終得出的模型的效能。
step-2 訓練,又可以細化為幾個步驟。
step-2.1: 編寫訓練程式。
step-2.1.1: 選擇模型型別;
step-2.1.2: 選擇優化演算法;
step-2.1.3: 根據模型型別和演算法編寫程式。
step-2.2: 訓練 -> 獲得臨時模型。
step-2.3: 在訓練集上執行臨時模型,獲得訓練集**結果。
step-2.4: 在驗證集上執行臨時模型,獲得驗證集**結果。
step-2.5: 綜合參照 step-2.3 和 step-2.4 的**結果,改進模型。
step-2.6: step-2.2 到 step-2.5 反覆迭代,直至獲得讓我們滿意,或者已經無法繼續優化的模型。
如何優化模型
對照機器學習三要素,模型的優化可以從三個方面來進行:資料、調參和模型型別。
有限的資料上,我們能做些什麼來盡量提高其質量呢?大概有如下手段:
1.對資料進行歸一化(normalization,又譯作正規化、標準化)等操作。
2.採用 bootstrap 等取樣方法處理有限的訓練/測試資料,以達到更好的運算效果。
3.根據業務進行特徵選取:從業務角度區分輸入資料報含的特徵,並理解這些特徵對結果的貢獻。
調整超引數,例如用梯度下降方法學習 lr 模型時的步長(alpha),用 bfgs 方法學習 linear-chain crf 時的權重(w)等。
調參本身有點像乙個完整的 project,需要經歷:
制定目標
制定策略
執行驗證
調整策略 -> 3
這樣乙個完整的過程,其中 3-5 往往要經由多次迭代
調參有許多現成的方法可循(比如 grid search),應用這些方法,使得制定和調整「調參策略」有章可循,也可以減少許多任務作量。
調參這一步很多時候沒有一定之規。特別是在超引數比較多的時候,如何組合調參簡直可以稱為一門藝術。
只有當調參工程師對於模型的理論原理和演算法的執行細節有深入了解的時候,才有可能找到正確的調參方向。
模型型別選擇
有的時候,訓練資料已經確定,而某個模型再怎麼調參,都無法滿足在某個特定指標上的要求。那就只好換個模型試試了。
比如,對於某個分類問題,logistic regression 不行,可以換 decision tree 或者 svm 試試。
對於深度模型(cnn、dnn、rnn、lstm 等等),訓練時間普遍較長,可解釋性極弱,一旦出現問題,很難 debug。因此再次建議大家:在應用場景下,不要迷信 cutting-edge technology,無論工具還是方法,選合適的
16 4 4 概念 改進和模型(中)
stl提供了一些預定義迭代器 copy argument1,argument2,argument3 演算法 該演算法可以將資料從乙個容器複製到另乙個容器中。這種演算法是以 迭代器方式實現的,所以它可以從一種容器到另一種容器進行複製 ostream iterator模板 用stl的話說,該模版是輸出迭...
改進向量空間模型
宣告 只是對向量空間模型的介紹 或者叫推廣 並沒有理論創新工作。本人在之前的 向量空間模型 vsm 在文件相似度計算上的簡單介紹 和 向量空間模型文件相似度計算實現 c 兩篇文章中分別介紹了簡單 svm模型及其實現。本人使用簡單詞頻 即詞在當前文件中出現的次數 資訊,實現了乙個樸素版本的向量空間模型...
改進向量空間模型
宣告 只是對向量空間模型的介紹 或者叫推廣 並沒有理論創新工作。本人在之前的 向量空間模型 vsm 在文件相似度計算上的簡單介紹 和 向量空間模型文件相似度計算實現 c 兩篇文章中分別介紹了簡單 svm模型及其實現。本人使用簡單詞頻 即詞在當前文件中出現的次數 資訊,實現了乙個樸素版本的向量空間模型...