iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python中怎么实现一个感知器分类算法
  • 906
分享到

Python中怎么实现一个感知器分类算法

2023-06-15 17:06:13 906人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

python中怎么实现一个感知器分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。感知器算法Perceptron算法是两类(二进制)分类机器学习算法。它是一种神经网络模

python中怎么实现一个感知器分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

感知器算法

Perceptron算法是两类(二进制)分类机器学习算法。它是一种神经网络模型,可能是最简单的神经网络模型类型。它由将一行数据作为输入并预测类标签的单个节点或神经元组成。这可以通过计算输入的加权和和偏差(设置为1)来实现。模型输入的加权总和称为激活。

激活=权重*输入+偏差

如果激活高于0.0,则模型将输出1.0;否则,模型将输出1.0。否则,将输出0.0。

预测1:如果激活> 0.0

预测0:如果激活<= 0.0

假设输入已乘以模型系数,如线性回归和逻辑回归,则优良作法是在使用模型之前对数据进行标准化或标准化。感知器是线性分类算法。这意味着它将学习在特征空间中使用一条线(称为超平面)将两个类别分开的决策边界。因此,适用于那些类别可以通过线性或线性模型(称为线性可分离)很好地分离的问题。该模型的系数称为输入权重,并使用随机梯度下降优化算法进行训练。一次将来自训练数据集的示例显示给模型,模型进行预测并计算误差。然后,更新模型的权重以减少示例的误差。这称为Perceptron更新规则。对于训练数据集中的所有示例(称为时期)都重复此过程。然后,使用示例更新模型的过程会重复很多次。在每批中,使用较小比例的误差来更新模型权重,并且该比例由称为学习率的超参数控制,通常将其设置为较小的值。这是为了确保学习不会太快发生,从而导致技能水平可能较低,这被称为模型权重的优化(搜索)过程的过早收敛。

权重(t + 1)=权重(t)+学习率*(expected_i &ndash;预测值)* input_i

当模型所产生的误差降至较低水平或不再改善时,或者执行了最大时期数时,训练将停止。

模型权重的初始值设置为较小的随机值。另外,在每个训练纪元之前对训练数据集进行混洗。这是设计使然,以加速和改善模型训练过程。因此,学习算法是随机的,并且每次运行都会获得不同的结果。因此,优良作法是使用重复评估来总结算法在数据集上的性能,并报告平均分类精度。学习率和训练时期数是算法的超参数,可以使用启发式或超参数调整来设置。

现在我们已经熟悉了Perceptron算法,现在让我们探索如何在Python中使用该算法。

Perceptron 与 Scikit-Learn

可通过Perceptron类在scikit-learn Python机器学习库中使用Perceptron算法。该类允许您配置学习率(eta0),默认为1.0。

# define model  model = Perceptron(eta0=1.0)

该实现还允许您配置训练时期的总数(max_iter),默认为1,000。

# define model  model = Perceptron(max_iter=1000)

Perceptron算法的scikit-learn实现还提供了您可能想探索的其他配置选项,例如提前停止和使用惩罚损失。我们可以通过一个有效的示例来演示Perceptron分类器。首先,让我们定义一个综合分类数据集。我们将使用make_classification()函数创建一个包含1,000个示例的数据集,每个示例包含20个输入变量。该示例创建并汇总了数据集。

# test classification dataset  from sklearn.datasets import make_classification  # define dataset  X, y = make_classification(n_samples=1000, n_features=10, n_infORMative=10, n_redundant=0, random_state=1)  # summarize the dataset  print(X.shape, y.shape)

运行示例将创建数据集并确认数据集的行数和列数。

(1000, 10) (1000,)

我们可以通过 RepeatedStratifiedKFold类使用重复的分层k折交叉验证来拟合和评估Perceptron模型。我们将在测试装置中使用10折和3次重复。

# create the model  model = Perceptron()

下面列出了为综合二进制分类任务评估Perceptron模型的完整示例。

