把斷斷續續學習的機器學習方面的東西整理一下,還是需要系統的記錄一下。
線性預測定義下面的的函數
Ld是一個函數集合,W是d維度的參數,b是定義在R的標量。所以整個函數就是標量。
當Y的值域是{-1,1}的時候,半空間可以定義爲:
在於W垂直的超平面上面的部分,數據被標記爲正類,當在超平面的下面的話,數據被標記爲負類。
=>兩邊同時乘以
因爲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