【深度学习笔记】第3章-神经网络基础

发布时间 2023-11-11 21:48:52作者: 马农一号

参考书籍: 邓立国等《python深度学习原理、算法与案例》清华大学出版社

3.3 感知机

3.3.1 感知机模型

感知机,又称阈值逻辑单元(Threshold Logic Unit,TLU)/线性阈值单元(Linear Threshold Unit,LTU)

经典数据集:Iris Data Set(鸢尾属植物数据集)

但是这个数据集有些复杂,没什么必要用,自己写了个简单的数据集。

import numpy as np
from sklearn.linear_model import Perceptron

# 每个数据单元由两个数据项组成
data = np.array([
	[0, 0],
	[0, 1],
	[1, 0],
	[1, 1]
	])

# 标签就是给数据分类的
# 此标签表示第一个数据为第一类,后面的三个数据为第二类
tag = np.array([0, 1, 1, 1])

# Perceptron 是 sklearn.linear_model 模块中的一个类,用于实现感知机算法。这个类的构造函数接受几个参数:
# max_iter=1000:这是最大迭代次数,即算法寻找最优解的最大尝试次数。
# tol=1e-3:这是停止标准的公差,如果模型在连续两次迭代中的改进小于这个值,那么就会停止迭代。
# random_state=42:这是随机数生成器的种子,用于初始化模型的权重。通过设置随机种子,可以确保每次运行代码时得到相同的结果。
per_clf = Perceptron(max_iter=1000, tol=1e-3, random_state=42)

# 用数据data和对应的标签tag来训练感知机
per_clf.fit(data, tag)

print(f"w = {per_clf.coef_}")
print(f"b = {per_clf.intercept_}")

输出:

w = [[2. 2.]]
b = [-1.]

感知机的模型预测公式 \(y = w^Tx + b\) ,从上面的结果看,将 \(w = [2, 2]^T\)\(b=-1\) 代入模型公式后,当x = [0, 0]时,y = -1 < 0,是为负类,而其他点代入之后,y都大于1,是为正类。(感知机模型默认的阶跃函数是:

\[f(z) = \left\{ \begin{array}{l} 1, z > 0 \\ 0, 其他 \end{array} \right. \]

所以大于0是正类,小于0是负类。)

训练完模型之后,就可以用Perception的预测方法.predict来预测新数据点的类型是什么了。

data_for_preditc = [[2,2], [0, 0.4]]

prediction = per_clf.predict(data_for_preditc)  # predict接收二维数组作为参数
print(f"新数据点{data_for_preditc}的类别是:{prediction}")

输出:

新数据点[[2, 2], [0, 0.4]]的类别是:[1 0]

其实感知机就是个线性回归加个阈值

3.3.2 多层感知机(Multi-Layer Perceptron, MLP)