# evaluate a perceptron model on the dataset  from numpy import mean  from numpy import std  from sklearn.datasets import make_classification  from sklearn.model_selection import cross_val_score  from sklearn.model_selection import RepeatedStratifiedKFold  from sklearn.linear_model import Perceptron  # define dataset  X, y = make_classification(n_samples=1000, n_features=10, n_informative=10, n_redundant=0, random_state=1)  # define model  model = Perceptron()  # define model evaluation method  cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)  # evaluate model  scores = cross_val_score(model, X, y, scoring='accuracy', cvcv=cv, n_jobs=-1)  # summarize result  print('Mean Accuracy: %.3f (%.3f)' % (mean(scores), std(scores)))

运行示例将在综合数据集上评估Perceptron算法,并报告10倍交叉验证的三个重复中的平均准确性。鉴于学习算法的随机性,您的具体结果可能会有所不同。考虑运行该示例几次。在这种情况下,我们可以看到该模型实现了约84.7%的平均准确度。

Mean Accuracy: 0.847 (0.052)

我们可能决定使用Perceptron分类器作为最终模型,并对新数据进行预测。这可以通过在所有可用数据上拟合模型管道并调用传递新数据行的predict()函数来实现。我们可以通过下面列出的完整示例进行演示。

# make a prediction with a perceptron model on the dataset  from sklearn.datasets import make_classification  from sklearn.linear_model import Perceptron  # define dataset  X, y = make_classification(n_samples=1000, n_features=10, n_informative=10, n_redundant=0, random_state=1)  # define model  model = Perceptron()  # fit model  model.fit(X, y)  # define new data  row = [0.12777556,-3.64400522,-2.23268854,-1.82114386,1.75466361,0.1243966,1.03397657,2.35822076,1.01001752,0.56768485]  # make a prediction  yhat = model.predict([row])  # summarize prediction  print('Predicted Class: %d' % yhat)

运行示例将使模型适合模型并为新的数据行进行类标签预测。

Predicted Class: 1

接下来,我们可以看一下配置模型的超参数。

调整感知器超参数

必须为您的特定数据集配置Perceptron算法的超参数。也许最重要的超参数是学习率。较高的学习速度可能会使模型学习速度加快,但可能是以降低技能为代价的。较小的学习率可以得到性能更好的模型,但是训练模型可能需要很长时间。您可以在本教程中了解有关探索学习率的更多信息:训练深度学习神经网络时如何配置学习率通常以较小的对数刻度(例如1e-4(或更小)和1.0)测试学习率。在这种情况下,我们将测试以下值:

# define grid  grid = dict()  grid['eta0'] = [0.0001, 0.001, 0.01, 0.1, 1.0]

下面的示例使用GridSearchCV类以及我们定义的值网格演示了这一点。

# grid search learning rate for the perceptron  from sklearn.datasets import make_classification  from sklearn.model_selection import GridSearchCV  from sklearn.model_selection import RepeatedStratifiedKFold  from sklearn.linear_model import Perceptron  # define dataset X, y = make_classification(n_samples=1000, n_features=10, n_informative=10, n_redundant=0, random_state=1)  # define model  model = Perceptron()  # define model evaluation method  cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)  # define grid  grid = dict()  grid['eta0'] = [0.0001, 0.001, 0.01, 0.1, 1.0]  # define search  search = GridSearchCV(model, grid, scoring='accuracy', cvcv=cv, n_jobs=-1)  # perform the search  results = search.fit(X, y)  # summarize  print('Mean Accuracy: %.3f' % results.best_score_)  print('Config: %s' % results.best_params_)  # summarize all  means = results.cv_results_['mean_test_score']  params = results.cv_results_['params']  for mean, param in zip(means, params):      print(">%.3f with: %r" % (mean, param))

运行示例将使用重复的交叉验证来评估配置的每种组合。鉴于学习算法的随机性,您的具体结果可能会有所不同。尝试运行该示例几次。在这种情况下,我们可以看到,学习率比默认值小会导致更好的性能,学习率0.0001和0.001均达到约85.7%的分类精度,而默认值1.0则达到约84.7%的精度。

