BP神经网络分类算法代码
时间: 2023-09-09 09:13:06 浏览: 44
以下是一个简单的基于BP神经网络的分类算法的Python代码示例:
```python
import numpy as np
# 定义sigmoid激活函数
def sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))
# 定义BP神经网络分类器类
class BPNNClassifier(object):
def __init__(self, input_size, hidden_size, output_size, learning_rate=0.1):
self.input_size = input_size
self.hidden_size = hidden_size
self.output_size = output_size
self.learning_rate = learning_rate
# 初始化权重
self.weights1 = np.random.randn(self.input_size, self.hidden_size)
self.bias1 = np.random.randn(self.hidden_size)
self.weights2 = np.random.randn(self.hidden_size, self.output_size)
self.bias2 = np.random.randn(self.output_size)
# 前向传播
def forward(self, X):
self.layer1 = sigmoid(np.dot(X, self.weights1) + self.bias1)
self.layer2 = sigmoid(np.dot(self.layer1, self.weights2) + self.bias2)
return self.layer2
# 反向传播
def backward(self, X, y, output):
output_error = y - output
output_delta = output_error * sigmoid(output) * (1 - sigmoid(output))
layer1_error = np.dot(output_delta, self.weights2.T)
layer1_delta = layer1_error * sigmoid(self.layer1) * (1 - sigmoid(self.layer1))
# 更新权重和偏置
self.weights2 += self.learning_rate * np.dot(self.layer1.T, output_delta)
self.bias2 += self.learning_rate * np.sum(output_delta, axis=0)
self.weights1 += self.learning_rate * np.dot(X.T, layer1_delta)
self.bias1 += self.learning_rate * np.sum(layer1_delta, axis=0)
# 拟合数据
def fit(self, X, y, epochs=200):
for i in range(epochs):
output = self.forward(X)
self.backward(X, y, output)
# 预测新数据
def predict(self, X):
return np.argmax(self.forward(X), axis=1)
```
使用示例:
```python
# 导入数据
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
# 实例化分类器
clf = BPNNClassifier(input_size=X.shape[1], hidden_size=10, output_size=len(np.unique(y)))
# 拟合数据
clf.fit(X, y, epochs=500)
# 预测新数据
new_X = np.array([[5.1, 3.5, 1.4, 0.2],
[6.2, 3.4, 5.4, 2.3],
[4.9, 3.0, 1.4, 0.2]])
print(clf.predict(new_X))
```