TypeError: predict() 需要2个位置参数,但提供了3个

我在StackOverflow上搜索了这个错误,发现了几个帖子,但没有一个解决这种特定情况的。

我有以下数据框:

df

输入变量和输出变量在这个代码中定义:

xcol=["h","o","p","d","ddlt","devdlt","sl","lt"]ycol=["Q","r"]x=df[xcol].valuesy=df[ycol].values

我的目标是根据输入(x)来预测输出值Q和r。我尝试了两种方法,但都失败了。第一种方法,我尝试使用多输出回归器。

我首先将数据分成测试和训练数据:

import numpy as npfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)y_train = y_train.ravel()y_test = y_test.ravel()

然后导入函数:

from sklearn.multioutput import MultiOutputRegressor

然后尝试预测Q和r:

reg= MultiOutputRegressor(estimator=100, n_jobs=None)reg=reg.predict(X_train, y_train)

这给我带来了错误:

TypeError: predict() 需要2个位置参数,但提供了3个

我做错了什么?我该如何修复它?

接下来我尝试了神经网络。在分配了列x和y后,我创建了神经网络:

# 神经网络类定义class neuralNetwork:#Step 1: def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate):    #设置每个输入、隐藏、输出层的节点数    self.inodes = inputnodes    self.hnodes = hiddennodes    self.onodes = outputnodes    #链接权重矩阵,wih和who(隐藏和输出层的权重),     # 我们将创建矩阵来进行乘法以获得     # 输出    # 数组(矩阵)内的权重是w_i_j,其中链接是从节点     # i到下一层的节点j    #w11 w21    #w12 w22 等    self.wih = numpy.random.normal(0.0,pow(self.inodes,-0.5),( self.hnodes,     self.inodes))    self.who = numpy.random.normal(0.0,pow(self.hnodes,-0.5),( self.onodes,     self.hnodes))    # 设置学习率    self.lr = learningrate    # 激活函数是sigmoid函数    self.activation_function = lambda x: scipy.special.expit(x)    pass    #Step 2:def train(self, inputs_list, targets_list):    #将输入列表转换为2d数组(矩阵)    inputs = numpy.array(inputs_list, ndmin=2).T    targets = numpy.array(targets_list, ndmin=2).T    #计算进入隐藏层的信号    hidden_inputs = numpy.dot(self.wih, inputs)    #计算从隐藏层输出的信号    hidden_outputs = self.activation_function(hidden_inputs)    #计算进入最终输出层的信号    final_inputs = numpy.dot(self.who, hidden_outputs)    #计算从最终输出层输出的信号    final_outputs = self.activation_function(final_inputs)    # 输出层错误是(目标-实际)    output_errors = targets -final_outputs    #隐藏层错误是输出错误,通过权重分开,在隐藏节点处重新组合    hidden_errors = numpy.dot(self.who.T, output_errors)    #更新隐藏层和输出层之间的链接权重    self.who += self.lr * numpy.dot((output_errors*final_outputs * (1.0-     final_outputs)),numpy.transpose(hidden_outputs))    # 更新输入层和隐藏层之间的链接权重    self.wih += self.lr*numpy.dot((hidden_errors*hidden_outputs*(1.0-     hidden_outputs)),numpy.transpose(inputs))    pass    #Step 3def query(self, inputs_list):    #将输入列表转换为2d数组(矩阵)    inputs = numpy.array(inputs_list, ndmin=2).T    #计算进入隐藏层的信号    hidden_inputs = numpy.dot(self.wih, inputs)    #计算从隐藏层输出的信号    hidden_outputs = self.activation_function(hidden_inputs)    #计算进入最终输出层的信号    final_inputs = numpy.dot(self.who, hidden_outputs)    #计算从最终输出层输出的信号    final_outputs = self.activation_function(final_inputs)    return final_outputs

然后我创建了一个神经网络的实例:

   #创建神经网络的实例    #输入、隐藏和输出节点的数量   input_nodes = 8   hidden_nodes = 100   output_nodes = 2   #学习率为0.8   learning_rate = 0.8   #创建神经网络的实例   n = neuralNetwork(input_nodes, hidden_nodes, output_nodes, learning_rate)

我有8个输入和2个需要预测的输出。

然后我训练了神经网络:

# 训练神经网络# 遍历训练数据集中的所有记录 for record in df:    #缩放和平移输入    inputs = x    #创建目标输出值     targets = y    n.train(inputs, targets)    pass

然后我想查询预测的输出,现在出错了:

所以我想在数据框中添加两列,包含对Q(Q*)和r(r*)的预测值:

df["Q*","r*"] = n.query(x)

我真的不知道如何正确地做到这一点。上述代码给我带来了错误:

ValueError: 值的长度与索引的长度不匹配

任何帮助都将不胜感激。

Steven


回答:

关于你问题的前半部分(MultiOutputRegressor),你的代码有几个问题…

Related Posts

Flatten and back keras

我正在尝试使用自编码器获取简单向量中的值 这是我的代码…

如何按索引访问PyTorch模型参数

如果我的网络有10层,包括偏置项,如何仅通过索引访问第…

Python中多元逻辑回归显示错误

我试图使用逻辑回归进行预测,并使用Python和skl…

在MACOS上安装NLTK

我在我的2015款Mac Pro上尝试安装NLTK,操…

如何在R中将通过RFE选择的变量插入到机器学习模型中?

我想使用递归特征消除方法来选择最重要的特征,然后将这些…

CountVectorizer 错误:ValueError: setting an array element with a sequence

我有一个包含144条学生反馈的数据集,其中有72条正面…

发表回复

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