Mean Accuracy: 0.857  Config: {'eta0': 0.0001}  >0.857 with: {'eta0': 0.0001}  >0.857 with: {'eta0': 0.001}  >0.853 with: {'eta0': 0.01}  >0.847 with: {'eta0': 0.1}  >0.847 with: {'eta0': 1.0}

另一个重要的超参数是使用多少个时期来训练模型。这可能取决于训练数据集,并且可能相差很大。同样,我们将以1到1e + 4的对数刻度探索配置值。

# define grid  grid = dict()  grid['max_iter'] = [1, 10, 100, 1000, 10000]

我们将使用上次搜索中的良好学习率0.0001。

# define model  model = Perceptron(eta0=0.0001)

下面列出了搜索训练时期数的网格的完整示例。

# grid search total epochs for the perceptron  from sklearn.datasets import make_classification  from sklearn.model_selection import GridSearchCV  from sklearn.model_selection import RepeatedStratifiedKFold  from sklearn.linear_model import Perceptron  # define dataset  X, y = make_classification(n_samples=1000, n_features=10, n_informative=10, n_redundant=0, random_state=1)  # define model  model = Perceptron(eta0=0.0001)  # define model evaluation method  cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)  # define grid  grid = dict() grid['max_iter'] = [1, 10, 100, 1000, 10000]  # define search  search = GridSearchCV(model, grid, scoring='accuracy', cvcv=cv, n_jobs=-1)  # perform the search  results = search.fit(X, y)  # summarize  print('Mean Accuracy: %.3f' % results.best_score_)  print('Config: %s' % results.best_params_)  # summarize all  means = results.cv_results_['mean_test_score']  params = results.cv_results_['params']  for mean, param in zip(means, params):      print(">%.3f with: %r" % (mean, param))

运行示例将使用重复的交叉验证来评估配置的每种组合。鉴于学习算法的随机性,您的具体结果可能会有所不同。尝试运行该示例几次。在这种情况下,我们可以看到从10到10,000的时间段,分类精度几乎相同。一个有趣的例外是探索同时配置学习率和训练时期的数量,以查看是否可以获得更好的结果。

Mean Accuracy: 0.857  Config: {'max_iter': 10}  >0.850 with: {'max_iter': 1}  >0.857 with: {'max_iter': 10}  >0.857 with: {'max_iter': 100}  >0.857 with: {'max_iter': 1000}  >0.857 with: {'max_iter': 10000}

关于Python中怎么实现一个感知器分类算法问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网Python频道了解更多相关知识。

--结束END--

本文标题: Python中怎么实现一个感知器分类算法

