问题描述
我被这个错误困扰了很长时间。 我正在尝试使用R中mda包中的MDA函数。 在将模型拟合到数据上之后,在尝试对训练数据本身进行预测时遇到以下错误(对测试数据进行预测时出现相同的错误)
> Error in mindist[l] <- ndist[l]: NAs are not allowed in subscripted assignments
该错误可追溯到该函数的predict方法。
经过大量调试后,我无法理解错误的根本原因。 以下是有关我的数据的一些统计信息:
- 由于我在python中工作并想使用此特定的R函数,因此我正在python中使用rpy2接口调用该函数
- 数据集不是很大,大约有200行和500-600列,我知道特征已经超出了样本数量,但是问题似乎是独立的,因为误差来自于预测函数而不是训练时该模型,其次,我也测试了另一个数据集。行数的功能会产生相同的错误,最重要的是我还是在使用降维。
- 该错误仅出现在特定的配置上:当我在训练前不缩放输入数据时。虽然,当我缩放数据时,错误消失了。
- 错误行-错误是预测方法中的第二行。
mda_clf = r['mda'](formula="Class~.",data=Dataset,method=r['polyreg'] )
training_pred = r['predict'](mda_clf,X_train)
- 我已经检查了很多次,我的数据不包含任何NA,在将数据提供给预测函数以手动查看它之前,我已经打印了数据,并且还使用函数来检查NA。
我很难理解错误的含义,我的数据不包含任何NA值,在缩放数据时,相同的功能也起作用。但是模型在两种情况下都可以训练。
任何帮助将不胜感激。
解决方法
我想更新一下,发现错误,实际上是在脚本的某个点X_train上,该错误显然应该是浮点数矩阵,但被错误地转换为字符串类型。例如,如果X_train的行应为[0.123,0.456,0.542],则会将其转换为['0.123','0.456','0.542'],其中值将转换为字符串类型。 因此,在错误出现的下一行
training_pred = r['predict'](mda_clf,X_train)
我的模型无法识别任何值,因为没有一个是浮点型的,因此会出现错误。