《机器学习》课后题5.5
写完了才知道有个库叫pybrain,感觉有点厉害。下次研究一下!
python代码
import numpy as np
import time
class BP:
def __init__(self, data):
self.data = np.array(data)
self.input_neurons = len(self.data[0]) - 1
self.output_neurons = len(np.unique(self.data[:, -1]))
self.lr = 0.1
self.rows = len(self.data)
self.cols = len(self.data[0])
def set_eta(self, lr): # 设置学习率,默认为0.1
self.lr = lr
def get_eta(self):
return self.lr
def get_input_neurons(self):
return self.input_neurons
def get_output_neurons(self):
return self.output_neurons
def sigmod(self, x):
return 1 / (1 + np.exp(-x))
def create_data(self, q=10):
x = self.data[:, :-1] # 取得data的数据部分
x = np.insert(x, [0], -1, axis=1) # 在所有数据前插入一列-1作为哑结点
y = np.array([self.data[:, -1], 1 - self.data[:, -1]]).transpose()
# 类别1*l,输出神经元个数跟类别一致,所以取原来的真实输出与真实输出的相反值作为y
d = self.input_neurons
l = self.output_neurons
v = np.mat(np.random.random((d + 1, q))) # 初始化输入层到隐层的权值
w = np.mat(np.random.random((q + 1, l))) # 初始化隐层到输出层的权值
return x, y, d, l, v, w
def BP(self, err=0.01):
time_start = time.perf_counter()
x, y, d, l, v, w = self.create_data()