您好,登錄后才能下訂單哦!
問題描述:有一批樣本x,每個樣本都有幾個固定的標(biāo)簽,如(男,24歲,上海),需要從中抽取一批樣本,使樣本總的標(biāo)簽比例滿足分布P(x),如(男:女=49%:51%、20歲:30歲=9%:11%、..........)
采用KL-散度作為優(yōu)化目標(biāo)函數(shù)。
KL-散度又叫相對熵
KL-散度在機(jī)器學(xué)習(xí)中,P用來表示樣本的真實分布,比如[1,0,0]表示當(dāng)前樣本屬于第一類。Q用來表示模型所預(yù)測的分布,比如[0.7,0.2,0.1]
KL-散度直觀的理解就是如果用P來描述樣本,那么就非常完美。而用Q來描述樣本,雖然可以大致描述,但是不是那么的完美,信息量不足,需要額外的一些“信息增量”才能達(dá)到和P一樣完美的描述。如果我們的Q通過反復(fù)訓(xùn)練,也能完美的描述樣本,那么就不再需要額外的“信息增量”,Q等價于P。
公式:
使用SciPy中的optimize.minimize來進(jìn)行優(yōu)化。
def minimize(fun, x0, args=(), method=None, jac=None, hess=None, hessp=None, bounds=None, constraints=(), tol=None, callback=None, options=None):
幾個重要的參數(shù):
fun:目標(biāo)函數(shù)(he objective function to be minimized);
x0:參數(shù)初始值(Initial guess. Array of real elements of size (n,));
bounds:參數(shù)取值范圍限制(Bounds on variables for L-BFGS-B, TNC, SLSQP and trust-constr methods.)
constraints:約束函數(shù)(Constraints definition (only for COBYLA, SLSQP and trust-constr)
Constraints for COBYLA, SLSQP are defined as a list of dictionaries. Each dictionary with fields: type : str Constraint type: 'eq' for equality, 'ineq' for inequality. fun : callable The function defining the constraint. jac : callable, optional The Jacobian of `fun` (only for SLSQP). args : sequence, optional Extra arguments to be passed to the function and Jacobian. )
tol : 目標(biāo)函數(shù)誤差范圍,控制迭代結(jié)束(optional Tolerance for termination. For detailed control, use solver-specific options.) options : 其他一些可選參數(shù)(dict, optional A dictionary of solver options. All methods accept the following generic options:)
求解過程:
定義優(yōu)化函數(shù):
def obj_function(x): 其中x為要優(yōu)化的變量,在本問題中有480類的樣本(如:男,24歲,上海),每類樣本10-1000個不等,x為每類抽取的比例。要從中抽取50000個樣本,滿足22個約束條件(男:女=50%:50%、20歲:30歲=9%:11%等等)。
例如:男性要占總樣本的50%,則
選擇優(yōu)化函數(shù)。SciPy中可以使用bounds參數(shù)的算法有:L-BFGS-B, TNC, SLSQP and trust-constr,可以使用constraints 參數(shù)的算法有: COBYLA, SLSQP and trust-constr
調(diào)參:optimize.minimize有統(tǒng)一的參數(shù),但每個優(yōu)化算法都有自己特有的參數(shù),可以看源碼中的參數(shù)列表。
運(yùn)行:res = optimize.minimize(sample_fun, np.array(x0), bounds=bound, method='L-BFGS-B', tol=1e-11, options={'disp': True, 'maxiter': 300, 'maxfun': 1500000}),最終的結(jié)果保存在res.x中
如果程序沒達(dá)到指定的迭代次數(shù)就停止,可能有兩種原因:
STOP: TOTAL NO. of f AND g EVALUATIONS EXCEEDS LIMIT 增大參數(shù)maxfun;
CONVERGENCE: REL_REDUCTION_OF_F_<=_FACTR*EPSMCH 調(diào)小參數(shù)tol
以上這篇淺談SciPy中的optimize.minimize實現(xiàn)受限優(yōu)化問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。