模擬退火篩選變數

2021-09-10 07:28:22 字數 2154 閱讀 3798

本文主要是採用模擬退火的方法選擇變數,採取的評價方法是基於五折cv的auc值均值

# -*- coding: utf-8 -*-

"""created on sun jan 27 23:15:34 2019

模擬退火調篩選變數

@author: xujingpilot

"""from sklearn.cross_validation import cross_val_score

import random

import math

deftest

(model,x,y,c_v)

:#利用cv計算auc值

scores=cross_val_score(model, x, y, cv=c_v,scoring=

'roc_auc'

).mean(

)return scores

defsuiji1

(name,name1)

:#隨機新增選擇變數

#name 變數名字 name1 目前已有變數

n=[x for x in name if x not

in name1]

num=random.randint(1,

2)xx=random.sample(n,num)

name2=name1.extend(xx)

del xx,num,n,name,name1

return name2

defsuiji2

(name1)

:#隨機刪除選擇變數

#name1 目前已有變數

xx=random.sample(name1,1)

name1=name1.remove(xx)

del xx

return name1

defmengtekaluo

(cv1,cv2,t)

:#cv1:第一次cv cv2:第二次cv t溫度

if cv1>cv2:

p=math.exp(

(cv1-cv2)

/t)else

: p=

1return p

defpanduan

(x,y,c_v,model,t,name1,cv1)

:#x:特徵;y:標籤;c_v:cv次數;t:溫度 name1 初始變數 cv1:

name=x.columns.tolist(

) name2=suiji1(name,name1)

#隨機新增1-3個變數

name3=suiji2(name1)

#隨機刪除1個變數

x1=x[name3]

cv2=test(model,x1,y,c_v)

p=mengtekaluo(cv1,cv2,t)

if random.random(

)na=name3

else

: na=name1

del x,y,c_v,name1,name2,name1,x1

return na,cv2

if __name__ ==

"__main__"

: x=data[

'x']

y=data[

'y']

t=10#初始溫度

cool=

0.8# 退火降溫速度

c_v=

5#5折

name=x.columns.tolist(

) num=random.randint(3,

6)#初始變數3-6個變數

name1=random.sample(name,num)

model=logisticregression(

)#邏輯回歸為案例

cv1=test(model,x[name1]

,y,c_v)

cv=cv1

for i in

range

(1000):

name1,cv1=panduan(x,y,c_v,model,t,name1,cv1)

t=t*cool

if i%

50==0:

if cv-cv1<

0.02

:break

cv=cv1

模擬退火演算法

w 模擬退火演算法的基本思想 將乙個優化問題比擬成乙個金屬物體,將優化問題的目標函式比擬成物體的能量,問題的解比擬成物體的狀態,問題的最優解比擬成能量最低的狀態,然後模擬金屬物體的退火過程,從乙個足夠高的溫度開始,逐漸降低溫度,使物體分子從高能量狀態緩慢的過渡到低能量狀態,直至獲得能量最小的理想狀態...

模擬退火合集

首次接觸模擬退火 看來還是挺神奇的。主要參考這篇博文 題意判斷多邊形內部能否容納乙個半徑為r的圓,即在有限的平面內找最優範圍。遺傳演算法的結果難以掌控,爬山演算法又沒法保證跳出區域性最優,所以基於貪心原則的模擬退火演算法還是值得考慮的。然後就是設定每次變化的步長和演化方式。該題可以從每條邊的中點開始...

模擬退火演算法

一些求解極值的問題不能通過函式特性直接求解,只能暴力列舉,但是單純的列舉效率不高,通過模擬退火演算法可以高效的找到答案。學習好博文 最小圓覆蓋 hdu 3007 buried memory 大意 給出一些點,求出能覆蓋他們的最小的圓。輸出圓心和半徑 include include include i...