本文链接: https://www.lsjlt.com/news/280997.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python中怎么实现一个感知器分类算法
    Python中怎么实现一个感知器分类算法,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。感知器算法Perceptron算法是两类(二进制)分类机器学习算法。它是一种神经网络模...
    99+
    2023-06-15
  • Python中怎么实现一个感知器
    这篇文章将为大家详细讲解有关Python中怎么实现一个感知器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。什么是感知器生物神经元示意图感知器的概念类似于大脑基本处理单元神经元的工作原理。神经...
    99+
    2023-06-15
  • JAVA实现感知器算法
    简述随着互联网的高速发展,A(AI)B(BigData)C(Cloud)已经成为当下的核心发展方向,假如三者深度结合的话,AI是其中最核心的部分。所以如果说在未来社会,每个人都必须要学会编程的话,那么对于程序员来说,人工智能则是他们所必须...
    99+
    2023-05-30
  • Python中怎么实现一个多层感知器神经网络
    这篇文章将为大家详细讲解有关Python中怎么实现一个多层感知器神经网络,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。强大的库已经存在了,如:TensorFlow,PyTorch,Keras...
    99+
    2023-06-16
  • python如何实现感知器学习算法
    这篇文章主要介绍python如何实现感知器学习算法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们将研究一种判别式分类方法,其中直接学习评估 g(x)所需的 w 参数。我们将使用感知器学习算法。感知器学习算法很容易...
    99+
    2023-06-29
  • 详解如何用Python实现感知器算法
    目录一、题目二、数学求解过程三、感知器算法原理及步骤四、python代码实现及结果一、题目 二、数学求解过程 该轮迭代分类结果全部正确,判别函数为g(x)=-2x1+1 三、...
    99+
    2024-04-02
  • Python 中怎么实现一个k-means 均值聚类算法
    Python 中怎么实现一个k-means 均值聚类算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。scikti-learn 将机器学习分为4个领域,分别是分...
    99+
    2023-06-02
  • Python中怎么正确实现一个算法
    本篇文章给大家分享的是有关Python中怎么正确实现一个算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python算法具体操作代码示例:# -*- co...
    99+
    2023-06-17
  • Python中怎么利用DBSCAN实现一个密度聚类算法
    Python中怎么利用DBSCAN实现一个密度聚类算法,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。基于密度这点有什么好处呢我们知道kmeans聚类算法只能处理球形的簇,也就是...
    99+
    2023-06-16
  • Python中怎么实现一个个税计算器
    Python中怎么实现一个个税计算器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。计税方法科普个税方法这里需要知道的知识点:个税起征点调到 5000;累积预扣法:本期应预扣...
    99+
    2023-06-16
  • python中怎么实现一个Progressive Morphological Filter算法
    python中怎么实现一个Progressive Morphological Filter算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 引言机载LiD...
    99+
    2023-06-20
  • Python中怎么实现一个简单遗传算法
    今天就跟大家聊聊有关Python中怎么实现一个简单遗传算法,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。遗传算法遗传算法是模仿自然选择过程的优化算法。 他们没有使用"数学技...
    99+
    2023-06-16
  • python中怎么实现一个抽样回归算法
    本篇文章为大家展示了python中怎么实现一个抽样回归算法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。12 抽查回归算法1 算法概要讨论以下算法 线性算法线性回归RIdge 岭回归LASSO 线性...
    99+
    2023-06-19
  • 图文详解感知机算法原理及Python实现
    目录写在前面1.什么是线性模型2.感知机概述3.手推感知机原理4.Python实现4.1 创建感知机类4.2 更新权重与偏置4.3 判断误分类点4.4 训练感知机4.5 动图可视化5...
    99+
    2024-04-02
  • AJAX中怎么实现一个分页类
    这篇文章给大家介绍AJAX中怎么实现一个分页类,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。代码如下:  var paginationIndex =&nb...
    99+
    2024-04-02
  • Python中怎么实现一个遗传算法框架
    本篇文章给大家分享的是有关Python中怎么实现一个遗传算法框架,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。算法特点以决策变量的编码作为运算对象,使得优化过程借鉴生物学中的概...
    99+
    2023-06-17
  • C++中怎么实现一个 kmp算法
    本篇文章给大家分享的是有关C++中怎么实现一个 kmp算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C++ kmp算法模板参数说明const T *source 待匹配的字...
    99+
    2023-06-17
  • Java中怎么实现一个TFIDF算法
    这篇文章给大家介绍Java中怎么实现一个TFIDF算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。算法介绍最近要做领域概念的提取,TFIDF作为一个很经典的算法可以作为其中的一步处理。计算公式比较简单,如下:预处理由...
    99+
    2023-06-02
  • 怎么利用java实现一个二分法算法
    这篇文章给大家介绍怎么利用java实现一个二分法算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。java 二分法算法1、前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序2、原理:将数组分为...
    99+
    2023-05-31
    java 二分法算法 ava
  • Python中实现一个LZ77压缩算法
    这篇文章给大家介绍Python中实现一个LZ77压缩算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。原理介绍:首先介绍几个专业术语。lookahead buffer(不知道怎么用中文表述,暂时称为待编码区):等待编码...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作