在线顺序极限学习机算法

   








实验:

[python] view plain copy
print ?
  1. # coding:UTF-8  
  2. #################  
  3. # OS_ELM  
  4. # author : zhiyong_will  
  5. # date : 2015.3.22  
  6. #################  
  7. from __future__ import division  
  8. from datetime import datetime  
  9. from csv import DictReader  
  10. from math import exp  
  11. import random  
  12. from numpy import *  
  13. import string  
  14.   
  15. #####设置相关参数########  
  16. trainData = ”C:\\Users\\dell\\Desktop\\OS-ELM\\segment_train.csv”  
  17. testData = ”C:\Users\dell\Desktop\OS-ELM\\segment_test.csv”  
  18. #隐含神经元的个数  
  19. nHiddenNeurons = 180  
  20. #输入层的神经元个数  
  21. nInputNeurons = 19  
  22. #初始训练集的大小  
  23. NO = 280  
  24.   
  25. #函数  
  26. def sig(tData, Iw, bias, num):  
  27.     ”’ 
  28.     tData:样本矩阵:样本数*特征数 
  29.     Iw:输入层到第一个隐含层的权重:隐含层神经元数*特整数 
  30.     bias:偏置1*隐含神经元个数 
  31.     ”’  
  32.     v = tData * Iw.T   #样本数*隐含神经元个数  
  33.     bias_1 = ones((num, 1)) * bias  
  34.     v = v + bias_1  
  35.     H = 1./(1+exp(-v))  
  36.     return H  
  37.       
  38.   
  39. ##导入数据集  
  40. firstTrainData = []  
  41. firstTrainLable = []  
  42.   
  43. # 处理训练样本  
  44. for t, row in enumerate(DictReader(open(trainData))):  
  45.     Id = row[’Id’]  
  46.     del row[‘Id’]  
  47.     del row[‘I0’]  
  48.       
  49.     data = []  
  50.     if int(Id) < NO:  
  51.         # 处理是否被点击  
  52.         if row[‘Label’] == ‘1.00000000’:  
  53.             y = 1  
  54.         elif row[‘Label’] == ‘2.00000000’:  
  55.             y = 2  
  56.         elif row[‘Label’] == ‘3.00000000’:  
  57.             y = 3  
  58.         elif row[‘Label’] == ‘4.00000000’:  
  59.             y = 4  
  60.         elif row[‘Label’] == ‘5.00000000’:  
  61.             y = 5  
  62.         elif row[‘Label’] == ‘6.00000000’:  
  63.             y = 6  
  64.         else:  
  65.             y = 7          
  66.         del row[‘Label’]  
  67.         firstTrainLable.append(y)  
  68.         # 处理特征  
  69.         for key in row:  
  70.             value = string.atof(row[key])  
  71.             #index = int(value + key[1:], 16) % D  
  72.             data.append(value)  
  73.           
  74.         firstTrainData.append(data)  
  75.         continue  
  76.     elif int(Id) == NO:#开始训练  
  77.         p0 = mat(firstTrainData)  
  78.         T0 = zeros((NO, 7))  
  79.         #处理样本标签  
  80.         for i in xrange(0, NO):   
  81.             a = firstTrainLable[i]  
  82.             T0[i][a-1] = 1  
  83.           
  84.         T0 = T0 * 2 - 1  
  85.         Iw = mat(random.rand(nHiddenNeurons, nInputNeurons) * 2 - 1)#随机生成区间-1,1之间的随机矩阵  
  86.         bias = mat(random.rand(1, nHiddenNeurons))  
  87.         H0 = sig(p0, Iw, bias, NO)#样本数*隐含神经元个数  
  88.         M = (H0.T * H0).I  
  89.         beta = M * H0.T * T0  
  90.     else:#训练剩余的样本,每次训练一条样本  
  91.         # 处理label  
  92.         if row[‘Label’] == ‘1.00000000’:  
  93.             y = 1  
  94.         elif row[‘Label’] == ‘2.00000000’:  
  95.             y = 2  
  96.         elif row[‘Label’] == ‘3.00000000’:  
  97.             y = 3  
  98.         elif row[‘Label’] == ‘4.00000000’:  
  99.             y = 4  
  100.         elif row[‘Label’] == ‘5.00000000’:  
  101.             y = 5  
  102.         elif row[‘Label’] == ‘6.00000000’:  
  103.             y = 6  
  104.         else:  
  105.             y = 7          
  106.         del row[‘Label’]  
  107.         Tn = zeros((17))  
  108.         #处理样本标签  
  109.         b = y  
  110.         Tn[0][b-1] = 1  
  111.         Tn = Tn * 2 - 1  
  112.         # 处理特征  
  113.         data = []  
  114.         for key in row:  
  115.             value = string.atof(row[key])  
  116.             data.append(value)  
  117.         pn = mat(data)  
  118.         H = sig(pn, Iw, bias, 1)  
  119.         M = M - M * H.T * (eye(1,1) + H * M * H.T).I * H * M  
  120.         beta = beta + M * H.T * (Tn - H * beta)  
  121.   
  122. # 计算训练误差  
  123. correct = 0  
  124. sum = 0  
  125. for t, row in enumerate(DictReader(open(trainData))):  
  126.     del row[‘Id’]  
  127.     del row[‘I0’]  
  128.       
  129.     # 处理是否被点击  
  130.     if row[‘Label’] == ‘1.00000000’:  
  131.         y = 1  
  132.     elif row[‘Label’] == ‘2.00000000’:  
  133.         y = 2  
  134.     elif row[‘Label’] == ‘3.00000000’:  
  135.         y = 3  
  136.     elif row[‘Label’] == ‘4.00000000’:  
  137.         y = 4  
  138.     elif row[‘Label’] == ‘5.00000000’:  
  139.         y = 5  
  140.     elif row[‘Label’] == ‘6.00000000’:  
  141.         y = 6  
  142.     else:  
  143.         y = 7          
  144.     del row[‘Label’]  
  145.       
  146.     # 处理特征  
  147.     data = []  
  148.     for key in row:  
  149.         value = string.atof(row[key])  
  150.         data.append(value)  
  151.       
  152.     p = mat(data)  
  153.     HTrain = sig(p, Iw, bias, 1)  
  154.     Y = HTrain * beta  
  155.       
  156.     # 判断  
  157.     if argmax(Y) + 1 == y:  
  158.         correct += 1  
  159.     sum += 1  
  160. print(“训练准确性为:%f” % (correct/sum))  
  161.   
  162. # 计算测试误差  
  163. correctTest = 0  
  164. sumTest = 0  
  165. for t, row in enumerate(DictReader(open(testData))):  
  166.     del row[‘Id’]  
  167.     del row[‘I0’]  
  168.       
  169.     # 处理是否被点击  
  170.     if row[‘Label’] == ‘1.00000000’:  
  171.         y = 1  
  172.     elif row[‘Label’] == ‘2.00000000’:  
  173.         y = 2  
  174.     elif row[‘Label’] == ‘3.00000000’:  
  175.         y = 3  
  176.     elif row[‘Label’] == ‘4.00000000’:  
  177.         y = 4  
  178.     elif row[‘Label’] == ‘5.00000000’:  
  179.         y = 5  
  180.     elif row[‘Label’] == ‘6.00000000’:  
  181.         y = 6  
  182.     else:  
  183.         y = 7          
  184.     del row[‘Label’]  
  185.       
  186.     # 处理特征  
  187.     data = []  
  188.     for key in row:  
  189.         value = string.atof(row[key])  
  190.         data.append(value)  
  191.       
  192.     p = mat(data)  
  193.     HTrain = sig(p, Iw, bias, 1)  
  194.     Y = HTrain * beta  
  195.       
  196.     # 判断  
  197.     if argmax(Y) + 1 == y:  
  198.         correctTest += 1  
  199.     sumTest += 1  
  200. print(“测试准确性为:%f” % (correctTest/sumTest))  
# 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:\Users\dell\Desktop\OS-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) &lt; 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


        </div>
            </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值