简单易学的机器学习算法——在线顺序极限学习机OS-ELM
时间:2022-05-04
本文章向大家介绍简单易学的机器学习算法——在线顺序极限学习机OS-ELM,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
这篇文章主要是前面整理的,就直接上图了。
实验:
# coding:UTF-8
#################
# OS_ELM
# author : zhiyong_will
# date : 2015.3.22
#################
from __future__ import division
from datetime import datetime
from csv import DictReader
from math import exp
import random
from numpy import *
import string
#####设置相关参数########
trainData = "C:\Users\dell\Desktop\OS-ELM\segment_train.csv"
testData = "C:UsersdellDesktopOS-ELM\segment_test.csv"
#隐含神经元的个数
nHiddenNeurons = 180
#输入层的神经元个数
nInputNeurons = 19
#初始训练集的大小
NO = 280
#函数
def sig(tData, Iw, bias, num):
'''
tData:样本矩阵:样本数*特征数
Iw:输入层到第一个隐含层的权重:隐含层神经元数*特整数
bias:偏置1*隐含神经元个数
'''
v = tData * Iw.T #样本数*隐含神经元个数
bias_1 = ones((num, 1)) * bias
v = v + bias_1
H = 1./(1+exp(-v))
return H
##导入数据集
firstTrainData = []
firstTrainLable = []
# 处理训练样本
for t, row in enumerate(DictReader(open(trainData))):
Id = row['Id']
del row['Id']
del row['I0']
data = []
if int(Id) < NO:
# 处理是否被点击
if row['Label'] == '1.00000000':
y = 1
elif row['Label'] == '2.00000000':
y = 2
elif row['Label'] == '3.00000000':
y = 3
elif row['Label'] == '4.00000000':
y = 4
elif row['Label'] == '5.00000000':
y = 5
elif row['Label'] == '6.00000000':
y = 6
else:
y = 7
del row['Label']
firstTrainLable.append(y)
# 处理特征
for key in row:
value = string.atof(row[key])
#index = int(value + key[1:], 16) % D
data.append(value)
firstTrainData.append(data)
continue
elif int(Id) == NO:#开始训练
p0 = mat(firstTrainData)
T0 = zeros((NO, 7))
#处理样本标签
for i in xrange(0, NO):
a = firstTrainLable[i]
T0[i][a-1] = 1
T0 = T0 * 2 - 1
Iw = mat(random.rand(nHiddenNeurons, nInputNeurons) * 2 - 1)#随机生成区间-1,1之间的随机矩阵
bias = mat(random.rand(1, nHiddenNeurons))
H0 = sig(p0, Iw, bias, NO)#样本数*隐含神经元个数
M = (H0.T * H0).I
beta = M * H0.T * T0
else:#训练剩余的样本,每次训练一条样本
# 处理label
if row['Label'] == '1.00000000':
y = 1
elif row['Label'] == '2.00000000':
y = 2
elif row['Label'] == '3.00000000':
y = 3
elif row['Label'] == '4.00000000':
y = 4
elif row['Label'] == '5.00000000':
y = 5
elif row['Label'] == '6.00000000':
y = 6
else:
y = 7
del row['Label']
Tn = zeros((1, 7))
#处理样本标签
b = y
Tn[0][b-1] = 1
Tn = Tn * 2 - 1
# 处理特征
data = []
for key in row:
value = string.atof(row[key])
data.append(value)
pn = mat(data)
H = sig(pn, Iw, bias, 1)
M = M - M * H.T * (eye(1,1) + H * M * H.T).I * H * M
beta = beta + M * H.T * (Tn - H * beta)
# 计算训练误差
correct = 0
sum = 0
for t, row in enumerate(DictReader(open(trainData))):
del row['Id']
del row['I0']
# 处理是否被点击
if row['Label'] == '1.00000000':
y = 1
elif row['Label'] == '2.00000000':
y = 2
elif row['Label'] == '3.00000000':
y = 3
elif row['Label'] == '4.00000000':
y = 4
elif row['Label'] == '5.00000000':
y = 5
elif row['Label'] == '6.00000000':
y = 6
else:
y = 7
del row['Label']
# 处理特征
data = []
for key in row:
value = string.atof(row[key])
data.append(value)
p = mat(data)
HTrain = sig(p, Iw, bias, 1)
Y = HTrain * beta
# 判断
if argmax(Y) + 1 == y:
correct += 1
sum += 1
print("训练准确性为:%f" % (correct/sum))
# 计算测试误差
correctTest = 0
sumTest = 0
for t, row in enumerate(DictReader(open(testData))):
del row['Id']
del row['I0']
# 处理是否被点击
if row['Label'] == '1.00000000':
y = 1
elif row['Label'] == '2.00000000':
y = 2
elif row['Label'] == '3.00000000':
y = 3
elif row['Label'] == '4.00000000':
y = 4
elif row['Label'] == '5.00000000':
y = 5
elif row['Label'] == '6.00000000':
y = 6
else:
y = 7
del row['Label']
# 处理特征
data = []
for key in row:
value = string.atof(row[key])
data.append(value)
p = mat(data)
HTrain = sig(p, Iw, bias, 1)
Y = HTrain * beta
# 判断
if argmax(Y) + 1 == y:
correctTest += 1
sumTest += 1
print("测试准确性为:%f" % (correctTest/sumTest))
实验结果:
参考文章:
A Fast and Accurate Online Sequential Learning Algorithm for Feedforward Networks
- 如何为可扩展系统进行Java Socket编程
- 如何使用Windows卷影拷贝服务恢复文件和文件夹
- .net字符串数组查找方式效率比较
- 使用Ring Buffer构建高性能的文件写入程序
- 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架
- PDF.NET数据开发框架实体类操作实例
- 利用Burp Suite对OWASP Juice Shop进行渗透测试
- Java同步问题面试知识学习
- Android UI控件系列:LinearLayout(线性布局)
- 使用操作符重载,生成ORM实体类的SQL条件语句
- Dance In Heap(四):一些堆利用的方法(下)
- Mac系统的Proton恶意软件:卷!土!重!来!
- Erlang语言学习入门
- Android使用Ant进行apk多渠道打包
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
- 1小时真正掌握正则表达式
- Android Studio 安装配置教程 - Windows(详细版)
- Android 天气APP(八)城市切换 之 自定义弹窗与使用
- Android 接入udesk SDK实现IM
- Android 天气APP(十二)空气质量、UI优化调整
- Python+selenium 自动化-调用dom节点的click()监听事件,强力操作节点!穿透元素进行点击,节点被遮挡不可点击解决方法
- pkl是什么类型的文件?怎么来打开它?
- Python 技术篇-如何查看文本用什么类型的编码,文本编码查看方法
- Elasticsearch:设置 Elastic 账户安全
- Git存管代码,实例演示
- Git 技术篇-GitHub绑定本地Git,实例演示。实现代码云寄存
- Android 天气APP(十三)仿微信弹窗(右上角加号点击弹窗效果)、自定义背景图片、UI优化调整
- Python 微信机器人:识别消息来源于群聊还是个人
- Android 对接极光推送