條件隨機場
馬爾可夫過程
隱馬爾科夫演算法
條件隨機場 (以線性鏈條件隨機場為例)
**實踐:
import numpy as np
class crf(object):
『』『實現條件隨機場**問題的維特比演算法
『』』definit(self, v, vw, e, ew):
『』』:param v:是定義在節點上的特徵函式,稱為狀態特徵
:param vw:是v對應的權值
:param e:是定義在邊上的特徵函式,稱為轉移特徵
:param ew:是e對應的權值
『』』self.v = v #點分布表
self.vw = vw #點權值表
self.e = e #邊分布表
self.ew = ew #邊權值表
self.d = #delta表,最大非規範化概率的區域性狀態路徑概率
self.p = #psi表,當前狀態和最優前導狀態的索引表s
self.bp = #bestpath,最優路徑
return
def viterbi(self):
'''條件隨機場**問題的維特比演算法,此演算法一定要結合crf引數化形式對應的狀態路徑圖來理解,更容易理解.
'''self.d = np.full(shape=(np.shape(self.v)), fill_value=.0)
self.p = np.full(shape=(np.shape(self.v)), fill_value=.0)
for i in range(np.shape(self.v)[0]):
#初始化
if 0 == i:
self.d[i] = np.multiply(self.v[i], self.vw[i])
self.p[i] = np.array([0, 0])
print('self.v[%d]='%i, self.v[i], 'self.vw[%d]='%i, self.vw[i], 'self.d[%d]='%i, self.d[i])
print('self.p:', self.p)
pass
#遞推求解布局最優狀態路徑
else:
for y in range(np.shape(self.v)[1]): #delta[i][y=1,2...]
for l in range(np.shape(self.v)[1]): #v[i-1][l=1,2...]
delta = 0.0
delta += self.d[i-1, l] #前導狀態的最優狀態路徑的概率
delta += self.e[i-1][l,y]*self.ew[i-1][l,y] #前導狀態到當前狀體的轉移概率
delta += self.v[i,y]*self.vw[i,y] #當前狀態的概率
print('(x%d,y=%d)-->(x%d,y=%d):%.2f + %.2f + %.2f='%(i-1, l, i, y, \
self.d[i-1, l], \
self.e[i-1][l,y]*self.ew[i-1][l,y], \
self.v[i,y]*self.vw[i,y]), delta)
if 0 == l or delta > self.d[i, y]:
self.d[i, y] = delta
self.p[i, y] = l
print('self.d[x%d,y=%d]=%.2f\n'%(i, y, self.d[i,y]))
print('self.delta:\n', self.d)
print('self.psi:\n', self.p)
#返回,得到所有的最優前導狀態
n = np.shape(self.v)[0]
self.bp = np.full(shape=(n,), fill_value=0.0)
t_range = -1 * np.array(sorted(-1*np.arange(n)))
for t in t_range:
if n-1 == t:#得到最優狀態
self.bp[t] = np.argmax(self.d[-1])
else: #得到最優前導狀態
self.bp[t] = self.p[t+1, int(self.bp[t+1])]
#最優狀態路徑表現在儲存的是狀態的下標,我們執行儲存值+1轉換成示例中的狀態值
#也可以不用轉換,只要你能理解,self.bp中儲存的0是狀態1就可以~~~~
self.bp += 1
print('最優狀態路徑為:', self.bp)
return self.bp
def crf_manual():
s = np.array([[1,1], #x1:s(y1=1), s(y1=2)
[1,1], #x2:s(y2=1), s(y2=2)
[1,1]]) #x3:s(y3=1), s(y3=1)
sw = np.array([[1.0, 0.5], #x1:sw(y1=1), sw(y1=2)
[0.8, 0.5], #x2:sw(y2=1), sw(y2=2)
[0.8, 0.5]])#x3:sw(y3=1), sw(y3=1)
e = np.array([[[1, 1], #edge:y1=1—>(y2=1, y2=2)
[1, 0]], #edge:y1=2—>(y2=1, y2=2)
[[0, 1], #edge:y2=1—>(y3=1, y3=2)
[1, 1]]])#edge:y2=2—>(y3=1, y3=2)
ew= np.array([[[0.6, 1], #edgew:y1=1—>(y2=1, y2=2)
[1, 0.0]], #edgew:y1=2—>(y2=1, y2=2)
[[0.0, 1], #edgew:y2=1—>(y3=1, y3=2)
[1, 0.2]]])#edgew:y2=2—>(y3=1, y3=2)
crf = crf(s, sw, e, ew)
ret = crf.viterbi()
print('最優狀態路徑為:', ret)
return
ifname==『main』:
crf_manual()
《資料探勘》組隊學習第四次打卡
一 學習內容 task4 建模調參 線性回歸模型 模型效能驗證 嵌入式特徵選擇 模型對比 模型調參 model linearregression normalize true model model.fit train x,train y print intercept model.intercep...
第四次打卡
文章目錄 一 批量歸一化和殘差網路 二 凸優化 三 梯度下降 四 目標檢測基礎 五 影象風格遷移 六 影象分類案例1 七 影象分類案例2 八 gan 九 dcgan 十 總結 一 批量歸一化和殘差網路 批量歸一化 1 對全連線層做批量歸一化 2 對卷積層做批量歸 化 3 時的批量歸 化 殘差網路 1...
機器學習第四次作業
1.本節重點知識點用自己的話總結出來,可以配上,以及說明該知識點的重要性 1 機器學習演算法中回歸演算法的分類 2 回歸與分類的區別 分類和回歸的區別在於輸出變數的型別 的目標函式是否連續 定量輸出稱為回歸,或者說是連續變數 定性輸出稱為分類,或者說是離散變數 3 線性回歸的定義 定義 線性回歸通過...