如何使用字典执行分类,字典中的每个键都是标签,每个值都是数据框?

时间:2019-12-03 18:43:41

标签: python pandas dataframe machine-learning recurrent-neural-network

请原谅我这个问题的答案是否明显或是否已经回答。我尝试寻找力所能及的答案,但无济于事。

这里的问题围绕着一个想法,那就是存在一个python字典,其中包含用作标签和值的键,在这种情况下,键和值是包含时间序列信息的pandas数据帧。该程序的目标是对给定的输入数据框进行分类,该标签必须根据字典应用于该数据框。

我了解,从表面上看,这似乎是根据值进行的简单字典搜索,但真正的问题在于输入数据帧可能包含也可能不包含与字典相同的信息。因此,我计划使用机器学习-特别是RNN(我对其他想法持开放态度,但这是我一遍又一遍的建议),以便执行此分类。但是,由于我严重缺乏对RNN算法的知识,以及在减小用作输入的数据框的维数方面,我陷入了困境。任何信息或建议,将不胜感激。

更多信息:

为了进一步了解正在发生的事情,我在下面提供了一些数据

        *A1    *A2    *B1    *B2

*0     *104    *258    *190    *284

*1     *102    *258    *186    *286

*2     *100    *254    *178    *286

*3      *98    *252    *170    *282

*4      *94    *248    *158    *278

*5      *90    *244    *148    *274

对于上下文,在上表中,行0-5表示属性A1,A2等随时间的变化。在这里,A1和A2可以被视为X和Y值,它们都描述了A的属性。因此,每一行都可以被认为是属性的位置分成X和Y分量。注意:表格的大小已在列和行中进行了缩小,只是为了显示主要概念,我认为除了处理能力之外,这应该不是问题。

此表已作为数据帧加载,该数据帧是字典中的一个值,并带有标签“ 0”。整个字典有n项,现在的目标是训练一个分类器,该分类器可以将另一个数据框作为输入并将其与标签匹配。例如,如果我提供的数据框类似于上面的数据框,但值略有不同,那么我将如何让程序读出“零”,前提是该数据与上面的表最相似。

有关以上“略有不同的值”的含义的更多上下文,我想提供下表。此表旨在像上面的表一样标记为“零”。

        *A1    *A2    *B1    *B2

*0     *107    *258    *192    *294

*1     *104    *259    *188    *296

*2     *103    *254    *180    *296

*3      *0      *0     *172    *292

*4      *97    *248    *160    *288

*5      *92    *244    *150    *284

数据的差异在于,初始值可能会略有不同,并且每个属性的不同时间戳(行0-5)之间的变化可能与原始数据略有不同(即,原始数据帧可能是7,而在输入数据帧中可能是6、7或8)。但是,输入和匹配字典数据帧中数据的总体趋势应大致相同。但是,在某些情况下,数据条目将为零,指示该属性的行中没有实际数据。这就是为什么我考虑使用RNN的原因,但是我了解到,除此之外,还有其他分类方法,并且可以接受任何想法/建议。

谢谢,弗吉尼亚州

如果您需要进一步澄清或该问题没有道理,请告诉我。

编辑1: 添加了有关该问题的更多信息和上下文。

编辑2: 在数据框中添加了有关“略有不同的值”的更多信息

编辑3: 重读我的问题,我意识到我在谈论RNN,而不是KNN

2 个答案:

答案 0 :(得分:0)

我刚刚制作了一个字典,其中的标签具有描述性,而值是一个数据框:

df = pd.DataFrame([['2019-01-01',2,5],['2019-01-02',15,8],['2019-01-03',1,9],['2019-01-04',10,20],['2019-01-05',5,15]],columns = ['date','data1','data2'])
even = df[df['data1']%2==0]
odd= df[df['data1']%2==1]
dict1 = {'even':even,'odd':odd}

答案 1 :(得分:0)

如果列数很少,并且每个数据帧中的列数都不相同,则可以应用:

d= { (tuple(df.columns),df.index[0],df.index[-1]): df }