给出BP神经网络代码,读取excel表,以6个因素判别水源的类别
时间: 2023-07-10 11:33:02 浏览: 27
好的,下面是一个简单的BP神经网络代码,读取excel表,共有39个样本,以6个因素判别水源的类别。请注意,这只是一个示例,您可能需要进行一些修改以适应您的数据和需求。
```python
import pandas as pd
import numpy as np
# 读取excel表
data = pd.read_excel('data.xlsx')
# 数据预处理
# ...
# 定义参数
input_size = 6
hidden_size = 10
output_size = 1
learning_rate = 0.1
epochs = 1000
# 定义激活函数
def sigmoid(x):
return 1 / (1 + np.exp(-x))
# 初始化权重和偏置
w1 = np.random.randn(input_size, hidden_size)
b1 = np.random.randn(hidden_size)
w2 = np.random.randn(hidden_size, output_size)
b2 = np.random.randn(output_size)
# 训练模型
for i in range(epochs):
# 前向传播
z1 = np.dot(data, w1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, w2) + b2
y_pred = sigmoid(z2)
# 计算损失函数
loss = np.mean((y_pred - y)**2)
# 反向传播
delta2 = (y_pred - y) * y_pred * (1 - y_pred)
delta1 = np.dot(delta2, w2.T) * a1 * (1 - a1)
# 更新权重和偏置
w2 -= learning_rate * np.dot(a1.T, delta2)
b2 -= learning_rate * np.mean(delta2, axis=0)
w1 -= learning_rate * np.dot(data.T, delta1)
b1 -= learning_rate * np.mean(delta1, axis=0)
# 测试模型
z1 = np.dot(data, w1) + b1
a1 = sigmoid(z1)
z2 = np.dot(a1, w2) + b2
y_pred = sigmoid(z2)
accuracy = np.mean((y_pred > 0.5) == y)
print('Accuracy:', accuracy)
```
在这个示例中,我们使用 sigmoid 激活函数和均方误差损失函数,训练模型使用了批量梯度下降。您可以根据自己的需求修改激活函数和损失函数,并尝试使用其他优化算法,例如随机梯度下降。同时,您可能还需要对数据进行归一化或标准化等预处理操作。