美文网首页
论文代码

论文代码

作者: Dorrrris | 来源:发表于2019-03-25 17:01 被阅读0次
values[:,4] = encoder.fit_transform(values[:,4])

是指 按照 values当中的第五列进行编码吗? 第五列是PM2.5,而且PM2.5指数相等的话 编码值也相等。

刚刚随便写了一个test.csv验证了一下好像是这样的。

那个

values.astype('float32')

遇到含有字符的话是不可以转化的!!那个原始csv里面有一列写的NW就没办法识别,但是NA可以。

遇到的第一个函数

# Normalized
scaler = MinMaxScaler(feature_range = (0, 1))
scaled = scaler.fit_transform(values)

第二个函数

# Sliding window
reframed = series_to_supervised(scaled, 18, 1)
index_col = 18 * 8 
def series_to_supervised(data, n_in = 1, n_out = 1, dropnan = True):
    #n_vars就是属性个数吧(列数) shape[1]指的是第二维的长度
    n_vars = 1 if type(data) is list else data.shape[1]
    #转化格式罢了 转成dataframe,这样就会多出(表示行数列数编号0 1 2 3 4那种)部分,但这个编号不算在最后计算数据rows and columns当中的
    df = DataFrame(data)
    cols, names = list(), list()
    
    #(t-n, ... t-1) 这里n_in传进来18不知道为什么
    for i in range(n_in, 0, -1):
        #这里shift(i)是把整个df向下移动i行,前面空出来的部分是nan,然后存进cols这个list当中
        cols.append(df.shift(i))
        #names和cols规模一样的,对应的是名字罢了,比如说第一行就写的是var0(t-18) var1(t-18)……
        names += [('var%d(t-%d)' % (j + 1, i)) for j in range(n_vars)]
    
    #(t, t+1, ... t+n) 这部分n_out传进来是1啊,有意义吗?只计算量var(t)。
    for i in range(0, n_out):
        cols.append(df.shift(-i))
        if i == 0:
            names += [('var%d(t)' % (j + 1)) for j in range(n_vars)]
        else:
            names += [('var%d(t + %d)' % (j + 1, i)) for j in range(n_vars)]
    
    # concat agg的列数=18*属性个数,行数不变,列的名称 是names里面存的var1(t-10)……var5(t-1) 因为我只test五个属性而已。
    agg = concat(cols, axis = 1)
    agg.columns = names
    
    # dropnan 把含有nan的行都去掉了?去掉十八行
    if dropnan:
        agg.dropna(inplace = True)
    return agg
    #
    

第三个函数

# Remove useless columns
#刚刚算过index_col = 18 * 8 
reframed.drop(reframed.columns[[index_col+1,index_col+2,index_col+3,index_col+4,index_col+5,index_col+6,index_col+7]], axis = 1, inplace = True)
#变成38521 240了?????为什么要删掉这七个呢?

为什么非要转化为DataFrame呢

第四部分

# save results
c_pop2rmse = {}  #{}的话是一个字典吧 那就是Key-Value键值对
step_param = []
step_fitness = []

最后的函数

# let's begin 20个epoch就是20轮
search_best_attention_rate(20)

def search_best_attention_rate(max_step):
    step = 0
    while (step != max_step):
        print 'Epoch:',step 
        #每一轮的工作:
        # initialize  
        if step == 0:
            #新的函数get_first_param,得到value应该 len=72
            value = get_first_param(36,18,6)
            #这个pop=value[0]指的是前面一半 01序列(维度有36)
            pop = value[0]
        
        # select
        selected = select(pop,6,step)
        
        # reconstruct
        pop = pop_reconstruct(selected[0],36)
        
        # deeper search
        step += 1
# Initialization parameter population
#pop_size=36(why?), param_num=18(和时间片一样?),encode_length=6(why?)
#返回一个维度为2的list,前一半(维度为36)是基因,后一半(36)是小数
def get_first_param(pop_size, param_num, encode_length):
    #first_pop出来了一个size=36的list(像基因编码一样的01序列)
    first_pop = get_first_pop(pop_size, param_num, encode_length)
    param = []
    for each in first_pop: 
        #对每一条基因(18*6)进行:
        #param_num=18, length=6
        #每次都得到一个len=18的list(里面是小数),那么最终param就有36个这样的list
        param.append(get_param(each,param_num,encode_length))
    result = []
    result.append(first_pop)
    result.append(param)
    return result
#Initialize random population
#pop_size=36, param_num=18, encode_length=6
#返回了一个维度为36的list
#每个维度代表一条基因??是18*6位的 每一位数都是随机产生的哈?这也过于随机了吧
def get_first_pop(pop_size, param_num, encode_length):
    pop = []
    for i in range(pop_size):
        individual = []
        for i in range(param_num * encode_length):
            #为什么是0-9呢????
            temp = random.randint(0,9)
            if temp > 4:
                individual.append(1)
            else:
                individual.append(0)
        pop.append(individual)
    return pop
