我在以下这行代码中遇到了”invalid index to scalar variable”错误:
predicted = [[index, x[1]] for index, x in enumerate(rf.predict(test), start = 1)]
我知道有类似的解决方案,但我需要在我的代码中输出一个包含两列的结果,第一列是索引,第二列是预测结果。因此,我使用了enumerate方法来从1到n计数索引,但我不知道如何修复这个错误,因为我对Python和列表推导式等内容还不熟悉。感谢任何帮助。
def main(): dataset = genfromtxt(open('train.csv', 'r'), delimiter = ',', dtype = 'int64')[1:] target = [x[0] for x in dataset] train = [x[1:] for x in dataset] test = genfromtxt(open('test.csv', 'r'), delimiter = ',', dtype = 'int64')[1:] rf = RandomForestClassifier(n_estimators = 1000, n_jobs = CPU) rf.fit(train, target) predicted = [[index, x[1]] for index, x in enumerate(rf.predict(test), start = 1)] savetxt('submission_randomf2.csv', predicted, delimiter=',', fmt='%d,%f', header='ImageId,Label', comments = '') if __name__ == "__main__": main()
回答:
这里rf.predict(test)
是一个一维数组,因为输出维度为1(参见文档)。
尝试以下方法:
predicted = [[index, x] for index, x in enumerate(rf.predict(test), start = 1)]