天天看點

統計學習方法 | 感覺機 | python實作

感覺機是二類分類的線性分類模型,利用随機梯度下降法對基于誤分類的損失函數進行極小化。

統計學習方法 | 感覺機 | python實作

書中算法可以将所有樣本和系數向量寫成增廣向量的形式,并将所有負樣本乘以-1,統一形式,友善計算。

(1)訓練資料集線性可分時,感覺機學習算法原始形式疊代收斂

(2)算法存在許多解

感覺機學習算法的對偶形式使得訓練過程中執行個體僅以内積形式出現,可以提前存儲(Gram矩陣)。

# train = [[(3, 3), 1], [(4, 3), 1], [(1, 1), -1]]
train = [[(0, 0), 1], [(0, 1), 1], [(1, 0), -1], [(1, 1), -1]]
w = [0, 0]
b = 0

def update(data):
    global w, b
    for i in range(len(data[0])):
        w[i] = w[i] + 1 * data[1] * data[0][i]
    b = b + 1 * data[1]
    # print(w, b)

def cal(data):
    global w, b
    res = 0
    for i in range(len(data[0])):
        res += data[0][i] * w[i]
    res += b
    res *= data[1]
    return res

def check():
    flag = False
    for data in train:
        if cal(data) <= 0:
            flag = True
            update(data)
    if not flag:
        print("w: " + str(w) + " b: " + str(b))
        return True
    return False

for times in range(1000):
    if check():
        break
           

算法的實作參考了 https://blog.csdn.net/qq_30611601/article/details/79313609