Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用带有多个输入因子的sklearn决策树进行回归会产生错误_Python_Input_Scikit Learn_Regression - Fatal编程技术网

Python 使用带有多个输入因子的sklearn决策树进行回归会产生错误

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([[

我想用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([[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?我将添加更多详细信息:)