0

0

“机器学习”系列之Perceptron(感知机)

P粉084495128

P粉084495128

发布时间:2025-08-01 09:52:59

|

337人浏览过

|

来源于php中文网

原创

感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法对损失函数进行最优化。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

“机器学习”系列之perceptron(感知机) - php中文网

“机器学习”系列之感知机

0 简介

  • 感知机是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法对损失函数进行最优化。

同时介绍一个可视化实验网址,效果如下:网站链接

“机器学习”系列之Perceptron(感知机) - php中文网

1 感知机模型

  • 假设输入空间(特征向量)是xRnx∈Rn,输出空间为,输入Y1,1Y∈−1,1表示实例的特征向量,对应于输入空间的点,输出xXx∈X表示实例的类别,则由输入空间到输出空间的表达形式为:

“机器学习”系列之Perceptron(感知机) - php中文网

  • 上面该函数称为感知机,其中w,b称为模型的参数,xRnx∈Rn称为权值,bb称为偏置,wxw∗x表示为wxw,x的内积

“机器学习”系列之Perceptron(感知机) - php中文网

  • 如果我们将sign称之为激活函数的话,感知机与logistic regression的差别就是感知机激活函数是sign,logistic regression的激活函数是sigmoid。sign(x)将大于0的分为1,小于0的分为-1;sigmoid将大于0.5的分为1,小于0.5的分为0。因此sign又被称为单位阶跃函数,logistic regression也被看作是一种概率估计。
  • 该感知机线性方程表示为:wx+b=0w∗x+b=0,它的几何意义如下图所示:

“机器学习”系列之Perceptron(感知机) - php中文网

  • 学习参数w与b,确定了w与b,图上的直线(高维空间下为超平面)也就确定了,那么以后来一个数据点,我用训练好的模型进行预测判断,如果大于0就分类到+1,如果小于0就分类到-1。
  • 用到了超平面分离定理:超平面分离定理是应用凸集到最优化理论中的重要结果,这个结果在最优化理论中有重要的位置。所谓两个凸集分离,直观地看是指两个凸集合没有交叉和重合的部分,因此可以用一张超平面将两者隔在两边。如下图所示,在大于0的时候,我将数据点分类成了D类,在小于0的时候,我将数据点分类成了C类

“机器学习”系列之Perceptron(感知机) - php中文网

歌者PPT
歌者PPT

歌者PPT,AI 写 PPT 永久免费

下载

2 感知机学习策略

  • 学习出超平面的参数w,b,这就需要用到我们的学习策略。距离公式如下:

1wwx0+b∣w∣1∣w∗x0+b∣

  • 每一个误分类点都满足:yi(wx0+b)>0−yi(w∗x0+b)>0
  • 因为当我们数据点正确值为+1的时候,你误分类了,那么你判断为-1,则算出来(wx0+b)<0(w∗x0+b)<0,所以 满足yi(wx0+b)>0−yi(w∗x0+b)>0
  • 当数据点是正确值为-1的时候,你误分类了,那么你判断为+1,则算出来(wx0+b)>0(w∗x0+b)>0,所以满足yi(wx0+b)>0−yi(w∗x0+b)>0
  • 得到误分类点的距离为:

1wyi(wxi+b)−∣w∣1yi(w∗xi+b)

  • 又因yi(wx0+b)>0−yi(w∗x0+b)>0,所以可以直接将绝对值去掉。那么可以得到总距离为:

1wΣyi(wxi+b)−∣w∣1Σyi(w∗xi+b)

  • 不考虑1w∣w∣1,我们可以得到损失函数为:

L(w,b)=Σyi(wxi+b)L(w,b)=−Σyi(w∗xi+b)

  • 其中M为误分类点的数目。

3 总结

  • 感知机的模型是f(x)=sign(wx+b)f(x)=sign(w∗x+b),它的任务是解决二分类问题,要得到感知机模型我们就需要学习到参数w,b。
  • 学习策略,不断的迭代更新w,b,所以我们需要找到一个损失函数。很自然的我们想到用误分类点的数目来表示损失函数,但是由于不可导,无法进行更新,改为误分类点到超平面的距离来表示,然后不考虑1w∣w∣1,得到我们最终的损失函数

4 代码实现

以iris数据集中两个分类的数据和[sepal length,sepal width]作为特征进行代码举例

4.1 导包、数据集加载

