感知机(perceptron)-调包侠必看

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的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,直至超平面越过该误分类点使其被正确分类。

 \eta表示下降的步长,越大下降速度越快。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值