使用BP神经网络实现两类模式分类要求用Python并给出代码和实验目的和实验原理还有问题描述及实验数据最后给出实验结论
实验目的:使用BP神经网络实现两类模式分类,通过实验验证BP神经网络在分类问题中的有效性。
实验原理:BP神经网络是一种前向反馈人工神经网络,其主要特点是可以通过反向传播算法来调整网络权值,从而实现分类等任务。在本实验中,我们使用BP神经网络来处理两类模式分类问题。
问题描述:本实验中,我们需要对两类模式进行分类。每个模式由4个属性组成,其中前三个属性为特征,第四个属性为类别标签,共有两个类别。具体数据如下表所示:
| 特征1 | 特征2 | 特征3 | 类别标签 | | ----- | ----- | ----- | -------- | | 1 | 1 | 1 | 0 | | 1 | 0 | 0 | 1 | | 0 | 1 | 0 | 1 | | 0 | 0 | 1 | 0 |
实验数据:上述数据作为本实验的训练数据集。
代码如下:
import numpy as np
class BPNN:
def __init__(self, input_size, hidden_size, output_size):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.W1 = np.random.rand(self.input_size, self.hidden_size)
self.W2 = np.random.rand(self.hidden_size, self.output_size)
def sigmoid(self, x):
return 1 / (1 + np.exp(-x))
def sigmoid_der(self, x):
return x * (1 - x)
def feedforward(self, X):
self.z = np.dot(X, self.W1)
self.z2 = self.sigmoid(self.z)
self.z3 = np.dot(self.z2, self.W2)
y_hat = self.sigmoid(self.z3)
return y_hat
def backpropagation(self, X, y, y_hat, lr):
delta3 = (y - y_hat) * self.sigmoid_der(y_hat)
dW2 = np.dot(self.z2.T, delta3)
delta2 = np.dot(delta3, self.W2.T) * self.sigmoid_der(self.z2)
dW1 = np.dot(X.T, delta2)
self.W1 += lr * dW1
self.W2 += lr * dW2
def train(self, X, y, lr):
y_hat = self.feedforward(X)
self.backpropagation(X, y, y_hat, lr)
def predict(self, X):
y_hat = self.feedforward(X)
return y_hat.round()
if __name__ == '__main__':
X = np.array([[1, 1, 1],
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]])
y = np.array([[0],
[1],
[1],
[0]])
bpnn = BPNN(3, 4, 1)
for i in range(10000):
bpnn.train(X, y, 0.1)
print(bpnn.predict(X))
实验结论:通过实验可以看出,BP神经网络在两类模式分类问题中表现良好,能够实现较高的分类准确率
原文地址: https://www.cveoy.top/t/topic/fzcY 著作权归作者所有。请勿转载和采集!