

import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def train_neuron(features: np.ndarray, labels: np.ndarray, initial_weights: np.ndarray, initial_bias: float, learning_rate: float, epochs: int) -> (np.ndarray, float, list[float]):
features = np.array(features)
labels = np.array(labels)
weights = np.array(initial_weights)
bias = initial_bias
mse_values = []
for epoch in range(epochs):
# 计算预测值
prediction = sigmoid(features.dot(weights) + bias)
# 记录mse
mse = np.mean((prediction - labels) ** 2)
mse_values.append(round(mse, 4))
# 计算梯度
error = prediction - labels
weight_gradient = np.dot(features.T, error * prediction * (1 - prediction))
bias_gradient = np.sum(error * prediction * (1 - prediction))
# 更新
# Update weights and bias
weights -= learning_rate * weight_gradient / len(labels)
bias -= learning_rate * bias_gradient / len(labels)
# Round weights and bias for output
updated_weights = np.round(weights, 4)
updated_bias = round(bias, 4)
return updated_weights, updated_bias, mse_values
if __name__ == '__main__':
features = [[1.0, 2.0], [2.0, 1.0], [-1.0, -2.0]]
labels = [1, 0, 0]
initial_weights = [0.1, -0.2]
initial_bias = 0.0
learning_rate = 0.1
epochs = 2
print(train_neuron(features, labels, initial_weights, initial_bias, learning_rate, epochs))