機器學習-線性感知機模型

 

把斷斷續續學習的機器學習方面的東西整理一下,還是需要系統的記錄一下。

線性預測定義下面的的函數

Ld是一個函數集合,W是d維度的參數,b是定義在R的標量。所以整個函數就是標量。

當Y的值域是{-1,1}的時候,半空間可以定義爲:

在於W垂直的超平面上面的部分,數據被標記爲正類,當在超平面的下面的話,數據被標記爲負類。

=>兩邊同時乘以Y_{i}

y_{i}*sign(<w,x_{i}>)=y_{i}*y_{i}\geqslant 0

因爲sign(<w,x>)與<w,x>是相同符號,因此

假設存在w*

定義 

因此:

理想線性可分的情況Python代碼實現:

數據地址:https://www.csie.ntu.edu.tw/~htlin/course/ml15fall/hw1/hw1_15_train.dat

封裝讀取dat文件如下:

import numpy as np

#去取dat文件
def readDat(path):
    if path.strip() == '':
        return ''
    fr = open(path.strip())
    index = 0
    numberOfLines = len(fr.readlines())
    returnMat = np.zeros((numberOfLines, 4), dtype=np.float64)
    classLabelVector = []
    fr = open(path.strip())
    for line in fr.readlines():
        line = line.strip()
        listFromLine = line.split('\t')
        classLabelVector.append(int(listFromLine[1]))
        listInputData = listFromLine[0].strip().split(' ')
        returnMat[index,:]=listInputData
        index += 1
    return  returnMat,classLabelVector

理想線性可分假設下Python的實現

def perceptronLearn(matData, labelData):
    # 設定最大迭代次數
    maxIteration = 100000
    # 初始向量
    W = [0, 0, 0, 0, 0]
    # labely
    iterationFinish = False
    for interationCount in range(maxIteration):
        for dataIndex in range(len(matData)):
            # 計算向量內積
            vect = matData[dataIndex, :]
            extraBiasVect = append(1, vect)
            resultY = vdot(W, extraBiasVect)
            if (resultY <= 0):
                labelY = -1
            else:
                labelY = 1

            if (labelY != labelData[dataIndex]):
                W = W + labelData[dataIndex] * extraBiasVect
                break
            else:
                if (dataIndex == (len(matData) - 1)):
                    iterationFinish = True
        if (iterationFinish == True):
            break
    return W

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章