【機器學習筆記35】蟻群演算法
【參考資料】
【1】《蟻群演算法原理及其應用》
【2】測試資料: https://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/tsp/att48.tsp.gz
演算法原理(以TSP問題為例)
(1)引數初始化。令時間t=0和迴圈次數 ,設定最大迴圈次數 。將m只螞蟻設定在n個城市之上,令城市之間的有向圖每個邊的初始化資訊量 ,初始時刻 。
(2)開始迴圈
(3)遍歷螞蟻群
,每次迴圈都會隨機置放螞蟻;
(4)根據下述概率選擇公式選擇城市,選過的城市放入該螞蟻的禁忌表
(4.1)
遍歷的是第k只螞蟻在t時刻能夠去的所有城市
(4.2)
是此時該路徑上的資訊量,
是資訊啟發因子,表示當前軌道的重要性
(4.3)
,其中
是兩個城市之間的舉例,
為期望啟發因子,表示能見度重要性
(5)當前所有螞蟻前進一步後,更新各個路徑上的資訊素,如下:
(5.1)這裡
是資訊揮發係數
(5.2)
,表示全部m只螞蟻對該路徑的資訊素影響
(5.3)
或者
,這裡
表示螞蟻本次走過的總路徑、
為路徑(i,j)之間的距離。
(5.4)Q表示資訊素強度應是一個超引數
(6)達到迴圈週期
時退出,否則清空禁忌表重新開始。每次迭代重新開始時,資訊素表為上一次的結果;
程式碼實現(純python)
不確定是否是超引數設定的問題,還是程式碼本身邏輯有缺陷,整個蟻群演算法幾乎沒有正常的收斂!!等後面工作空了的時候再慢慢調整
# -*- coding: utf-8 -*-
import numpy as np
import random
import math
import matplotlib.pyplot as plt
import pandas as pd
CITY_NUM = 48 #城市數量
d_array = [[0 for col in range(CITY_NUM)] for row in range(CITY_NUM)] #舉例矩陣
ANT_NUM = 20 #初始化螞蟻數量
t_array = [[-1 for col in range(CITY_NUM)] for row in range(ANT_NUM)] #螞蟻的禁忌表,已經走過的路徑
d_ant = [0 for col in range(ANT_NUM)] #此次迴圈螞蟻走過的距離總數
r_ant = [(0,0) for col in range(ANT_NUM)] #本次螞蟻爬的路徑
i_array = [[0.1 for col in range(CITY_NUM)] for row in range(CITY_NUM)] #資訊素矩陣
ALPHA = 1 #資訊啟發因子
BETA = 2 #期望啟發因子
RHO = 0.1 #資訊揮發係數
Q_VALUE = 8000 #資訊素強度
ITERATOR = 50
def _init_tsp_data():
"""
構造TSP的有向圖
"""
df = pd.read_csv('./data/att48.tsp', sep=' ')
x_data = np.asarray(df.loc[:, ['x']])
y_data = np.asarray(df.loc[:, ['y']])
for i in range(0, 48):
for j in range(0, 48):
dx2 = math.pow((x_data[j] - x_data[i]),2)
dy2 = math.pow((y_data[j] - y_data[i]),2)
d_array[i][j] = math.sqrt(dx2 + dy2)
def _init_ant_data():
"""
隨機放置ANT_NUM
"""
for i in range(0, ANT_NUM):
tmp = random.randint(0, CITY_NUM - 1)
t_array[i][0] = tmp
def _get_curr_city(data):
"""
從已經經過的城市列表中找到最新的城市
"""
res
相關推薦
【機器學習筆記35】蟻群演算法
【參考資料】 【1】《蟻群演算法原理及其應用》 【2】測試資料: https://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/tsp/att48.tsp.gz
演算法原理(以TSP問題為例)
(1)引數初始化。令時間t=0和迴圈次數
【機器學習筆記02】最小二乘法(多元線性迴歸模型)
數學基礎
1.轉置矩陣
定義: 將矩陣A同序數的行換成列成為轉置矩陣ATA^TAT,舉例:
A=(1203−11)A=\begin{pmatrix}
1 & 2 & 0 \\
3 & -1 &
【機器學習筆記01】最小二乘法(一元線性迴歸模型)
【參考資料】
【1】《概率論與數理統計》
【2】 http://scikit-learn.org /stable/auto_examples/ linear_model/ plot_ols.html # sphx-glr-auto-examples-
【機器學習筆記04】隨機梯度下降
梯度下降
梯度下降是一個尋找函式機值的方式,屬於最優化裡的基礎演算法,在低維度的情況下非常容易理解。
例如存在函式y=x2y=x^2y=x2存在導數dy=2x,若當前點在x=1點,設dx的步長為0.1。此時我們通過負梯度計算下一個x點xt+1=xt−2∗0.
【機器學習筆記05】Jacobian矩陣&Hessian矩陣
Jacobian矩陣
Jacobian矩陣是函式對向量求導,其結果是一階偏導陣列成的矩陣。假設:F:Rn→RmF:R_n \to R_mF:Rn→Rm也就是一個n維歐式空間向m維歐式空間的一個對映。
舉例:
由球座標系轉換到直角座標系,存在對映形式化表
【機器學習筆記08】分類器(softmax迴歸)
基本定義
首先給出softmax的數學定義,如下:
hθ(x(i))=[p(y(i)=1∣x(i);θ)p(y(i)=2∣x(i);θ)⋮p(y(i)=k∣x(i);θ)]=1∑j=1keθjTx(i)[eθ1Tx(i)eθ2Tx(i)⋮eθkTx(i)]
【機器學習筆記18】隱馬爾可夫模型
【參考資料】
【1】《統計學習方法》
隱馬爾可夫模型(HMM)定義
隱馬爾可夫模型: 隱馬爾可夫模型是關於時序的模型,描述一個由隱藏的馬爾可夫鏈生成的不可觀測的狀態序列,再由各個狀態生成的觀測值所構成的一個觀測序列。
形式化定義HMM為λ=(A,B,π)\la
【機器學習筆記14】奇異值分解(SVD)
奇異值分解
定義: 假設A是一個m×nm \times nm×n的矩陣,則存在如下一種分解:
Am×n=Um×m∑m×nVn×nTA_{m \times n}=U_{m \times m} \sum_{m \times n} V_{n \times n}^T
【機器學習筆記17】支援向量機
【參考資料】
【1】《統計學習方法》
基本概念
當訓練資料線性可分時,通過硬間隔最大化,學習一個線性的分類器,即線性可分支援向量機,又稱硬間隔支援向量機;
當訓練資料近似線性可分時,通過軟間隔(增加一個鬆弛因子)後學習一個線性的分類器,即軟間隔支援向量機;
【機器學習筆記20】神經網路(鏈式求導和反向傳播)
【參考文獻】
【1】《面向機器智慧的TensorFlow實踐》4.7
假設存在網路結果如下
各個層輸出定義
L1=sigmoid(w1⋅x)L_1 = sigmoid(w_1 \cdot x)L1=sigmoid(w1⋅x)
L2=sigmoid(w2⋅L
【機器學習筆記12】聚類(k-means)
K-means 演算法
演算法流程如下:
(1)在樣本中選擇兩個點(也可以是若干個)作為種子點;
(2)計算其餘各個樣本離該種子點的距離,並將其分為兩類;
(3)將種子點移到(2)所分為的兩類的中間;
(4)重複(2)(3)直到種子不再移動;
K-means
【機器學習筆記15】主成分分析(PCA)
PCA演算法
去平均值,即每一位特徵減去各自的平均值
計算新矩陣的協方差矩陣
設$X=(X_1, X_2…X_N)^T $,在鳶尾花例子裡N=4,會生成一個4*4的協方差矩陣
稱矩陣
C=(cij)n×n=(c11c12⋯c1nc21c22⋯c2n⋯⋯⋯⋯
【機器學習筆記21】神經網路(多層感知機)
【參考資料】
【1】《深度學習》 花書 6.1
亦或問題
由於單層感知機相當於在一個空間增加了一個超平面進行分類,那麼對於像亦或問題這樣的情況則無法完成。
因此在多層感知機中增加了一個隱藏層,即一個啟用函式。現代神經網路最常用的啟用函式是整流線性單元,ReL
【機器學習筆記19】神經網路(單層感知機)
【參考資料】
【1】《人工神經網路教程》
【2】《matlab 2015b 神經網路技術》
基本概念
單層感知器可以看成一個線性累加器和一個二值化閾值元器件,通常會在累加一個偏移量。由公式表達為:oj=sgn(∑i=1nwijxi+b)o_j= sgn(\s
【機器學習筆記16】拉格朗日乘子法
【參考資料】
【1】《統計學習方法》
【2】《凸優化》
【3】小象學院 《凸優化》
凸集
直線和線段的表達
設x1≠x2x_1 \ne x_2x1̸=x2是RnR^nRn空間上的兩個點,具有存在下列定義的點:
y=θx1+(1−θ)x2y = \thet
【機器學習筆記13】聚類(高斯混合聚類)
【參考資料】
【1】《統計學習方法》
【2】《概率論與數理統計》
【3】小象學院 EM演算法
高斯分佈
定義: 如果隨機變數X的概率密度為f(x)=12πσe−(x−u)22σ2f(x)= \dfrac{1}{\sqrt{2\pi}\sigma}e^{-\df
【機器學習筆記22】神經網路(卷積神經網路)
【參考資料】
【1】《面向機器智慧的tensorflow實踐》
【2】Keras/example – mnist_cnn.py
【3】Keras中文文件
常用層
卷積層
卷積理解就是之前影象處理裡用作檢測邊緣、檢測角點的運算元,例如:
輸入:
[1234]
\
【機器學習筆記23】神經網路(RNN)
基礎迴圈神經網路
迴圈神經網路(RNN)是一個由神經元和權值構成的有向圖,它的當前狀態與前一時刻的狀態和當前輸入決定,因此當前狀態也被稱為工作記憶。迴圈神經網路在時間序列上展開後如上圖所示,用於解決序列化的問題,諸如語音識別、語音合成、文字生成。
例子:利
【機器學習筆記24】神經網路(LSTM)
梯度消失原因
TBD
模型定義
LSTM 長短期記憶網路是一種特殊的RNN,為解決梯度爆炸和梯度消失的問題,LSTM將RNN中普通的神經元替換成了擁有少量記憶的LSTM單元。
第一步: 決定丟棄資訊
第二步: 確定更新資訊
第三步: 更新狀態
第四
【機器學習筆記26】基於VGG16的影象風格遷移
Note: 本文主要是對論文及參考文獻【1】中程式碼的理解
概述
該演算法的本質是利用深度卷積網路對影象輸入的抽象,主要是三部分:
將風格影象輸入卷積神經網路,將某些層輸出作為風格特徵(做一次);
將內容影象輸入卷積神經網路,將某些層輸出作為內容特徵(做一