Python实现PLA(感知机)
生活随笔
收集整理的這篇文章主要介紹了
Python实现PLA(感知机)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python實現PLA(感知機)
運行環境
- Pyhton3
- numpy(科學計算包)
- matplotlib(畫圖所需,不畫圖可不必)
計算過程
st=>start: 開始 e=>end op1=>operation: 讀入數據 op2=>operation: 格式化數據 cond=>condition: 權重是否不變 op3=>operation: 更新權重 op4=>operation: 輸出結果st->op1->op2->cond cond(yes)->op4->e cond(no)->op3->cond輸入樣例
/* Dataset.txt */ 訓練集:vector(第一項是截距項) label------------------------------------------[1, 1, 4] 1 [1, 2, 3] 1[1, -2, 3] 1[1, -2, 2] 0[1, 0, 1] 0[1, 1, 2] 0測試集:vector(第一項是截距項) label------------------------------------------[1, 1, 1] ?[1, 2, 0] ? [1, 2, 4] ? [1, 1, 3] ?代碼實現
# -*- coding: utf-8 -*- __author__ = 'Wsine'from numpy import * import matplotlib.pyplot as plt import operator import timeLINE_OF_DATA = 6 LINE_OF_TEST = 4def createTrainDataSet():trainDataMat = [[1, 1, 4], [1, 2, 3], [1, -2, 3], [1, -2, 2], [1, 0, 1], [1, 1, 2]]trainShares = [1, 1, 1, -1, -1, -1]return trainDataMat, trainSharesdef createTestDataSet():testDataMat = [[1, 1, 1], [1, 2, 0], [1, 2, 4], [1, 1, 3]]return testDataMatdef autoNorm(dataSet):minVals = dataSet.min(0)maxVals = dataSet.max(0)ranges = maxVals - minValsnormDataSet = zeros(shape(dataSet))m = dataSet.shape[0]normDataSet = dataSet - tile(minVals, (m, 1))normDataSet = normDataSet / tile(ranges, (m, 1))return normDataSet[:LINE_OF_DATA], normDataSet[LINE_OF_DATA:]def sigmoid(inX):inX = float(inX)if inX > 0:return 1elif inX < 0:return -1else:return 0def pla(dataMatIn, classLabels):dataMatrix = mat(dataMatIn)labelMat = mat(classLabels).transpose()m, n = shape(dataMatrix)weights = ones((n, 1))while True:isCompleted = Truefor i in range(m):if (sigmoid(dot(dataMatrix[i], weights)) == labelMat[i]):continueelse:isCompleted = Falseweights += (labelMat[i] * dataMatrix[i]).transpose()if isCompleted:breakreturn weightsdef plotBestFit(weights):dataMat, labelMat = createTrainDataSet()dataArr = array(dataMat)n = shape(dataArr)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []for i in range(n):if int(labelMat[i]) == 1:xcord1.append(dataArr[i, 1])ycord1.append(dataArr[i, 2])else:xcord2.append(dataArr[i, 1])ycord2.append(dataArr[i, 2])fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')x = arange(-3.0, 3.0, 0.1)y = (-weights[0] - weights[1] * x) / weights[2]ax.plot(x, y)plt.xlabel('X1'); plt.ylabel('X2')plt.show()def classifyVector(inX, weights):prob = sigmoid(sum(inX * weights))if prob > 0:return 1else:return 0def classifyAll(dataSet, weights):predict = []for vector in dataSet:predict.append(classifyVector(vector, weights))return predictdef main():trainDataSet, trainShares = createTrainDataSet()testDataSet = createTestDataSet()#trainDataSet, testDataSet = autoNorm(vstack((mat(trainDataSet), mat(testDataSet))))regMatrix = pla(trainDataSet, trainShares)print("regMatrix = \n", regMatrix)plotBestFit(regMatrix)predictShares = classifyAll(testDataSet, regMatrix)print("predictResult: \n", predictShares)if __name__ == '__main__':start = time.clock()main()end = time.clock()print('finish all in %s' % str(end - start))輸出樣例
regMatrix =[[-16.][ 1.][ 7.]] predictResult:[0, 0, 0, 0] finish all in 1.213873749436057轉載于:https://www.cnblogs.com/wsine/p/5180351.html
總結
以上是生活随笔為你收集整理的Python实现PLA(感知机)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 买二手iPhone需要注意些什么?
- 下一篇: C++类构造析构调用顺序训练(复习专用)