最后是文本變量。很遺憾Titanic數據集中沒有合適的文本變量。一般我們處理文本變量的方法是,合并所有的文本形成一個變量,然后調用Count Vectorizer或者TfidfVectorizer算法,將文本數據轉換成數字。
大部分情況下,TfidfVectorizer比CountVectorizer表現更好;而且,下面一組參數幾乎任何時候都有效。
如果你只在訓練集上使用這些文本向量,請把它們保存到磁盤,以便在驗證集上繼續使用。
3. 正則化特征,特征選擇
然后,我們來到了棧模塊(stack module),這里的棧不是模型棧而是特征棧。在經過上一步的處理后,我們得到了不同的特征。
根據你得到的是稠密特征還是稀疏特征,你可以使用numpy模塊的hstack或者sparse hstack把所有特征存進一個棧。
如果還有其他處理過程,比如PCA或者特征選擇,我們還可以使用FeatureUnion模塊。本文后面會繼續提到分解和特征選擇。
有了上面的特征,我們就可以開始應用機器學習模型了。現階段,你只需要考慮基于樹的模型就足夠了。這些模型包括:
隨機森林分類器 RandomForestClassifier
隨機森林回歸器 RandomForestRegressor
ExtraTreesClassifier
ExtraTreesRegressor
XGBClassifier
XGBRegressor
在直接使用上面的特征之前,首先需要進行正則化。對于使用線性模型而言,我們可以選擇scikit-learn中的Normalizer或者StandardScaler。這些正則方法只針對稠密特征有效,在稀疏特征上不會給出好的結果。
假如上面的過程得到了一個“好的”模型,那我們可以繼續優化超參數;假如沒有得到
“足夠好的”模型,我們可以通過下面的方法繼續優化模型。
下一步包含分解方法:
PCA
為了簡單起見,我們不談LDA和QDA變換。對高維數據,一般采用PCA算法分解數據。對圖片數據,我們從10-15個components開始逐漸增加,直到結果質量充分提高;對其他類型數據,我們初始選擇50-60個components。
SVD
對于文本數據,在文本轉換成稀疏矩陣后,使用奇異值分解(Singular Value Decomposition, SVD)轉換數據。Scikit-learn提供了一份SVD的變種算法TruncatedSVD。
對于TF-IDF或者count向量化方法,SVD的components個數選擇120-200之間一般是有效果的。更高的components個數會提高效果,但也需要更高的計算代價。
貪心特征選擇
有多種方法達到特征選擇的目的,其中最常見的一個是貪心特征選擇(向前或向后)。在貪心特征選擇中,我們選擇一個特征,訓練一個模型,然后在一項固定的指標上評估模型表現。然后我們一個一個地添加或者刪除特征,記錄每一步中模型的表現。最后選擇讓模型表現最好的特征集。貪心特征選擇的一種實現,可以參考這里
Gradient Boosting Machine
特征選擇還可以通過Gradient Boosting Machine達到。推薦使用xgboost代替scikit-learn中的GBM實現,因為xgboost更快而且更加具有可伸縮性。
4. 模型選擇,超參數優化
我們一般采用下面的算法選擇機器學習模型:
分類
隨機森林 Random Forest
GBM
邏輯回歸 Logistic Regression
樸素貝葉斯 Naive Bayes
支持向量機 Support Vector Machine
k近鄰 k-Nearest Neighbors
回歸
隨機森林 Random Forest
GBM
線性回歸 Linear Regression
嶺回歸 Ridge
Lasso
SVR
下面是作者給出他建議的模型和相對應的經驗參數值,參數的選擇經過時間和數據的積累。作者號稱,上面的模型和參數組合已經超過了其他所有的模型。
5. 保存轉換器
最后,記得保存轉換器,在驗證集應用訓練出的模型。
三、總結
1.識別問題的類型,數據分割成兩部分:訓練集,驗證集
2.識別數據中的變量,形成特征
3.正則化征,選擇特征
4.選擇模型,優化超參數
5.保存轉換器
作者:renqHIT