In [1]
import pandas as pdimport numpy as npfrom sklearn.datasets import load_irisimport matplotlib.pyplot as plt
%matplotlib inline
In [2]
# load datairis = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['label'] = iris.target
In [3]
#df.columns = ['sepal length', 'sepal width', 'petal length', 'petal width', 'label']
df.label.value_counts()
2    50
1    50
0    50
Name: label, dtype: int64
In [4]
plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0')
plt.scatter(df[50:100]['sepal length'], df[50:100]['sepal width'], label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
<matplotlib.legend.Legend at 0x7f70182f1490>
<Figure size 432x288 with 1 Axes>
In [5]
data = np.array(df.iloc[:100, [0, 1, -1]])
In [6]
X, y = data[:,:-1], data[:,-1]
In [7]
y = np.array([1 if i == 1 else -1 for i in y])

4.2 定义Perceptron(感知机)函数

In [9]
# 数据线性可分,二分类数据# 此处为一元一次线性方程class Model:
    def __init__(self):
        self.w = np.ones(len(data[0])-1, dtype=np.float32)
        self.b = 0
        self.l_rate = 0.1
        # self.data = data
    
    def sign(self, x, w, b):
        y = np.dot(x, w) + b        return y    
    # 随机梯度下降法
    def fit(self, X_train, y_train):
        is_wrong = False
        while not is_wrong:
            wrong_count = 0
            for d in range(len(X_train)):
                X = X_train[d]
                y = y_train[d]                if y * self.sign(X, self.w, self.b) <= 0:
                    self.w = self.w + self.l_rate*np.dot(y, X)
                    self.b = self.b + self.l_rate*y
                    wrong_count += 1
            if wrong_count == 0:
                is_wrong = True
        return 'Perceptron Model!'
        
    def score(self):
        pass
In [10]
perceptron = Model()
perceptron.fit(X, y)
'Perceptron Model!'

4.3 结果展示

In [11]
x_points = np.linspace(4, 7,10)
y_ = -(perceptron.w[0]*x_points + perceptron.b)/perceptron.w[1]
plt.plot(x_points, y_)

plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
<matplotlib.legend.Legend at 0x7f7f43472150>
<Figure size 432x288 with 1 Axes>

4.4 使用scikit-learn中的Perceptron方法

In [15]
from sklearn.linear_model import Perceptron
In [27]
clf = Perceptron(fit_intercept=False,max_iter=5000, shuffle=False)
clf.fit(X, y)
Perceptron(alpha=0.0001, class_weight=None, early_stopping=False, eta0=1.0,
           fit_intercept=False, max_iter=5000, n_iter_no_change=5, n_jobs=None,
           penalty=None, random_state=0, shuffle=False, tol=0.001,
           validation_fraction=0.1, verbose=0, warm_start=False)
In [28]
# Weights assigned to the features.print(clf.coef_)
[[ 16.3 -24.2]]
In [29]
# 截距 Constants in decision function.print(clf.intercept_)
[0.]
In [30]
x_ponits = np.arange(4, 8)
y_ = -(clf.coef_[0][0]*x_ponits + clf.intercept_)/clf.coef_[0][1]
plt.plot(x_ponits, y_)

plt.plot(data[:50, 0], data[:50, 1], 'bo', color='blue', label='0')
plt.plot(data[50:100, 0], data[50:100, 1], 'bo', color='orange', label='1')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend()
<matplotlib.legend.Legend at 0x7f7ef401f410>
<Figure size 432x288 with 1 Axes>

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析的方法
数据分析的方法

数据分析的方法有:对比分析法,分组分析法,预测分析法,漏斗分析法,AB测试分析法,象限分析法,公式拆解法,可行域分析法,二八分析法,假设性分析法。php中文网为大家带来了数据分析的相关知识、以及相关文章等内容。

504

2023.07.04

数据分析方法有哪几种
数据分析方法有哪几种

数据分析方法有:1、描述性统计分析;2、探索性数据分析;3、假设检验;4、回归分析;5、聚类分析。本专题为大家提供数据分析方法的相关的文章、下载、课程内容,供大家免费下载体验。

292

2023.08.07

网站建设功能有哪些
网站建设功能有哪些

网站建设功能包括信息发布、内容管理、用户管理、搜索引擎优化、网站安全、数据分析、网站推广、响应式设计、社交媒体整合和电子商务等功能。这些功能可以帮助网站管理员创建一个具有吸引力、可用性和商业价值的网站,实现网站的目标。

759

2023.10.16

数据分析网站推荐
数据分析网站推荐

数据分析网站推荐:1、商业数据分析论坛;2、人大经济论坛-计量经济学与统计区;3、中国统计论坛;4、数据挖掘学习交流论坛;5、数据分析论坛;6、网站数据分析;7、数据分析;8、数据挖掘研究院;9、S-PLUS、R统计论坛。想了解更多数据分析的相关内容,可以阅读本专题下面的文章。

534

2024.03.13

Python 数据分析处理
Python 数据分析处理

本专题聚焦 Python 在数据分析领域的应用,系统讲解 Pandas、NumPy 的数据清洗、处理、分析与统计方法,并结合数据可视化、销售分析、科研数据处理等实战案例,帮助学员掌握使用 Python 高效进行数据分析与决策支持的核心技能。

82

2025.09.08

Python 数据分析与可视化
Python 数据分析与可视化

本专题聚焦 Python 在数据分析与可视化领域的核心应用,系统讲解数据清洗、数据统计、Pandas 数据操作、NumPy 数组处理、Matplotlib 与 Seaborn 可视化技巧等内容。通过实战案例(如销售数据分析、用户行为可视化、趋势图与热力图绘制),帮助学习者掌握 从原始数据到可视化报告的完整分析能力。

60

2025.10.14

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

136

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

47

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
10分钟--Midjourney创作自己的漫画
10分钟--Midjourney创作自己的漫画

共1课时 | 0.1万人学习

Midjourney 关键词系列整合
Midjourney 关键词系列整合

共13课时 | 0.9万人学习

AI绘画教程
AI绘画教程

共2课时 | 0.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号