作排序的話用LR和NN比較多,像GBDT這種模型也是能夠輸出機率值。面試
在噪聲的影響下,閾值y會有不少的浮動,若是絕對閾值作不了的話,那能不能找到一個相對閾值呢?能不能找一函數將連續的y值約束到某一個範圍內,常見的範圍是0-1(機率)。 算法
將離散值壓縮到0-1之間的連續值。 分類問題其實是在n維空間裏面試圖找到一條曲線或者超平面(多是曲面)作斷定的一個區分邊界。 Z=θ0+θ1_X1+θ2_X2, g(Z)=1/1+e^-Z 這個損失函數是不少個二次函數的疊加,走到局部最低點就不動了,因此不能用GD去作優化!!這是非凸函數,即有不少個窪點。 網絡
損失函數不必定都要求是非凸的,神經網絡裏面用的loss function就是非凸的,不過他用的是SGD,保證隨機找一個接近全局最優勢便可。函數
在正樣本的狀況下,若是h_θ(x)預測出來是正樣本機率很低0.01,那麼損失函數負log以後的損失值就會很是大。在負樣本的狀況下,若是h_θ(x)預測出來是正樣本機率很高0.99,那麼損失函數負log以後的損失值也會很是大。學習
若是預測的值和我真實的值差異越大,那麼損失函數計算的結果值就會越大。優化
-1/m是爲了方便計算。可是現實中的分類通常是多分類,不是二分類,在多分類的狀況下,使用的是上面式子的拓展形式。3d
隨着它不斷的接近谷底,他的斜率值會慢慢的變小,因此隨着梯度的計算 他的步長自動就會愈來愈小。 多分類經過多個二分類實現,取機率最大的那個!!在樣本不均衡的狀況,經過下采樣等方式讓樣本儘可能均衡。cdn
上採樣,經過拷貝樣原本達到樣本均衡會帶來一個問題 過擬合。千萬不要在樣本的量級相差極大的狀況下,試圖用上採樣的方式去解決unbalance的問題。blog
SVM+kernel理論上能夠作非線性分割,可是他比較慢,另外若是樣本不是很合適的話,效果也會不太好。工業界,特別是數據量大的時候,大部分用的都是linear LR或者linear SVM。 若是要完成一些非線性切分的話,你須要手動的去構造一些特徵,已經設定好的,高次的,能夠完成非線性切分的這樣一些映射,可是在工業界你很難知道怎樣去構造這些特徵。 排序
一個神經元完成邏輯與的操做。 兩個分類器+一個邏輯與操做完成分類任務。分批次,在每一個批次上求梯度。BP算法是來幫助求梯度的。 神經網絡裏面最優化算法叫SGD,而SGD要使用到梯度,因此求梯度要藉助於BP算法。
BP算法實際使用中,咱們是將每一層的導數直接先記下來,往前推的時候,連乘就行。在手工設定了神經網絡的層數,每層的神經元的個數,學習率 η(下面會提到)後,BP 算法會先隨機初始化每條鏈接線權重和偏置,而後對於訓練集中的每一個輸入 x 和輸出 y,BP 算法都會先執行前向傳輸獲得預測值,而後根據真實值與預測值之間的偏差執行逆向反饋更新神經網絡中每條鏈接線的權重和每層的偏好。在沒有到達中止條件的狀況下重複上述過程。
其中,中止條件能夠是下面這三條:
● 權重的更新低於某個閾值的時候
● 預測的錯誤率低於某個閾值
● 達到預設必定的迭代次數
若是數據量不是那麼大的話,能夠用RBF kernel,用注意加正則化項。若是數據量特別大的話,建議把特徵離散化,拉高維度,而後用linear SVM。
神經網絡的學習能力特別強,但它是個黑盒不具解釋性,可調性不高。
神經網絡要注意控制層數和樣本的個數。
LR的損失函數是交叉熵,SVM使用的是hinge loss。LR天生能夠產出機率,而SVM須要根據樣本到超平面的距離去作一個映射。LR簡單,可解釋性強。 SVM會有點慢,但他的健壯性很強,他不會由於樣本的不一樣分佈,而使得決策邊界左右移動。