'''******************导入数据包*********************************''' import pandas as pd import numpy as np import random from sklearn import preprocessing '''***************导入数据与数据处理*****************************''' address = 'F:/python code/network_perceotron/basedata.csv' file = pd.read_csv(address,encoding='GBK',header=None) data = np.array(file) data = data[1:9,1:6] data = np.array(data,dtype=float) add = np.ones(8) x_train = np.column_stack((data,add)) x_train = preprocessing.scale(x_train) '''********************封装感知器*********************************''' class perceptron: # 初始化参数 def __init__(self): self.X = x_train self.W = np.zeros(6).reshape(6,1) # 预测 def predict(self,W,X): z = np.tanh(np.dot(X,W)) return z # 计算误差 def loss(self,label,z): label = y_train output = z error = label - output return error # 更新权重 def update(self,W,X,error): lr = np.random.rand() self.W += lr*(np.dot(X.T,error)) return W '''***************************训练数据***************************************''' net = perceptron() W = net.W X = net.X y_train = np.array([-1,-1,-1,-1,1,1,1,1]).reshape(8,1) itr_num = int(input("请输入迭代次数:")) for i in range(itr_num): # 预测 y = net.predict(W,X) # 计算损失 los = net.loss(y_train,y) # 更新权重 W = net.update(W,X,los) '''**************************——————测试————**********************************''' # 输入测试数据集 X_test = np.array([[0.052,0.084,0.021,0.037,0.022,1], [0.074,0.083,0.105,0.19,1,1]]) # 预处理数据 X_test = preprocessing.scale(X_test) W_best = W prdit_y = net.predict(W_best,X_test) print(prdit_y)
数据集