用Python实现一个单层感知机
时间: 2023-11-16 09:57:20 浏览: 30
单层感知机是一种最简单的神经网络模型,它只有一个神经元,可以用来解决二分类问题。下面是用Python实现一个单层感知机的基本步骤:
1. 导入必要的库
```python
import numpy as np
```
2. 定义激活函数
```python
def sigmoid(x):
return 1 / (1 + np.exp(-x))
```
3. 初始化权重和偏置
```python
w = np.random.randn(2, 1) # 权重,2行1列
b = np.random.randn(1) # 偏置,1行1列
```
4. 定义损失函数
```python
def loss(y, y_hat):
return -np.mean(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))
```
5. 定义训练函数
```python
def train(X, y, w, b, lr, epochs):
for i in range(epochs):
z = np.dot(X, w) + b # 计算加权和
a = sigmoid(z) # 计算激活值
l = loss(y, a) # 计算损失函数值
dw = np.dot(X.T, (a - y)) / len(X) # 计算权重的梯度
db = np.mean(a - y) # 计算偏置的梯度
w -= lr * dw # 更新权重
b -= lr * db # 更新偏置
if i % 100 == 0:
print('epoch %d, loss %.4f' % (i, l))
return w, b
```
6. 生成数据集并进行训练
```python
X = np.array([[0,0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1])
w, b = train(X, y, w, b, lr=0.1, epochs=1000)
```
7. 预测新数据
```python
x_new = np.array([[1, 1]])
z_new = np.dot(x_new, w) + b
a_new = sigmoid(z_new)
print(a_new) # 输出预测结果
```