实现一个带有1层隐藏层的感知器,并利用自行创建的数据集对其进行训练以及测试,数据集创建要求:数据集样本数量至少为1000个,3个或以上的特征值,样本标签至少含有2个类别,举例[身高、体重,血压,是否健康],其中是否健康为分类标签
时间: 2023-11-27 16:04:15 浏览: 56
好的,这是一个关于感知器的问题。感知器是一种二元分类算法,可以将数据分为两个类别。一个带有1层隐藏层的感知器可以使用下面的代码来实现:
```
import numpy as np
class Perceptron:
def __init__(self, num_inputs, hidden_layer_size):
self.hidden_weights = np.random.randn(num_inputs, hidden_layer_size)
self.output_weights = np.random.randn(hidden_layer_size)
def sigmoid(self, x):
return 1.0 / (1.0 + np.exp(-x))
def sigmoid_derivative(self, x):
return x * (1.0 - x)
def feed_forward(self, inputs):
hidden_layer = self.sigmoid(np.dot(inputs, self.hidden_weights))
output = self.sigmoid(np.dot(hidden_layer, self.output_weights))
return output
def train(self, inputs, labels, num_epochs, learning_rate):
for epoch in range(num_epochs):
for i in range(len(inputs)):
input_layer = inputs[i]
hidden_layer = self.sigmoid(np.dot(input_layer, self.hidden_weights))
output = self.sigmoid(np.dot(hidden_layer, self.output_weights))
output_error = labels[i] - output
output_delta = output_error * self.sigmoid_derivative(output)
hidden_error = np.dot(output_delta, self.output_weights.T)
hidden_delta = hidden_error * self.sigmoid_derivative(hidden_layer)
self.output_weights += learning_rate * hidden_layer * output_delta
self.hidden_weights += learning_rate * input_layer[:,None] * hidden_delta
def predict(self, inputs):
outputs = []
for input_layer in inputs:
output = self.feed_forward(input_layer)
if output > 0.5:
outputs.append(1)
else:
outputs.append(0)
return outputs
```
为了创建数据集,我们可以使用下面的代码:
```
import numpy as np
def create_dataset(num_samples):
X = np.random.rand(num_samples, 3)
y = np.zeros(num_samples)
for i in range(num_samples):
if X[i,0] > 0.5 and X[i,1] > 0.5:
y[i] = 1
return X, y
```
这个函数将返回一个包含num_samples个样本的数据集。每个样本包含三个特征值(身高、体重和血压),以及一个是否健康的标签(0表示不健康,1表示健康)。样本将根据身高和体重是否大于0.5来分为两类。
为了训练和测试感知器,我们可以使用下面的代码:
```
import random
num_samples = 1000
X, y = create_dataset(num_samples)
perceptron = Perceptron(3, 1)
perceptron.train(X, y, 1000, 0.1)
predictions = perceptron.predict(X)
accuracy = sum([1 for i in range(num_samples) if predictions[i] == y[i]]) / num_samples
print("Accuracy: %.2f%%" % (accuracy * 100))
```
这段代码将创建一个包含1000个样本的数据集,并使用感知器对其进行训练。然后,它将使用训练后的感知器对数据集进行预测,并计算准确率。
阅读全文