2016-05-12 81 views
0

我有两个输入数据文件以橙色使用,一个对应于列车集(目标为“A”,“B”和“C”),另一个与未知样本(目标“D”和“E”能够识别两个第一主成分的散点图中的未知样本)。Orange3连接不同目标的表

我已将PCA应用于火车数据集,并通过python脚本将PCA转换重新应用于测试数据集,但结果有一个?在未知样本集中所有条目的目标值中。

我试图合并火车和未知样本集与合并表小部件,显然它也是一样的,火车中的所有样本都是正确的,但未知的样本有?作为目标。

我设法让这个正常运行的唯一方法是在同一个输入文件上有未知的样本和训练集。出于显而易见的原因,这不切合实际

有什么办法解决这个问题吗?

请注意,我试图直接在变换的未知样本上更改domain.class_var和目标值,但它也改变了训练数据集的域。很明显,当创建新表时,它只是在PCA之后引用原始列车数据的域。

回答

0

我已经通过将数据转换为numpy数组连接它们然后返回到表来管理它。

这里是代码,如果有人有兴趣:

import numpy 
from Orange.data.table import Table 
from Orange.data import Domain, DiscreteVariable, ContinuousVariable 

trnsfrmd_knwn_data = numpy.array(in_object) 
trnsfrmd_unkwn_data = numpy.array(Table(in_object.domain,in_data)) 

ndx = list(set(trnsfrmd_knwn_data[:,len(trnsfrmd_knwn_data[0])-1].tolist()))[-1] + 1 
trnsfrmd_unkwn_data[:,len(trnsfrmd_knwn_data[0])-1] = numpy.array([i for i in range(0, len(trnsfrmd_unkwn_data))]) + ndx 

targets = in_object.domain.class_var.values + in_data.domain.class_var.values 
dm = Domain([ContinuousVariable(x.name) for x in in_object.domain.attributes], DiscreteVariable('region', values=targets)) 

out_data = Table.from_numpy(dm, numpy.append(trnsfrmd_knwn_data,trnsfrmd_unkwn_data,axis=0))