1.0.1应用场景:
1.0.2算法思想:
一种二分类的线性分类模型,是神经网络和支持向量机的基础。输入为实例的特征向量,输出为实例的类别,+1代表正类,-1代表负类。
感知机的目标就是在输入空间中找到一个 “分离超平面" S(wX+b=0),将 "线性可分" 数据集一分为二,此超平面又称 "分界面"。
即对y=+1的实例点,有wx+b>0,对y=-1的实例点,有wx+b≤0,则称数据集线性可分,否则线性不可分。
1.0.3 计算流程:
缺点: 感知机是线性的模型,其不能表达复杂的函数,不能出来线性不可分的问题,其连异或问题(XOR)都无法解决,因为异或问题是线性不可分的,怎样解决这个问题呢,通常可以: 1.用更多的感知机去进行学习,这也就是人工神经网络的由来。 2.用非线性模型,核技巧,如SVM进行处理。
1.0.4 调包实战:
案例一:以sklearn自带的鸢尾花数据集举例:
# _*_ coding: utf-8 _*_
# @Time :2022/2/20 0:06
# @Author :Peggy
# @FileName:perceptron.py
# @software:PyCharm
## 利用sklearn载入iris数据集并利用感知机进行分类(三个类别)
#scikit-learn的Perceptron也支持多类分类
import sklearn
from sklearn import datasets
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
#加载iris数据集
#iris数据集为一个用于识别鸢尾花的机器学习数据集
#通过四种特征(花瓣长度,花瓣宽度,花萼长度,花萼宽度)来实现三种鸢尾花的类别划分
iris = datasets.load_iris()
#iris.data大小为150*4,代表4种特征
#这里只提取后两类特征
X = iris.data[:,[2,3]]
# 标签
y = iris.target
#划分训练集和测试集
#random_state = 0表示不设定随机数种子,每一次产生的随机数不一样
X_train,X_test,y_train,y_test = train_test_split(X, y, test_size = 0.3, random_state = 0)
# 为了追求机器学习和最优化算法的最佳性能,我们将特征缩放
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train) # 估算每个特征的平均值和标准差
# 查看特征的平均值,由于Iris我们只用了两个特征,结果是array([ 3.82857143, 1.22666667])
sc.mean_
# 查看特征的标准差,结果是array([ 1.79595918, 0.77769705])
sc.scale_
#标准化训练集
X_train_std = sc.transform(X_train)
# 注意:这里我们要用同样的参数来标准化测试集,使得测试集和训练集之间有可比性
X_test_std = sc.transform(X_test)
# 训练感知机模型
from sklearn.linear_model import Perceptron
# eta0:可以理解成梯度下降中的学习率
# random_state:设置随机种子的,为了每次迭代都有相同的训练集顺序
ppn = Perceptron(n_iter_no_change=40, eta0=0.1, random_state=0)
ppn.fit(X_train_std, y_train)
# 得到训练结果,w权重矩阵
print(ppn.coef_)
#超平面的截距,此处输出为:[0.]
print(ppn.intercept_)
# 分类测试集,这将返回一个测试结果的数组
y_pred = ppn.predict(X_test_std)
# 计算模型在测试集上的准确性
accuracy_score(y_test, y_pred)
如果只是想大致了解或者已经学过的想方便记忆,以上即可。以下为自己学习记录用:
1.0.5 算法详细原理:
感知机学习策略: 假设样本线性可分,感知机学习的目标就是求能将正负样本完全分开的分离超平面,即要寻找w,b(因为wx+b=0确定了分离超平面)。因此我们需要确定一个学习策略,即定义损失函数,并通过训练样本使其最小化。
损失函数的一个自然选择是误分类点的总数,但是,通过这种方式定义的损失函数对参数w,b来说不是连续可导函数,不易于优化。所有感知机采取的是误分类点到超平面S的总距离。损失函数的推导如下:
感知机学习算法: 感知机学习问题转化为求解上述损失函数的最优化问题,这里可以通过随机梯度下降法来求解。下面详细解释其原始形式和对偶形式。
感知机学习算法是误分类驱动的,具体采用随机梯度下降法。首先,任意选取一个超平面,然后用梯度下降法不断地极小化目标函数(损失函数)。极小化过程中一次随机选取一个误分类点使其梯度下降。
这种学习算法直观解释:当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整w,b的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超平面越过该误分类点使其被正确分类。
表示下降的步长,越大下降速度越快。