下面這個人的筆記做的還不錯
http://www.cnblogs.com/jianzhitanqiao/p/5488659.html
1. Logistic回歸的決策函數是sigmoid函數,那么它的判定邊界怎么求
突然想通了,是f(z) = sigmoid(z)
當z >0時,輸出1
當z<0時,輸出0
那么函數z=0就是判定邊界
關于z的解析式可以是高次的多項式函數
邏輯回歸的損失函數:---如果將sigmoid函數代入最小二乘會得到一條并不收斂的曲線
Logistic回歸損失函數若使用最小二乘得到的是非凸函數,容易陷入局部的極小值。
解決方法:
似然函數進行極大似然估計
加入L2正則
LR對于樣本的處理
樣本太大怎么辦?
1. 采樣再 LR
2. 分布式上 spark mllib
3. 將特征 離散化為 0-1,這樣雖然訓練數據量沒有變,特征向量還變長了,
但是 因為 0-1 操作,使得計算速度變快
4. 連續(xù)值的特征,最好 scaling一樣,使得因子圖 不是 特別的細長,而是 圓形,這樣利于優(yōu)化的速度,這個也是可以 加速訓練的
--注意樣本的平衡
·-》對樣本分布敏感
--》下采樣 --》上采樣
--》修改loss func 給予不同權重
--》采樣后的預測結果,用排序作ok,用作判定請還原
--使用LR 的tech關于特征的聚類
提前,將一些特征先 hash,比如 uuid?
---LR也能用于特征選擇(去除theta為0的特征,選擇theta大的特征)
-------------關于模型調優(yōu)
假設只看模型:
---選擇合適的正則化(L1,L2,L1+L2):L2的準確度高一些,但是收斂時間長一些。L1是截斷性效益【可以做一定程度的特征選擇,數據量特別大用L1】
--正則化系數C(lambda)【表示懲罰程度有多高】
--收斂閾值e,迭代次數
--調整loss func給定不同權重
Bagging或其他方式的模型融合
--最優(yōu)化算法選擇(‘newton-cg’,'lbfgs'--spark里面用的這個,'liblinear'--默認使用梯度下降,'sag')
小樣本liblinear
大樣本sag
多分類‘newton-cg’和‘lbfgs’【也可以用liblinear和sag的one-vs-rest】
-----liblinear--常用庫【臺灣大學】
--------存儲方式:libsvm稀疏向量存儲格式,海量數據下單機速度還ok
-------高維度離散化特征,準確率逼近非線性切分
------參數調節(jié)方便
SKlearn中的LR實際上就是liblinear封裝的
L1正則和L2正則的區(qū)別
L2正則是一種縮放效應,會讓大部分特征都拿到權重但是,幅度小
L1正則是截斷式效應,有可能很多特征的權重會變?yōu)?
2. SVM適合數據量比較小的情況,因為計算量大
并且對于非均衡樣本,效果較差