import numpy as np
class Perceptron:
def __init__(self, input_dim, learning_rate=0.01):
# 初始化权重和偏置
self.weights = np.random.randn(input_dim)
self.bias = np.random.randn()
self.learning_rate = learning_rate
def step_function(self, z):
# 阶跃函数
return 1 if z >= 0 else 0
def predict(self, x):
# 计算线性组合
z = np.dot(self.weights, x) + self.bias
# 使用阶跃函数进行预测
return self.step_function(z)
def train(self, X, y, epochs=100):
for epoch in range(epochs):
for i in range(len(X)):
# 前向传播
prediction = self.predict(X[i])
# 计算误差
error = y[i] - prediction
# 更新权重和偏置
self.weights += self.learning_rate * error * X[i]
self.bias += self.learning_rate * error
# 示例数据
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 0, 0, 1]) # AND逻辑门
# 创建感知器
input_dim = X.shape[1]
perceptron = Perceptron(input_dim)
# 训练感知器
perceptron.train(X, y, epochs=10)
# 测试感知器
for x in X:
print(f"Input: {x}, Predicted: {perceptron.predict(x)}")