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

问题描述 投票:1回答:1

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

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

具有完整单元的子阵列被分配给特征,并且包含NaN的子阵列被分配给目标。

 # 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)

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

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]. 

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

编辑:下面是样本“测试”列。不知道如何把它放在表格格式。抱歉视觉效果不佳。

Site2_ThirdIonizationEnergy

39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
19.174
19.174
19.174
19.174
39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
39.722
39.722
33.667
39.722
39.722
39.722
33.667
39.722
39.722
23.32
25.04
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
33.667
23.32
33.667
NaN
27.491
22.99
39.722
23.32
25.04
NaN
27.491
22.99
21.62
21.62
21.62
21.62
39.722
39.722
33.667
python decision-tree cross-validation supervised-learning train-test-split
1个回答
1
投票

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

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

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

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

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

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

但是,根据您的目的,您可能也可以采用周围值的平均值或几个周围值的中值。

© www.soinside.com 2019 - 2024. All rights reserved.