# Decoding parameter combination
#对每条基因操作:(基因,18,6)
#返回[0.38, 0.13, 0.59, 0.7, 0.32, 0.76, 0.29, 0.62, 0.94, 0.54, 0.13, 0.01, 1.0, 0.83, 0.73, 0.21, 0.43, 0.17]
#对啊六个单位算一次,最后出来list里面有18个元
def get_param(individual_code,param_num, encode_length):
    param = []
    for i in range(param_num):
  #[i*encode_length:(i+1)*encode_length]就是一个分块吧长度为一个length6       
        param.append(encode(individual_code[i*encode_length:(i+1)*encode_length]))
    return param
# Decoding parameter
#这个individual code就是[0,0,1,1,0,1]这样的 只6位
#return一个小数?代表什么?
def encode(individual_code):
    #temp就变成 ['0', '0', '1', '1', '0', '1']
    temp = [str(each) for each in individual_code] 
    # normalization
    #这里是二进制转十进制了!!变成13,但是/63的理由是???
    result = round(int(''.join(temp),2)/63,2)
    # exception handling
    if result == 0.0:
        result += 0.01
    return result
# select
def select(pop,n_selected,step):
    group_pop = pop2group(pop,n_selected)
    fitness_selected = []
    pop_selected = []
    c1 = 0
    for each_group in group_pop:
        fit_temp = []
        c1 += 1
        c2 = 0
        for each in each_group:
            c2 += 1 
            print '----------------------------------------------------------'
            print 'Step:',step,'-',c1,'-',c2
            c_pop = c_pop2str(each)
            if c_pop2rmse.has_key(c_pop):
                fit_temp.append(c_pop2rmse[c_pop])
                print 'Get RMSE from Hash...'
            else:
                rmse = get_rmse(get_param(each,18,6),reframed)
                fit_temp.append(rmse)
                c_pop2rmse[c_pop] = rmse
        pop_selected.append(each_group[fit_temp.index(min(fit_temp))])
        fitness_selected.append(min(fit_temp))
            
    selected = []
    selected.append(pop_selected)
    selected.append(fitness_selected)
    return selected
# Population grouping
def pop2group(pop,group_num):
#random.sample(population, k) Return a k length list of unique elements chosen from the population sequence. Used for random sampling without replacement.
    #所以group_index是长度36 每个数字都不同的list
    group_index = random.sample(range(0,group_num*6),group_num*6)
    group_pop = []
    for i in range(group_num):
        #temp_index就是把group_index按六个分组 每次记录一组
        temp_index = group_index[i*group_num:(i+1)*group_num]
        temp_pop = []
        for each in temp_index:
            #pop是value[0],就是那个维度为36的,像随机组合一样
            #比方说temp_index[0]=[27, 13, 2, 21, 14, 10]
            #那么temp_pop就是一直append pop[27],pop[13]……
            temp_pop.append(pop[each])
        group_pop.append(temp_pop)
    return group_pop #len(group_pop)=6
#转成字符串罢了
def c_pop2str(c_pop):
    temp = [str(each) for each in c_pop] 
    key = ''.join(temp)
    return key
def get_rmse(param,reframed):

相关文章

  • 论文代码

    是指 按照 values当中的第五列进行编码吗? 第五列是PM2.5,而且PM2.5指数相等的话 编码值也相等。 ...

  • ABSA经典论文阅读

    ABSA经典论文 论文阅读&代码学习。 keras代码:https://github.com/AlexYangLi...

  • 看论文的好工具

    看论文的好工具 找到论文的代码实现 1. Papers With Code:自动把论文连接到实现代码的 GitHu...

  • 跟着Nature Communications学画图:R语言ci

    最近在看论文 论文中的部分代码是公开的,代码的链接是 https://github.com/CornilleAma...

  • 看论文的好工具

    找到论文的代码实现 1. Papers With Code:自动把论文连接到实现代码的 GitHub 资源库和数据...

  • data analysis task3:code statist

    任务主题:论文代码统计,统计所有论文出现代码的相关统计;任务内容:使用正则表达式统计代码连接、页数和图表数据;任务...

  • SAD---Learning Lightweight Lane

    概括 论文地址:https://arxiv.org/pdf/1908.00821.pdf 论文代码:[GitHub...

  • Kaggle入门

    Tensorflow学习 看原版论文和代码

  • 12.15

    1. 选论文(完成) 2. 研究好wgan生成代码。 (完成) 3. 读论文。跑复现代码。 (完成) 4. 回顾项...

  • 导师再也不用担心我的论文复现了!Papers With Code

    Papers with Code 是一个总结了机器学习论文及其代码实现的网站。大多数论文都是有GitHub代码的。...

网友评论

      本文标题:论文代码

      本文链接:https://www.haomeiwen.com/subject/hbmvvqtx.html