Python 使用带有多个输入因子的sklearn决策树进行回归会产生错误
我想用sklearn的决策树回归器进行回归。我的输入数据由多个传感器数据组成,我将时间序列划分为较小的窗口,并计算每个时间窗口和每个传感器的平均值和标准偏差。阵列如下所示(以两个传感器和100个时间窗口为例):Python 使用带有多个输入因子的sklearn决策树进行回归会产生错误,python,input,scikit-learn,regression,Python,Input,Scikit Learn,Regression,我想用sklearn的决策树回归器进行回归。我的输入数据由多个传感器数据组成,我将时间序列划分为较小的窗口,并计算每个时间窗口和每个传感器的平均值和标准偏差。阵列如下所示(以两个传感器和100个时间窗口为例): features\u x=np.array([[x[:,0].mean(),x[:,0].std(),x[:,1].mean(),x[:,1].std()] 对于np.数组中的x(列数组,100)]) 然后我想预测第三个传感器的平均值: features\u y=np.array([[
features\u x=np.array([[x[:,0].mean(),x[:,0].std(),x[:,1].mean(),x[:,1].std()]
对于np.数组中的x(列数组,100)])
然后我想预测第三个传感器的平均值:
features\u y=np.array([[x[:,2].mean()]
对于np.数组中的x(列数组,100)])
然后我使用决策树回归器:
clf=tree.DecisionTreeRegressor()
clf.拟合(特征整形(-1,1),特征整形(-1,1))
但当我使用此代码时,会收到一条错误消息:
ValueError:标签数量与样本数量不匹配
这一定是因为我使用了一个具有4个“值”的数组作为输入,而使用了一个仅具有1个“值”的数组作为输出。但我实际上想用很多传感器的数据作为输入,预测另一个传感器的值作为输出。有没有可能让回归以这种方式工作
编辑:两个要素矩阵都由浮点值组成。特征_x有4列和100行,每列是平均值或标准偏差。每行是一个时间窗口。
功能有1列和100行。我只计算每个时间窗口中一个传感器的平均值。问题在于在输入上使用重塑功能的位置:
clf.fit(features_x.reshape(-1,1),features_y.reshape(-1,1))
数组features\u x
有多个列,经过此整形后,它只有一列包含所有元素,因此它比features\u y
长,因此会出现错误。为了让你更好地了解正在发生的事情,请考虑这个例子:
In [4]: a = np.zeros(8).reshape((4,2))
In [5]: a
Out[5]:
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
In [6]: a.reshape(-1,1)
Out[6]:
array([[0.],
[0.],
[0.],
[0.],
[0.],
[0.],
[0.],
[0.]])
您可以使用任何numpy数组的
.shape
属性来验证输入和标签的格式。问题在于您在输入上使用重塑功能的地方:
clf.fit(features_x.reshape(-1,1),features_y.reshape(-1,1))
数组features\u x
有多个列,经过此整形后,它只有一列包含所有元素,因此它比features\u y
长,因此会出现错误。为了让你更好地了解正在发生的事情,请考虑这个例子:
In [4]: a = np.zeros(8).reshape((4,2))
In [5]: a
Out[5]:
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
In [6]: a.reshape(-1,1)
Out[6]:
array([[0.],
[0.],
[0.],
[0.],
[0.],
[0.],
[0.],
[0.]])
您可以使用任何numpy数组的
.shape
属性来验证输入和标签的格式。您的功能最终是列表的numpy数组,但您只需要一个浮点数组,请尝试使用:
features_y = np.array([x[:,2].mean() for x in np.array_split(train_array, 100)])
另外,请注意重塑方法
features_y = np.array([[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]])
features_y.reshape(-1, 1)
产出:
array([[1],[1],[1], ...])
array([[1],[1],[1],...])
但x的重塑:
features_x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]])
features_x.reshape(-1, 1)
产出:
array([[1],[1],[1], ...])
array([[1],[1],[1],...])
如果您不想重塑功能,则提供的结构是正确的 您的功能最终是一个列表的numpy数组,但您只需要一个浮点数组,请尝试使用:
features_y = np.array([x[:,2].mean() for x in np.array_split(train_array, 100)])
另外,请注意重塑方法
features_y = np.array([[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]])
features_y.reshape(-1, 1)
产出:
array([[1],[1],[1], ...])
array([[1],[1],[1],...])
但x的重塑:
features_x = np.array([[1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1], [1, 1, 1]])
features_x.reshape(-1, 1)
产出:
array([[1],[1],[1], ...])
array([[1],[1],[1],...])
如果您不想重塑功能,则提供的结构是正确的 你所说的
值是什么意思?特征的数量必须保持不变,但样本的数量可以不同,这就是任何拟合的工作原理。您可能可以使用一些转换来确保这种情况。请在代码中添加更多细节,例如数组的形状和它们是什么的描述。@user2653663抱歉,如果不清楚,我指的是矩阵特征_x中使用的两个平均值和两个标准差。所以,我必须把这四个值转换成一个值?这样我就能预测y?我将添加更多细节:)你所说的值是什么意思?特征的数量必须保持不变,但样本的数量可以不同,这就是任何拟合的工作原理。您可能可以使用一些转换来确保这种情况。请在代码中添加更多细节,例如数组的形状和它们是什么的描述。@user2653663抱歉,如果不清楚,我指的是矩阵特征_x中使用的两个平均值和两个标准差。所以,我必须把这四个值转换成一个值?这样我就能预测y?我将添加更多详细信息:)