使用scikit-learn中的tree.DecisionTreeClassifier处理维度

我正在尝试使用scikit-learn创建一个决策树,使用三维的训练数据和二维的目标数据。举个简单的例子,想象一下RGB图像。假设我的目标数据是1和0,其中1表示有人脸存在,0表示没有人脸存在。例如:

red         green        blue        face presence  1000        0001         0011        0000    0110        0110         0001        0110    0110        0110         0000        0110     

RGB数据的数组将代表训练数据,而二维数组将代表我的目标类别(有脸,无脸)。

在Python中,这些数组可能看起来像这样:

rgb = np.array([[[1,0,0,0],[0,1,1,0],[0,1,1,0]],               [[0,0,0,1],[0,1,1,0],[0,1,1,0]],               [[0,0,1,1],[0,0,0,1],[0,0,0,0]]])face = np.array([[0,0,0,0],[0,1,1,0],[0,1,1,0]])

遗憾的是,这不起作用

import numpy as npfrom sklearn import treedt_clf = tree.DecisionTreeClassifier()dt_clf = dt_clf.fit(rgb, face)

这会抛出以下错误:

发现维度为3的数组。期望<= 2

我尝试了多种方式重塑和扁平化数据,但得到了另一个错误:

标签数量=xxx 与样本数量不匹配

有谁知道我如何使用tree.DecisionTreeClassifier来实现这个目标?谢谢。


回答:

我想我已经解决了这个问题。方法不是很优雅。也许有人可以提供一些帮助来清理代码。基本上,我需要将RGB数据组织成一个包含12个3元素数组的数组,或者形状为(12,3)。例如…

np.hsplit(np.dstack(rgb).flatten(), len(face.flatten()))

我还扁平化了脸部数据,所以我的最终拟合调用变为…

dt_clf = dt_clf.fit(np.hsplit(np.dstack(rgb).flatten(), len(face.flatten())),                     face.flatten())

现在我可以测试一个新的数据集,看看它是否有效。目标图像在红色和绿色像素都显示时表示有脸存在,所以一个好的测试可能是…

red         green        blue 1100        1100         0011  1100        1100         0001  0000        0000         0000

或者…

predict = np.array([[[1,1,0,0],[1,1,0,0],[0,0,0,0]],                    [[1,1,0,0],[1,1,0,0],[0,0,0,0]],                    [[0,0,1,1],[0,0,0,1],[0,0,0,0]]])

所以…

predicted = dt_clf.predict(np.hsplit(np.dstack(predict).flatten(),                           len(face.flatten())))

然后将其恢复到正确的维度…

predicted = np.array(np.hsplit(predicted, face.shape[0]))

这将得到

array([[1, 1, 0, 0],       [1, 1, 0, 0],       [0, 0, 0, 0]])

太棒了!现在看看这是否能在更大的数据集上工作。请随时提供建议,使代码更简洁。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注