Python Scikit opt調包實踐

2021-10-08 17:57:04 字數 4020 閱讀 6024

今天看見原來python也有相應的優化演算法包scikit-opt,但安裝時出現了問題,具體可見部落格。

接下來就開始快樂的學習調包吧!

今天主要學習遺傳演算法和模擬退火演算法實現,先對這兩種演算法做乙個簡單介紹。

遺傳演算法(genetic algorithm, ga)是模擬達爾文生物演化論的自然選擇和遺傳學機理的生物進化過程的計算模型,是一種通過模擬自然進化過程搜尋最優解的方法。

其主要特點是直接對結構物件進行操作,不存在求導和函式連續性的限定;具有內在的隱並行性和更好的全域性尋優能力;採用概率化的尋優方法,不需要確定的規則就能自動獲取和指導優化的搜尋空間,自適應地調整搜尋方向。

遺傳演算法以一種群體中的所有個體為物件,並利用隨機化技術指導對乙個被編碼的引數空間進行高效搜尋。其中,選擇、交叉和變異構成了遺傳演算法的遺傳操作;引數編碼、初始群體的設定、適應度函式的設計、遺傳操作設計、控制引數設定五個要素組成了遺傳演算法的核心內容。

為了解決區域性最優解問題, 2023年,kirkpatrick等提出了模擬退火演算法(sa)能有效的解決區域性最優解問題。我們知道在分子和原子的世界中,能量越大,意味著分子和原子越不穩定,當能量越低時,原子越穩定。『退火』是物理學術語,指對物體加溫在冷卻的過程。模擬退火演算法**於晶體冷卻的過程,如果固體不處於最低能量狀態,給固體加熱再冷卻,隨著溫度緩慢下降,固體中的原子按照一定形狀排列,形成高密度、低能量的有規則晶體,對應於演算法中的全域性最優解。而如果溫度下降過快,可能導致原子缺少足夠的時間排列成晶體的結構,結果產生了具有較高能量的非晶體,這就是區域性最優解。因此就可以根據退火的過程,給其在增加一點能量,然後在冷卻,如果增加能量,跳出了區域性最優解,這本次退火就是成功的。

1.模擬退火演算法可以分解為解空間、目標函式和初始解三部分。

2.模擬退火的基本思想:

(1) 初始化:初始溫度t(充分大),初始解狀態s(是演算法迭代的起點),每個t值的迭代次數l

(2) 對k=1, …, l做第(3)至第6步:

(3) 產生新解s′

(4) 計算增量δt=c(s′)-c(s),其中c(s)為代價函式

(5) 若δt<0則接受s′作為新的當前解,否則以概率exp(-δt/t)接受s′作為新的當前解.

(6) 如果滿足終止條件則輸出當前解作為最優解,結束程式。

終止條件通常取為連續若干個新解都沒有被接受時終止演算法。

(7) t逐漸減少,且t->0,然後轉第2步。

首先對於jupyter使用小技巧記錄下,原先一直都是通過anaconda直接開啟,但這樣目錄就固定了,對於需要寫多個不同程式就會很不方便,因此,可以採用下面方法,在需要放**的目錄下,開啟cmd視窗,輸入

jupyter notebook
即可在當前目錄工作。

首先定義目標函式

def

demo_func

(p):

''' this function has plenty of local minimum, with strong shocks

global minimum at (0,0) with value 0

'''x1, x2 = p

x = np.square(x1)

+ np.square(x2)

return

0.5+

(np.sin(x)

-0.5

)/ np.square(1+

0.001

* x)

用遺傳演算法求解

from sko.ga import ga

import numpy as np

#2個變數,每代取50個,800次迭代,上下界及精度

ga = ga(func=demo_func, n_dim=

2, size_pop=

50, max_iter=

800, lb=[-

1,-1

], ub=[1

,1], precision=1e-

7)best_x, best_y = ga.run(

)print

('best_x:'

, best_x,

'\n'

,'best_y:'

, best_y)

執行結果

首先定義目標函式

sklearn調包俠之KNN演算法

天下武功,唯快不破。今天就正式講解如何通過 sklearn小抄 武林秘籍,成為一代宗師調包俠。欲練此功,必先自宮 就算自宮,未必成功 若不自宮,也能成功。傳說江湖 機器學習領域 有兩大派別 一是學術派,該派資歷高,家境好,多為名門世家 學歷高,數學好 重基礎 數學推導和理論知識 一是實踐派,以找人切...

sklearn調包俠之邏輯回歸

傳送門 機器學習實戰之logistic回歸 正則化這裡補充下正則化的知識。當乙個模型太複雜時,就容易過擬合,解決的辦法是減少輸入特徵的個數,或者獲取更多的訓練樣本。正則化也是用來解決模型過擬合的一種方法。常用的有l1和l2範數做為正則化項。資料匯入 本次實戰依舊是使用sklearn中的資料集,如圖所...

sklearn調包俠之無敵小抄

scikit learn 以下簡稱為sklearn 是用python開發的機器學習庫,其中包含大量機器學習演算法 資料集,是資料探勘方便的工具。本教程參考 python機器學習及實戰 scikit learn機器學習 和sklearn的官方文件,詳細講解如何使用sklearn實現機器學習演算法。首先...