在Python中将单个列拆分为多个子列/数组

时间:2018-02-23 21:41:38

标签: python decision-tree cross-validation supervised-learning train-test-split

我试图在Python中实现决策树算法来预测丢失的输入数据。

假设我有一个包含99个条目的列。在这99个条目中,有20个是NaN。我想将这个单个数组分解为x个大小为y的数字(在这种情况下,y = 5)子数组。

将具有完整单元格的子阵列分配给要素,将包含 NaN 的子阵列分配给目标

let dateIsInInterval: Bool = dateInterval.contains(middle) // true

代码一直工作到for循环结束。现在我有功能目标,我尝试了下面的代码块

 # breaking target array into subarrays
subarray_size = 5
target = []
features = []

# complete break up and assign to array "chunks"
chunks = [test[x : x + subarray_size] for x in xrange(0, len(test), subarray_size)]

# assigns NaN containg subarray to "target" and filled subarrays to "features"
for i in chunks:
    if (np.where(np.isnan(i)))[0].shape[0]: 
        target.append(i)
    else:
        features.append(i)

产生了这个错误:

from sklearn.cross_validation import train_test_split as tts

X_train, X_test, y_train, y_test = tts(features, target, test_size=0.2)

我认为错误发生在阵列操作期间的某处。我无法修复它。任何建议/见解/建议?

编辑:以下是示例"测试"柱。不知道如何把它放在表格格式。抱歉视觉效果不佳。

    202     if len(uniques) > 1:
    203         raise ValueError("Found input variables with inconsistent numbers of"
--> 204                          " samples: %r" % [int(l) for l in lengths])
    205 
    206 

ValueError: Found input variables with inconsistent numbers of samples: [5, 15]. 

1 个答案:

答案 0 :(得分:1)

好吧,看test以及您创建featurestarget的方式,很明显功能的数量和目标的数量是不同的。我想你可能会对这两个对象的含义感到困惑。

对于给定的记录,您将拥有描述该记录和单个目标的一组功能,表示您知道该记录所在的类。因此,如果您要预测谁将在泰坦尼克号中存活,那么功能可能是这样的:登机类,人的年龄,人的性别和目标是天气与否,他们幸存下来。

对于每个人,您需要他们的功能和目标。然后,您的分类器将对功能和目标进行训练,以了解功能中哪些模式与哪些目标相关联。然后,稍后,当您看到一个新的示例,其中您知道了特征而不是目标时,predict方法将采用所学习的模式并返回其对目标可能的最佳猜测(或者更确切地说,是概率)对于目标的每个可能值。)

目标不是您要填写的数据。例如,您将用于教授算法如何猜测未知值的示例情况。在训练阶段,您必须告诉算法答案应该是什么。

你要做的不是分类问题,而是你试图“估算缺失值”。这需要完全不同于您尝试的方法。

如果您的数据是时间序列(也就是说,每个值都来自某个测量的某个时间点),那么您可以考虑使用移动平均值(ARMA或ARIMA)或“指数平滑”来估算缺失值。

虽然,根据您的目的,您也可以采取周围值的平均值,或几个周围值的中位数。