2017-08-07 98 views
0

我有近TB的数据需要处理。我有一个视频链接到的标签列表字段。问题是有很多标签和一个视频信息链接到太多的标签,如何在转换之前将其转换(清理)。 OnehotEncoding和所有其他算法都不适合这个。机器学习每批处理新数据

{"user_id":1, "vid_id":101, "name":"abc", "tags":["night", "horror"], "gender":"Male"} 
{"user_id":2, "vid_id":192, "name":"xyz", "tags":["action", "twins"], "gender":"Male"} 

上述JSON数据具有许多其他PARAMS太。但我想考虑使用这个标签参数。 现在我想预测数据的性别。用算法或想法帮助我。目前使用Python并使用spark来加载大数据。

+0

你能提供一个你期望清理过的'标签'输出看起来像什么样子的例子吗? – vealkind

+0

我的标记重复如'java','JAVA','Java'。我想在培训前清理数据。如果我使用NeuralNetwork,我需要将所有内容都转换为数字。所以这些就是例子。 @vealkind –

回答

0

您可以将所有数据读入稀疏矩阵。下面的代码是基于您提供的简要数据示例构建的,并且将生成一个稀疏字典,其中每条记录是一行,每列是每条术语出现在该记录的标签列表中的次数。字典将在最终矩阵中提供术语到其列索引的映射。此外,在循环数据集的同时对变量进行计数时,单独的列表targets与结果变量一起构建。最后,您应该可以使用mattargets来训练您的分类器。

idx_pointer = [0] 
indices = [] 
mat_data = [] 
vocabulary = {} 
targets = [] 
for d in data: 
    targets.append(d['gender']) 
    for t in d['tags']: 
     index = vocabulary.setdefault(t, len(vocabulary)) 
     indices.append(index) 
     mat_data.append(1) 
    idx_pointer.append(len(indices)) 

mat = scipy.sparse.csr_matrix((mat_data, indices, idx_pointer), dtype=int) 

使用时所提供的致密的输出将是如下面的矩阵的例子的输入。

night horror action twins 
1  1   0   0 
0  0   1   1