2位二进制输入与非逻辑门感知器算法的实现
在机器学习领域,感知器是一种用于二元分类器的监督学习算法。感知器模型实现以下函数:
对于权重向量的特定选择和偏置参数 ,模型预测输出对于相应的输入向量 .
2位二进制变量的NAND逻辑函数真值表,即输入向量和相应的输出 –
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
我们可以观察到,
现在对于相应的权重向量输入向量的到 AND 节点,相关的感知函数可以定义为:
稍后,AND节点的输出是具有权重的 NOT 节点的输入 .然后对应的输出是 NAND 逻辑函数的最终输出,相关的感知器函数可以定义为:
对于实现,考虑的权重参数是和偏置参数是 .
Python实现:
# importing Python library
import numpy as np
# define Unit Step Function
def unitStep(v):
if v >= 0:
return 1
else:
return 0
# design Perceptron Model
def perceptronModel(x, w, b):
v = np.dot(w, x) + b
y = unitStep(v)
return y
# NOT Logic Function
# wNOT = -1, bNOT = 0.5
def NOT_logicFunction(x):
wNOT = -1
bNOT = 0.5
return perceptronModel(x, wNOT, bNOT)
# AND Logic Function
# w1 = 1, w2 = 1, bAND = -1.5
def AND_logicFunction(x):
w = np.array([1, 1])
bAND = -1.5
return perceptronModel(x, w, bAND)
# NAND Logic Function
# with AND and NOT
# function calls in sequence
def NAND_logicFunction(x):
output_AND = AND_logicFunction(x)
output_NOT = NOT_logicFunction(output_AND)
return output_NOT
# testing the Perceptron Model
test1 = np.array([0, 1])
test2 = np.array([1, 1])
test3 = np.array([0, 0])
test4 = np.array([1, 0])
print("NAND({}, {}) = {}".format(0, 1, NAND_logicFunction(test1)))
print("NAND({}, {}) = {}".format(1, 1, NAND_logicFunction(test2)))
print("NAND({}, {}) = {}".format(0, 0, NAND_logicFunction(test3)))
print("NAND({}, {}) = {}".format(1, 0, NAND_logicFunction(test4)))
输出:
NAND(0, 1) = 1
NAND(1, 1) = 0
NAND(0, 0) = 1
NAND(1, 0) = 1
这里,模型预测输出( ) 每个测试输入都与 NAND 逻辑门常规输出 ( ) 根据 2 位二进制输入的真值表。
因此,验证了 NAND 逻辑门的感知器算法是正确实现的。