网络训练需要的混合类型数据的组织方式

在准备神经网络模型需要的训练数据时,经常需要构造顺手的数据形式,如下

特征1特征2特征3特征n标签
37.58437.63238.04538.902‘a’
33.21639.19342.88744.917‘b’
31.74732.35933.12733.687‘c’
34.26835.16936.63238.900‘d’

用什么样的数据类型来组织以上数据呢?有四种选择

  • python 的二维列表 list

  • python 的字典结构 dict

  • numpy 的二维数组 array

  • pandas 的 DataFrame 结构

python 的 list 结构

很显然,这种数据组织成二维列表是不合适的,无法切片,本质上是列表中嵌套列表的结构。接下来详细介绍用 numpy 的 array 和 pandas 的DataFrame 结构。

python 的字典结构 dict

存成字典结构方便存取,如果特征列数据都是浮点数据,也需要借助 numpy 的 array 来实现。

numpy 的 array 结构

如果组织成二维数组 array 结构,由于特征列和标签列中的数据类型可能会出现字符型数据,那数组类型将必须设置成混合类型。即初始化特征数据时选择 dtype = object,然后将特征列表,使用列堆叠(column_stack)追加到最后一列即可。

data_array = np.array(data,dtype=object)
data_label_array = np.column_stack((data_array,label))

最终效果如下

data_label_array: [[37.584 37.632 38.045 38.902 ‘a’]
[33.216 39.193 42.887 44.917 ‘b’]
[31.747 32.359 33.127 33.687 ‘c’]
[34.268 35.169 36.632 38.9 ‘d’]]

如果初始化数据时选择 dtype = float 或 np.float64 时会怎样呢?

data_label_array: [[‘37.584’ ‘37.632’ ‘38.045’ ‘38.902’ ‘a’]
[‘33.216’ ‘39.193’ ‘42.887’ ‘44.917’ ‘b’]
[‘31.747’ ‘32.359’ ‘33.127’ ‘33.687’ ‘c’]
[‘34.268’ ‘35.169’ ‘36.632’ ‘38.9’ ‘d’]]

那么在追加标签列时,会将浮点类型的特征数据转化为字符型数据。这样的效果显然不是我们想要的。

pandas 的 DataFrame 结构

有两种方式,一种是将特征列数据放入某一个字段里,比如data,同时标签列放入label字段里。另一种方式,特征列有多少列就存多少个字段,label同样单独一个字段。如

df: [[37.584 37.632 38.045 38.902 ‘a’]
[33.216 39.193 42.887 44.917 ‘b’]
[31.747 32.359 33.127 33.687 ‘c’]
[34.268 35.169 36.632 38.9 ‘d’]]

这样,浮点类型的特征数据也是没办法设置成np.float64类型的,只能是python原生的float类型。

全部代码如下

import os
import pandas as pd
import numpy as np

def test():
    a_data = [37.584,37.632,38.045,38.902]
    b_data = [33.216,39.193,42.887,44.917]
    c_data = [31.747,32.359,33.127,33.687]
    d_data = [34.268,35.169,36.632,38.900]
    a_label = 'a'
    b_label = 'b'
    c_label = 'c'
    d_label = 'd'
    
    data =  [a_data,b_data,c_data,d_data]
    label = [a_label,b_label,c_label,d_label]
    print("####list####")
    print('data:',data)
    print('label:',label)
    print("####array####")
    data_array = np.array(data,dtype=float)
    data_label_array = np.column_stack((data_array,label))
    print('data_array:',data_array)
    print('data_label_array:',data_label_array)
    print("####DataFrame####")
    df = pd.DataFrame(data_array)
    df['label'] = label
    print('df:',df.values)


if __name__ == '__main__':
    test()
总结
  • 二维混合类型的数据组织,可以设置为 dict,numpy 的 array,pandas 的 DataFrame,但是不要组织为二维列表。
  • numpy 的 cloumn_stack,用来在特征数据的基础上增加标签列。
参考文档

Python中numpy数组的拼接、合并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值