我试图在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].
答案 0 :(得分:1)
好吧,看test
以及您创建features
和target
的方式,很明显功能的数量和目标的数量是不同的。我想你可能会对这两个对象的含义感到困惑。
对于给定的记录,您将拥有描述该记录和单个目标的一组功能,表示您知道该记录所在的类。因此,如果您要预测谁将在泰坦尼克号中存活,那么功能可能是这样的:登机类,人的年龄,人的性别和目标是天气与否,他们幸存下来。
对于每个人,您需要他们的功能和目标。然后,您的分类器将对功能和目标进行训练,以了解功能中哪些模式与哪些目标相关联。然后,稍后,当您看到一个新的示例,其中您知道了特征而不是目标时,predict
方法将采用所学习的模式并返回其对目标可能的最佳猜测(或者更确切地说,是概率)对于目标的每个可能值。)
目标不是您要填写的数据。例如,您将用于教授算法如何猜测未知值的示例情况。在训练阶段,您必须告诉算法答案应该是什么。
你要做的不是分类问题,而是你试图“估算缺失值”。这需要完全不同于您尝试的方法。
如果您的数据是时间序列(也就是说,每个值都来自某个测量的某个时间点),那么您可以考虑使用移动平均值(ARMA或ARIMA)或“指数平滑”来估算缺失值。
虽然,根据您的目的,您也可以采取周围值的平均值,或几个周围值的中位数。