最近在自学机器学习,记录下一些学习记录

如何用python实现一个简单的感知机

需要安装numpy库,即下面用到的np

简单的说就是

通过计算权重向量w和输入向量x的线性组合,判断该线性组合是否大于某个阀值,如果是,输出1,不是,输出-1

根据判断结果与正确结果对比,调整权重向量w,得到最佳的权重向量。从而可以预测新的值属于哪一类

更新权重值的公式

n是学习率值在0.0-1.0之间,yi是正确值,yi^是预测值,xji是x在j点的值

class Perceptron(object):
"""分类感知机.
参数
------------
eta:float
学习率 (在 0.0 到 1.0之间)
n_iter:int
迭代次数 属性
------------
w_: ld-array:
权重
errors_: list
误差
""" def __init__(self, eta=0.01, n_iter=10):
self.eta = eta
self.n_iter = n_iter def fit(self, X, y):
"""适应训练集 参数
---------------
X: array-like, shape=[n_smaples, n_features]
训练集数组(m*1), n_samples 是样本数量 n_features 特征值数量
y: array-like, shape=[n_samples]
目标值(m*1) Returns
--------------
self: object
"""
# 初始化权重函数和误差,权重函数为全一的数组
self.w_ = np.zeros(1+X.shape[1])# 多了w0
self.errors_ = [] for _ in range(self.n_iter):
errors = 0
for xi, target in zip(X, y):
update = self.eta * (target - self.predict(xi))
self.w_[1:] += update * xi
self.w_[0] += update # w0 = w0 * x0 = w0 * 1 = w0
errors += int(update != 0.0)
self.errors_.append(errors)
return self def net_input(self, X):
"""计算权重w_与X的乘积"""
return np.dot(X, self.w_[1:]) + self.w_[0] def predict(self, X):
"""激活(预测)函数 权重和X的乘积大于0位1否则为-1"""
return np.where(self.net_input(X) >= 0.0, 1, -1)

本感知机是基础的感知机,只限用于区分两个线性可分的类别

python 实现简单的感知机的更多相关文章

  1. Python 实现简单的感知机算法

    感知机 随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别 导入包并设定画图尺寸 import numpy as np import matplotlib.pyplot a ...

  2. 使用Python来编写一个简单的感知机

    来表示.第二个元素是表示期望输出的值. 这个数组定义例如以下: training_data = [  (array([0,0,1]), 0),  (array([0,1,1]), 1),  (arra ...

  3. Python 实现简单的 Web

    简单的学了下Python, 然后用Python实现简单的Web. 因为正在学习计算机网络,所以通过编程来加强自己对于Http协议和Web服务器的理解,也理解下如何实现Web服务请求.响应.错误处理以及 ...

  4. 用 python实现简单EXCEL数据统计

    任务: 用python时间简单的统计任务-统计男性和女性分别有多少人. 用到的物料:xlrd 它的作用-读取excel表数据 代码: import xlrd workbook = xlrd.open_ ...

  5. python开启简单webserver

    python开启简单webserver linux下面使用 python -m SimpleHTTPServer 8000 windows下面使用上面的命令会报错,Python.Exe: No Mod ...

  6. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  7. python使用简单http协议来传送文件

    python使用简单http协议来传送文件!在ubuntu环境下,局域网内可以使用nc来传送文件,也可以使用基于Http协议的方式来下载文件我们可以使用python -m SimpleHTTPServ ...

  8. Python超简单的HTTP服务器

    Python超简单的HTTP服务器 安装了python就可以 python -m SimpleHTTPServer 执行这一个命令即可实现一个HTTP服务器,将当前目录设为HTTP服务目录,可以通过h ...

  9. 教学项目之-通过Python实现简单的计算器

    教学项目之-通过Python实现简单的计算器   计算器开发需求 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/ ...

随机推荐

  1. poj 1182 (扩展并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 58979   Accepted: 17247 Description ...

  2. 五十九 数据库访问 使用MySQL

    MySQL是Web世界中使用最广泛的数据库服务器.SQLite的特点是轻量级.可嵌入,但不能承受高并发访问,适合桌面和移动应用.而MySQL是为服务器端设计的数据库,能承受高并发访问,同时占用的内存也 ...

  3. oracle 11g安装教程

    oracle 11g安装教程 第1步 第2步 第3步 第4步 第5步 第6步 第7步 第8步 第9步 第10步 第11步 第12步 第13步 第14步 第15步 第16步 第17步 第18步 第19步 ...

  4. 图片乱码问题 解决方法 php

    两个开发者都是下载同一个项目的git代码,但到本地环境,一个可以正常显示图片验证码,一个不行,找个半天开始以为环境问题 找了半天 不是 很多没说到重点 其实不只是当前文件格式问题 也要考虑其他调用文件 ...

  5. python 截取指定长度汉字

    这个方法不是很好,不知道有没有更好的方法 def cut_hz(s, length): charstyle = chardet.detect(s) t = s[:length] try: unicod ...

  6. vim的保存文件和退出命令

    文章来源:http://blog.sina.com.cn/s/blog_5e357d2d0100zmth.html 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把 ...

  7. POJ1742 Coin [DP补完计划]

    题目传送门 Coins Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 41707   Accepted: 14125 Des ...

  8. 数学【CF743C】Vladik and fractions

    Description 请找出一组合法的解使得\(\frac {1}{x} + \frac{1}{y} + \frac {1}{z} = \frac {2}{n}\)成立 其中\(x,y,z\)为正整 ...

  9. Linux命令之head

    head [选项] [文件] head命令输出文件开头部分,默认情况下显示文件的头10行.如果指定多个文件,每个文件前都有一个标题,给出文件名.如果没有指定文件,或当文件为-时,读取标准输入. (1) ...

  10. Envious Exponents

    问题 E: Envious Exponents 时间限制: 1 Sec  内存限制: 128 MB提交: 321  解决: 53[提交] [状态] [讨论版] [命题人:] 题目描述 Alice an ...