1 实验目的
感知器是一种线性分类器,主要用于二分类问题也可以应用于多分类问题。本实验的目的在于加深学生对线性分类器的理解,掌握感知器算法的原理和实现过程,并用于实际的数据分类,体会其在模式识别中的作用。
2 实验原理
3 实验内容
4 实验过程
# 定义感知器模型
class Perceptron:
def __init__(self, input_size):
self.weights = np.zeros(input_size)
self.bias = 0
def predict(self, inputs):
summation = np.dot(inputs, self.weights) + self.bias
return 1 if summation > 0 else 0
def train(self, training_inputs, labels, epochs):
for _ in range(epochs):
for inputs, label in zip(training_inputs, labels):
prediction = self.predict(inputs)
self.weights += (label - prediction) * inputs
self.bias += (label - prediction)
-
初始化方法 (
__init__
):input_size
参数表示输入的特征数量。在初始化时,权重(self.weights
)被初始化为长度为input_size
的零向量,而偏置(self.bias
)被初始化为零。 -
预测方法 (
predict
):接收输入 (inputs
),通过计算输入与权重的点积(np.dot(inputs, self.weights)
),加上偏置 (self.bias
),然后使用阶跃函数(1 if summation > 0 else 0)作为激活函数,返回二进制分类结果。 -
训练方法 (
train
):training_inputs
: 一个二维数组,每行表示一个训练样本,每列表示一个特征;labels
: 包含与每个训练样本相关联的目标标签的一维数组;epochs
: 表示要对整个训练数据集进行多少次迭代;在每个 epoch 中,对于每个训练样本,通过调用predict
方法获取模型的预测值,然后根据真实标签进行权重和偏置的更新。权重的更新使用感知器学习规则:self.weights += (label - prediction) * inputs
,偏置的更新是self.bias += (label - prediction)
。
5 实验结果
预测结果展示:
分类结果展示: