分類分析 & 回歸分析
分類分析
分類分析,簡單地說就是把數據分成不同類別。前面已經介紹了各種可用於分類的方法,下圖是一些常見分類方法在幾個簡單數據上的大致分類效果:
那麼,該如何選擇合適的分類方法?
首先,如果我們知道數據的分布很有可能不是線性的,那麼類似「線性SVM」 這樣的方法就需要被排除掉,用線性方法去分類非線性數據的效果肯定是不好的。
如果我們能夠確定數據的特徵相互之間有比較好的獨立性,那麼「樸素貝葉斯」方法是比較適合的一種方法,同時它的計算簡單、效率高。
另外,分類方法的選擇還和數據量的大小很有關係。簡單來說,如果數據量比較小,也就是說用於判斷數據分布的樣本量可能不足的情況下,選擇一些相對簡單的方法會更好一些,因為如果選擇複雜的方法,很容易在樣本不足的情況下產生過擬合的情況(樣本不足而方法複雜,可能很多噪音和誤差會被誤認為是特徵);反之,如果有大量的數據,那麼可以更優先選擇複雜的、集成的方法,這樣能提升模型的整體性能。
相對比較簡單的方法有「最近鄰」、「決策樹」、「高斯過程」,在數據量比較小的時候可以嘗試這些方法。相反,如果數據量比較大,那麼應當嘗試「核化SVM」、「神經網路」以及「隨機森林」、「梯度提升」等集成方法。
實際應用中,很多場景通常數據量都比較大,目前看,使用較多、效果較好的是基於決策樹的「隨機森林」,以及基於決策樹的「梯度提升」方法(Gradient Boosting Decision Tree,簡稱 GBDT)。「核化SVM」的效果也不錯,可以作為一個備選方法,但要得到一個合適的核函數可能需要多次運行測試,另外,它和「神經網路」都會面臨反覆調參的工作。
回歸分析
回歸分析,就是試圖通過有限的離散樣本,去發現連續數據的分布規律。下圖是一些常見的回歸方法在一個簡單數據上的回歸效果:
對回歸方法的選擇,某種程度和分類方法的選擇有類似之處。
首先,看是否能假設數據的分布情況。如果可以通過領域知識,可以預先判斷數據的基本規律,那麼就可以有針對地選擇方法。比如數據是符合線性規律的,那麼就可以有針對地選擇「線性回歸」(Linear Regression)方法;如果數據呈梯度上升的現象,可以考慮嘗試「保序回歸」(Isotonic Regression)方法。
像「最近鄰」、「高斯過程」、「決策樹」這樣比較簡單的方法,比較適用於數據量較小的時候,數據量較大的時候,應當嘗試「隨機森林」、「梯度提升」等集成方法。
如果回歸的效果太好,需要注意是否產生了過擬合的現象,特別是對於樣本數據比較少的時候,需要特別加以注意。「神經網路」的效果和網路類型、參數設置關係很大,而且一般必須數據規模達到一定級別才有較好的效果,這已經成為現代人工智慧一個重要技術領域:「深度學習」。
對於分類和回歸,還可以嘗試自動化的選擇工具,如 TPOT( https://github.com/rhiever/tpot ),下面看一個使用 TPOT 自動選擇回歸方法的例子:
from tpot import TPOTRegressorfrom sklearn.datasets import load_bostonfrom sklearn.model_selection import train_test_splithousing = load_boston()X_train, X_test, y_train, y_test = train_test_split(housing.data, housing.target, train_size=0.75, test_size=0.25)tpot = TPOTRegressor(generations=5, population_size=20, verbosity=2)tpot.fit(X_train, y_train)tpot.export(tpot_pipeline.py) # 選擇最優回歸方法,輸出可執行的代碼
運行過程和結果:
在這個例子中,TPOT 不僅可以自動評價不同方法的優劣,還自動生成了可執行的 Python 代碼。採用這樣的工具可以在方法選擇和驗證環節節省大量精力,得到一個至少不錯的基準線結果。
推薦閱讀:
※論術前溝通的重要性&我對雙眼皮平行、平扇、開扇的分類
※如何正確認識自己的膚質?
※深度學習中的動手實踐:在CIFAR-10上進行圖像分類
※Evaluation(驗證指標,主要是二分類)
※【論文閱讀】Learning Deep Representations of Fine-Grained Visual Descriptions