寫在前面:強(qiáng)烈推薦閱讀此文提到的思考問題。
相關(guān)定義
對(duì)數(shù)幾率分布
設(shè)是連續(xù)隨機(jī)變量,
服從對(duì)數(shù)幾率分布是
具有以下分布函數(shù)和密度函數(shù)(分布函數(shù)的導(dǎo)數(shù)):
其中,稱為形狀參數(shù),值越小,在臨界點(diǎn)附近增長的越快。
下圖(來自《統(tǒng)計(jì)學(xué)習(xí)方法》-李航)為密度函數(shù)和分布函數(shù)的示意圖:
條件概率
來源:https://blog.csdn.net/u014722627/article/details/70332459
對(duì)于一組隨機(jī)變量,其中某些變量取特定值時(shí),其余變量的分布稱為條件概率分布。
假設(shè)數(shù)據(jù)集共有個(gè)樣本,記第
個(gè)樣本輸入(
維向量)和樣本標(biāo)簽分別為
,
,條件概率與參數(shù)
有關(guān),正確分類的條件概率可以寫為
,簡寫為
。
正確分類概率:
對(duì)正確分類概率取對(duì)數(shù)可以得到:
公式(s.2)等價(jià)于
稱為示例函數(shù),當(dāng)條件滿足時(shí)取1,條件不滿足時(shí)取 0.
在二分類問題中,表示滿足
,
表示滿足{y_i=0},因此可以寫為:
兩邊都取指數(shù),可以得到:
極大似然估計(jì)法
參考:
https://baike.baidu.com/item/%E6%9E%81%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1/3350286
https://wenku.baidu.com/view/0d9af6aa172ded630b1cb69a.html
極大似然估計(jì)法(the Principle of Maximum Likelihood )由高斯和費(fèi)希爾(R.A.Figher)先后提出,是被使用最廣泛的一種參數(shù)估計(jì)方法,該方法建立的依據(jù)是直觀的極大似然原理。
重要前提
訓(xùn)練樣本的分布能夠代表樣本的真實(shí)分布(滿足VC邊界),每個(gè)樣本集的樣本都是獨(dú)立同分布(iid)的隨機(jī)變量,且有充分多的訓(xùn)練樣本。
極大似然原理
在一次抽樣中,若得到觀測值 ,則選擇
作為
的估計(jì)值。使得當(dāng)
時(shí),樣本出現(xiàn)的概率最大。即 利用已知的樣本結(jié)果,反推最有可能(最大概率,可以認(rèn)為實(shí)驗(yàn)一次就出現(xiàn)的結(jié)果概率最大)導(dǎo)致這樣結(jié)果的參數(shù)。
極大似然估計(jì)法(MLE)
若總體 X 為離散型
X 取值的概率分布律為:
其中,為未知參數(shù),設(shè)
是取自總體的樣本容量為
的樣本,這組樣本的一組觀測值為
,可以得到樣本
取到觀測值
的概率為:
這一概率隨 的取值而變化,稱
為樣本的似然函數(shù)。
若總體X為連續(xù)型
X 的概率密度函數(shù)為,其中,
為未知參數(shù),設(shè)
是取自總體的樣本容量為
的樣本,這組樣本的一組觀測值為
,可以得到樣本
落到點(diǎn)
的臨邊(邊長分別為
的n維立方體)內(nèi)的概率近似為
,則函數(shù):
這一概率隨 的取值而變化,稱
為樣本的似然函數(shù)。
極大似然估計(jì)值
如果 ,則
為參數(shù)
的極大似然估計(jì)值。
形式變換
由于 與
有相同的極大值點(diǎn),連乘操作很容易由于數(shù)據(jù)量較大導(dǎo)致數(shù)據(jù)溢出,因此可以考慮對(duì)似然函數(shù)求對(duì)數(shù),由原來的乘法操作轉(zhuǎn)換為加法操作。
求解步驟
寫出似然函數(shù),
對(duì)似然函數(shù)取對(duì)數(shù),并整理;
-
對(duì)似然函數(shù)的對(duì)數(shù)對(duì)
求導(dǎo),建立方程組:
求解方程組得到
類別不平衡
不平衡問題是指分類任務(wù)中不同類別的訓(xùn)練樣本數(shù)目相差很多的情況。
缺少 高階連續(xù)凸函數(shù)、梯度下降法、牛頓法的定義
模型推導(dǎo)
對(duì)數(shù)幾率回歸解決的是二分類問題。對(duì)于二分類問題,其輸出標(biāo)記為 。
線性回歸模型產(chǎn)生的預(yù)測值為實(shí)值,因此,將實(shí)值轉(zhuǎn)換為 0/1 值即可通過線性回歸實(shí)現(xiàn)對(duì)數(shù)幾率回歸。
最理想的轉(zhuǎn)換方法為"單位階躍函數(shù)",即:預(yù)測值大于 0 則取 1 ,預(yù)測值小于 0 則 取 0,預(yù)測值等于 0 可以任意判別。
但是由于“單位階躍函數(shù)”不連續(xù),因此選擇近似“單位階躍函數(shù)”的對(duì)數(shù)幾率函數(shù)進(jìn)行“替代”,對(duì)數(shù)幾率函數(shù)連續(xù)并且單調(diào)可微,其表達(dá)式為:
將 代入,可以得到:
式(1.2)可以整理為:
式(1.3)即為對(duì)數(shù)幾率回歸模型,其中,稱為“幾率”,其中,
表示樣本
作為正例的可能性,
表示樣本
作為反例的可能性。對(duì)“幾率”取對(duì)數(shù),稱為“對(duì)數(shù)幾率”(log odds,也稱作 logit ),即式(1.3)等號(hào)左側(cè)的部分。
因此,式(1.3)中可以看做使用線性回歸模型的預(yù)測結(jié)果逼近真實(shí)標(biāo)記的“對(duì)數(shù)幾率”。
由于式(1.3) 表示樣本
作為正例的可能性,
表示樣本
作為反例的可能性。如果將
看做后驗(yàn)概率估計(jì)
,則有:
為了便于討論,另,
,那么,
,結(jié)合
,我們可以得到:
這里我們采用“極大似然法”來估計(jì)值。
給定數(shù)據(jù)集 ,我們的目標(biāo)是最大化“對(duì)數(shù)似然”:
即令每一個(gè)樣本屬于真實(shí)樣本的概率越大越好。
式(1.7)可以進(jìn)一步寫為:
因此,我們的目標(biāo)可以寫為:
式(1.9)即為對(duì)數(shù)幾率回歸的目標(biāo)函數(shù),我們對(duì)該目標(biāo)函數(shù)進(jìn)行求解即可得到最優(yōu)參數(shù)。
由于式(1.9)是關(guān)于 的高階可導(dǎo)連續(xù)凸函數(shù),根據(jù)凸優(yōu)化理論,經(jīng)典的數(shù)值優(yōu)化算法如梯度下降法,牛頓法都可以對(duì)其進(jìn)行求導(dǎo)。
softmax 回歸
來源:http://deeplearning.stanford.edu/wiki/index.php/Softmax%E5%9B%9E%E5%BD%92
參考:https://www.cnblogs.com/Deep-Learning/p/7073744.html
logistic回歸模型 | softmax回歸模型 | |
---|---|---|
解決問題 | 二分類問題 | 多分類問題 |
類別 |
|
logistic回歸模型是 softmax回歸模型 k=2 的特例。
對(duì)于給定的測試輸入 x,假設(shè)函數(shù)針對(duì)每個(gè)類別 j 估算的概率為 。即 我們假設(shè) 函數(shù)輸出一個(gè)
維向量(和為 1 ) 表示這
個(gè)估計(jì)的概率。用公式表示為:
其中,,
,...,
,
為歸一化系數(shù)。
softmax的代價(jià)函數(shù)為:
其中:
該代價(jià)的函數(shù)的特點(diǎn)為有一個(gè)"冗余"的數(shù)據(jù)集,為了解決 softmax 回歸參數(shù)冗余帶來的數(shù)值問題,我們添加一個(gè)權(quán)重衰減項(xiàng)目 來修改代價(jià)函數(shù),這個(gè)衰減項(xiàng)可以懲罰過大的參數(shù),現(xiàn)在代價(jià)函數(shù)變?yōu)椋?/p>
對(duì)于的最小化問題,目前還沒有閉式解法。因此,使用迭代的優(yōu)化算法(例如梯度下降法,或 L-BFGS)。經(jīng)過求導(dǎo),可以得到梯度公式如下:
softmax 回歸 vs k個(gè)二元分類器
如果類別之間相互排斥,使用 softmax 回歸。
如果類別之間并不相互排斥,使用 k 個(gè)二元分類器。
類別不平衡的基本處理方法
基本策略--再縮放:
這里的 表示訓(xùn)練集的正例數(shù)量,
表示訓(xùn)練集的反例數(shù)量,
表示觀測幾率。
但是我們從訓(xùn)練集的觀測幾率推斷真實(shí)幾率,現(xiàn)在技術(shù)上大體有三類做法:
- 直接對(duì)訓(xùn)練集里的反類樣例進(jìn)行“欠采樣”,即去除一些反例使正、反例數(shù)目接近,再學(xué)習(xí);代表算法 EasyEnsemble;
- 對(duì)訓(xùn)練集里的正類樣例進(jìn)行‘過采樣’,即增加一些正例使正、反例數(shù)目接近,再學(xué)習(xí);代表算法 SMOTE;
- 直接基于原始訓(xùn)練集進(jìn)行學(xué)習(xí),在用訓(xùn)練好的分類器進(jìn)行預(yù)測時(shí),將再縮放公式嵌入決策過程,稱為“閾值移動(dòng)”
sklearn 相關(guān)參數(shù)
sklearn.linear_model.LogisticRegression
Logistic Regression(又稱為 logit, MaxEnt) 分類器。
對(duì)于多分類的情況,如果 “multi_class” 選項(xiàng)設(shè)置為‘ovr’,訓(xùn)練算法將使用 one-vs-rest(OvR)策略;如果 “multi_class” 選項(xiàng)設(shè)為 ‘multinormial’,則使用交叉熵?fù)p失(cross-entropy loss)(目前,只有‘lbfgs’、'sag' 和 'newton-cg' 算法支持“multinormial”)。
這個(gè)類使用 'liblinear' 庫、'newton-cg' 、‘lbfgs’、'sag' 求解器實(shí)現(xiàn)了正則化 logistic 回歸。既可以處理密集輸入也可以處理稀疏輸入。程序使用 64 位浮點(diǎn)型 C-ordered 序列或 CSR 矩陣以獲得最佳性能,任何其他格式的輸入都將轉(zhuǎn)化為這種格式(并復(fù)制)。
'newton-cg' 、‘lbfgs’、'sag' 求解器只支持原始公式的 L2 正則化。 'liblinear' 求解器支持 L1 和 L2 正則化,并且只為 L2 懲罰提供對(duì)偶公式的求解。
更多內(nèi)容見 用戶指南 。
參數(shù) | 意義 | 備注 |
---|---|---|
penalty | str,'l1' 或'l2' 用于指定正則化函數(shù),'newton-cg' 、‘lbfgs’、'sag' 僅支持 l2 |
0.19版本新增加了支持 l1 懲罰的SAGA 求解器 |
dual | bool,默認(rèn) False 對(duì)偶或原始公式。對(duì)偶公式只用于使用 liblinear 求解器的 l2 懲罰。 |
當(dāng)n_samples>n_features (樣本較多)時(shí)最好設(shè)置 dual = False |
tol | float,默認(rèn) 1e-4 停止迭代的最小誤差。 |
|
C | float,默認(rèn) 1.0 正則項(xiàng)系數(shù)的倒數(shù),與支持向量機(jī)相似,值越小正則化影響越大。 |
必須為正浮點(diǎn)數(shù) |
fit_intercept | bool,默認(rèn) True 決策函數(shù)是否需要添加常數(shù)( 偏差或截距)。 |
|
intercept_scaling | float,默認(rèn) 1 只有使用 liblinear 算法并且 fit_intercept 設(shè)為True 時(shí)才有用,在這種情況下,x變?yōu)閇x,self.intercept_scaling],即將值為 intercept_scaling 的“合成”特性添加到實(shí)例向量中,截距變?yōu)?intercept_scaling*synthetic_feature_weight。 |
合成特性權(quán)重與其它特性一樣受 l1/l2 正則化影響。為了減少正則化對(duì)合成特性權(quán)重(以及截距)的影響,需要增大intercept_scaling。 |
class_weight | dict 或者 'balanced',默認(rèn)為 None。 {class_label:weight}格式的類別權(quán)重。如果沒有給定,所有類別的權(quán)重都為1。 "balanced"模式使用 y 值自動(dòng)校正權(quán)重,使其為輸入數(shù)據(jù)出現(xiàn)頻率的倒數(shù),即 n_samples/(n_classes * np.bincount(y))。 |
如果指定了 sample_weight 則這些權(quán)重將與 sample_weight 相乘。 |
random_state | int, RandomState 實(shí)例或 None,可選,默認(rèn):None 偽隨機(jī)數(shù)發(fā)生器打亂數(shù)據(jù)時(shí)使用的種子(seed) 。如果為 int,random_state 表示隨機(jī)數(shù)發(fā)生器的 seed 。如果為 RandomState 實(shí)例,random_state 表示隨機(jī)數(shù)發(fā)生器。如果為 None,則使用 np.random 使用的RandomState 實(shí)例作為隨機(jī)數(shù)發(fā)生器。 |
用于 solver 為”sag“或 ”liblinear“的情況。 |
solver | str , {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}默認(rèn):'liblinear' 求解優(yōu)化問題使用的算法。 小數(shù)據(jù)集使用”liblinear“是個(gè)不錯(cuò)的選擇,但是”sag“和”saga“對(duì)于較大的數(shù)據(jù)集速度更快 多分類問題只能使用”newton-cg“,"sag","saga"和”lbfgs“處理多分類損失,”liblinear“限于 one-versus-rest方案。 "newton-cg","lbfgs"和”seg"只支持 L2 正則,“l(fā)iblinear"和”saga“只支持 L1正則。 |
"sag"和"saga"快速卷積只有在特征規(guī)模大致相同時(shí)才能保證快速收斂。 可以使用sklearn.preprocessing的縮放器對(duì)數(shù)據(jù)進(jìn)行預(yù)處理。 |
max_iter | int,默認(rèn) 100 只用于 newton-cg 、sag 和 lbfgs 算法。用于算法收斂的最大迭代次數(shù)。 |
|
multi_class | str,{‘ovr’, ‘multinomial’,'auto'},默認(rèn): ‘ovr’ 如果選擇'ovr',將對(duì)每個(gè)標(biāo)簽進(jìn)行二分類擬合。對(duì)于‘multinomial’,最小化損失為擬合整體概率分布的多分類損失(即使數(shù)據(jù)為二分類)。liblinear 算法不能使用 ‘multinomial’。 設(shè)置為'auth'時(shí),如果數(shù)據(jù)為二分類或者 solver='liblinear',選擇"ovr",其它情況使用’multinomial' |
|
verbose | int,默認(rèn):0 將 verbose 設(shè)置為正數(shù)來表示 liblinear 和 lbfgs 的冗余。 |
|
warm_start | bool,默認(rèn) False 設(shè)置為 True 時(shí),使用上一次調(diào)用的解來作為擬合的初始值,否則,只釋放上次的解決方案。這項(xiàng)設(shè)置對(duì) liblinear 算法不起作用。 |
|
n_jobs | int,默認(rèn) 1。 如果 multi_class='ovr'時(shí)并行計(jì)算類別時(shí)使用的處理器數(shù)量 。如果“solver"設(shè)置為 ”liblinear“,則無論是否設(shè)置了”multi_class“,這個(gè)參數(shù)都將被忽略。 除了 joblib.parallel_backend 之外 None 表示 1,如果值為 -1,則使用所有的處理器。詳細(xì)內(nèi)容見Glossary. |
屬性:
屬性 | 意義 | 備注 |
---|---|---|
coef_ | array,格式:(1,n_features) 或(n_classes,n_features) 決策函數(shù)中特征的系數(shù),二分類問題的 coef_ 格式為 (1,n_features) |
|
intercept_ | array,格式:(1,) 或(n_classes,) 決策函數(shù)的截距,如果 fit_intercept 設(shè)置為 False,截距為 0,二分類問題的 intercept_ 格式為(1,) |
|
n_iter_ | array,格式:(n_classes,)或 (1,) 所有類的實(shí)際迭代次數(shù)。對(duì)于二分類或多分類,只返回1個(gè)元素。 liblinear算法只返回所有類的迭代值的最大值。 |