python3實現線性單元

2021-08-19 23:20:01 字數 2728 閱讀 1672

理論知識見

直接上python3的**

#coding utf-8

import matplotlib.pyplot as plt

from functools import reduce

class perceptron(object):

#初始化,輸入訓練數目,啟用函式

def __init__(self,input_num,activator):#activator為啟用函式

self.activator=activator

self.weights=[0.0 for _ in range(input_num)]#權重初始化為0

self.bias=0.0#偏置初始化為0.0

#運算def operation(self,input_vec):

#對啟用函式中的引數做運算,x[0]代表input_vec,x[1]代表weights

return self.activator(reduce(lambda a,b:a+b,map(lambda x:x[0]*x[1],zip(input_vec,self.weights)),0.0)+self.bias)#0.0為reduce的初始計算值

#權值更新

def updata(self,input_vec,output,label,rate):

delta=label-output

self.weights=list(map(lambda x:x[1]+rate*delta*x[0],zip(input_vec,self.weights)))#加上list跟python2有區別

self.bias+=rate*delta

#訓練,輸入資料及對應標籤,迭代次數,學習率

def train(self,input_vecs,labels,iteration_num,rate):

for i in range(iteration_num):#iteration_num次迭代

samples=zip(input_vecs,labels)#打包

for (input_vec,label) in samples:

output=self.operation(input_vec)#計算輸出值

self.updata(input_vec,output,label,rate)#更新

#**def predict(self,input_vec):

return self.operation(input_vec)

#列印權值,偏置

def __str__(self):#內部函式

return "weight: %s, bias: %f"%(self.weights,self.bias)#權值返回用%s

'''實現線性單元'''

#啟用函式為線性函式

andactivator=lambda x:x

#得到訓練資料

def gettraindata():

input_vecs=[[5],[3],[8],[1.4],[10.1]]#可重用多次迴圈迭代

labels=[5500,2300,7600,1800,11400]

return input_vecs,labels

#訓練感知機

def trainperceptron():

p=perceptron(1,andactivator)

input_vecs,labels=gettraindata()

p.train(input_vecs,labels,30,0.1)#100為迭代次數,0.1為學習率

return p

#畫圖def plot(linearunit):

input_vecs,labels=gettraindata()

fig=plt.figure()

ax=fig.add_subplot(111)

ax.scatter(input_vecs,labels)#橫座標input_vecs,縱座標labels

weights=linearunit.weights

bias=linearunit.bias

x=range(0,15,1)#畫0到15年的影象

y=list(map(lambda x:weights[0]*x+bias,x))

ax.plot(x,y)

plt.show()

#主函式

if __name__=='__main__':

train_perceptron=trainperceptron()

print(train_perceptron)

#測試 print('工作3.4年,月薪%f'%train_perceptron.predict([3.4]))

print('工作15年,月薪%f'%train_perceptron.predict([15]))

print('工作1.5年,月薪%f'%train_perceptron.predict([1.5]))

print('工作6.3年,月薪%f'%train_perceptron.predict([6.3]))

plot(train_perceptron)

擬合得不好,見諒

Python3 線性插補資料

插值填充 所謂的插值法就是通過兩點 x0,y0 x1,y1 估計中間點的值,假設y f x 是一條直線,通過已知的兩點來計算函式f x 然後只要知道x就能求出y,以此方法來估計缺失值。當然我們也可以假設f x 不是直線,而是其他函式。import pandas as pd data pd.read ...

python3實現CryptoJS AES加密演算法

from crypto.cipher import aes from binascii import b2a hex,a2b hex import base64 class aescrypt def init self,key self.key key.encode utf8 self.mode a...

python3讀取Excel 包含合併單元格

coding utf 8 import xlrd import uuid class student def init self,id,kw self.id id for k,v in kw.items setattr self,k,v def str self return s id s,colu...