【Python-ML】感知器学习算法(perceptron)
1、数学模型
2、权值训练
3、Python代码
感知器收敛的前提是两个类别必须是线性可分的,且学习速率足够小。如果两个类别无法通过一个线性决策边界进行划分,要为模型在训练集上的学习迭代次数设置一个最大值,或者设置一个允许错误分类样本数量的阈值,否则感知器训练算法将永远不停地更新权值。
# -*- coding: utf-8 -*-
'''
Created on 2017年12月15日
@author: Jason.F
@summary: 感知器学习算法
'''
import numpy as np
import time
import matplotlib.pyplot as plt
import pandas as pd
class perceptron(object):''' Perceptron classifier.Parameterseta:float=Learning rate (between 0.0 and 1.0)n_iter:int=Passes over the training dataset.Attributesw_:ld-array=weights after fitting.errors_:list=Number of misclassifications in every epoch.'''def __init__(self,eta=0.01,n_iter=10):self.eta=etaself.n_iter=n_iterdef fit(self,X,y):'''Fit training data.ParametersX:{array-like},shape=[n_samples,n_features]Training vectors,where n_samples is the number of the samples and n_features is the number of features.y:array-like,shape=[n_samples]Target values.Returnsself:object'''self.w_=np.zeros(1+X.shape[1])self.errors_=[]for _ in range(self.n_iter):errors=0for xi , target in zip(X,y):update=self.eta * (target - self.predict(xi))self.w_[1:]+=update *xiself.w_[0]+=updateerrors += int (update !=0.0)self.errors_.append(errors)return selfdef net_input(self,X):'''Calculate net input'''return np.dot(X, self.w_[1:])+self.w_[0]def predict(self,X):'''Return class label after unit step'''return np.where(self.net_input(X) >=0.0,1,-1)if __name__ == "__main__": start = time.clock() train =pd.read_csv('https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data',header=None)ppn = perceptron(eta=0.01,n_iter=10)X_train = train.drop([4], axis=1)X_train=X_train.values #dataframe convert to arrayy_train = train[4].valuesy_train=np.where(y_train == 'Iris-setosa',-1,1)ppn.fit(X_train,y_train)#预测print (ppn.predict([6.9,3.0,5.1,1.8]))#绘制错误分类样本数量plt.plot(range(1,len(ppn.errors_)+1),ppn.errors_,marker='o')plt.xlabel('Epochs')plt.ylabel('Number of misclassifications')plt.show()end = time.clock() print('finish all in %s' % str(end - start))
代码中用UCI机器学习库中的数据集做试验。可设置不同的学习速率eta和迭代次数n_iter观察收敛情况。
【Python-ML】感知器学习算法(perceptron)相关推荐
- 机器学习算法系列(一)- 感知器学习算法(PLA)
阅读本文需要的背景知识点:数学基础知识.一丢丢编程知识 一.引言 前面一节我们了解了机器学习算法系列(〇)- 基础知识,接下来正式开始机器学习算法的学习,首先我们从最简单的一个算法--感知器学习算 ...
- 分类系列之感知器学习算法PLA 和 口袋算法Pocket Algorithm
我们有一堆数据,默认他们是线性可分的. 定义f为这个数据分割线的最优解,但是我们不知道他的值. 我们仅有一个函数集H,这个函数一般是无穷大的.我们的目的就是从H中找出一条线g来尽可能的接近f.但是 ...
- python实现感知器算法
在1943年,沃伦麦卡洛可与沃尔特皮茨提出了第一个脑神经元的抽象模型,简称麦卡洛可-皮茨神经元(McCullock-Pitts neuron)简称MCP,大脑神经元的结构如下图.麦卡洛可和皮茨将神经细 ...
- Machine Learning---感知器学习算法
转载自:http://blog.csdn.net/stan1989/article/details/8565499 引言 这里开始介绍神经网络方面的知识(Neural Networks).首先我们会介 ...
- ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测
ML之NB:基于news新闻文本数据集利用纯统计法.kNN.朴素贝叶斯(高斯/多元伯努利/多项式).线性判别分析LDA.感知器等算法实现文本分类预测 目录 基于news新闻文本数据集利用纯统计法.kN ...
- 【深度学习BookNote】多层感知器(multi-layer perceptron)
多层感知器(multi-layer perceptron) 神经网络的变种目前有很多,如误差反向传播(Back Propagation,BP)神经网路.概率神经网络.卷积神经网络(Convolutio ...
- 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现
Rosenblatt感知器收敛算法C++实现 算法概述 自己用C++实现了下,测试的例子和模式用的都是双月分类模型,关于双月分类相关看之前的那个笔记: https://blog.csdn.net/u0 ...
- 机器学习系列(一)感知器分类算法
分类算法有两种类型:感知器和适应性线性神经元 神经元的数学表示 w=[w1w2...wm],x=[x1x2...xm]w=\begin{bmatrix} w_1 \\ w_2 \\ ... \\ w_ ...
- Tensorflow中的多层感知器学习
Tensorflow中的多层感知器学习 在这篇文章中,我们将了解多层感知器的概念和它在Python中使用TensorFlow库的实现. 多层感知 多层感知也被称为MLP.它是完全连接的密集层,可以将任 ...
最新文章
- js滚动页面到固定位置进行操作
- 原理剖析-Netty之服务端启动工作原理分析(上)
- mysql utf8转gbk cmd_转:在CMD中操作mysql数据库出现中文乱码解决方案
- “约见”面试官系列之常见面试题之第五十五篇之清除浮动的方法(建议收藏)
- LeetCode 70. 爬楼梯(动态规划)
- 容器服务Windows Kubernetes使用阿里云日志服务来收集容器日志
- 机器学习降维算法五——KPCA算法
- mysql中explain的详细解释
- JAVA日期处理(Timestamp)
- python中list和numpy的array的转换
- Python 设计模式-- 命令模式
- 微图App有哪些实用的功能?
- java母类_java关键字分类详解
- Word 打印 PrintOut 方法
- 先行一步,7大技术创新和突破,阿里云把 Serverless 领域的这些难题都给解了
- Netty心跳检测代码及源码流程
- 【网络】IP、域名、端口号和DNS域名解析之间的联系简介(给服务器添加域名来验证)
- 【Ybt OJ】[数学基础 第3章] 同余问题
- [pysyft-006]联邦学习pysyft从入门到精通--使用protocol
- Vim q-quit - 用 q 键关闭窗口