我正在尝试从csv加载训练和测试数据,在scikit / sklearn中运行随机森林回归器,然后预测测试文件的输出 .
TrainLoanData.csv文件包含5列;第一列是输出,接下来的4列是功能 . TestLoanData.csv包含4列 - 功能 .
当我运行代码时,我收到错误:
predicted_probs = ["%f" % x[1] for x in predicted_probs]
IndexError: invalid index to scalar variable.
这是什么意思?
这是我的代码:
import numpy, scipy, sklearn, csv_io //csv_io from https://raw.github.com/benhamner/BioResponse/master/Benchmarks/csv_io.py
from sklearn import datasets
from sklearn.ensemble import RandomForestRegressor
def main():
#read in the training file
train = csv_io.read_data("TrainLoanData.csv")
#set the training responses
target = [x[0] for x in train]
#set the training features
train = [x[1:] for x in train]
#read in the test file
realtest = csv_io.read_data("TestLoanData.csv")
# random forest code
rf = RandomForestRegressor(n_estimators=10, min_samples_split=2, n_jobs=-1)
# fit the training data
print('fitting the model')
rf.fit(train, target)
# run model against test data
predicted_probs = rf.predict(realtest)
print predicted_probs
predicted_probs = ["%f" % x[1] for x in predicted_probs]
csv_io.write_delimited_file("random_forest_solution.csv", predicted_probs)
main()
3 回答
RandomForestRegressor
的返回值是一个浮点数组:所以你试图像
(-0.6)[1]
那样索引一个浮点数,这是不可能的 .作为旁注,该模型不返回概率 .
首先,让样本数据重现和调试您的问题总是有帮助的 . 如果它们太大或太秘密,你可以提取它们的有趣部分 .
变量
predicted_probs
的内容似乎没有您期望的那样 . 它似乎是整数的列表(或数组),这也是我所期望的 .在sklearn中,
X.train()
方法总是采用trainingdata及其相应的类(通常是整数或字符串) . 然后,X.predict()
方法仅获取验证数据并返回预测结果,即,对于验证数据中的每个集合一个类(再次是整数或字符串) .如果你想知道训练分类器的准确度有多好,你不能只训练和预测,但你必须进行交叉验证,即重复训练和验证,每次检查有多少预测是正确的 . sklean有一个很好的文档,我相信你会找到相应的部分 . 如果没有,请问我 .
尝试使用numpy的"genfromtxt"而不是"csv_io.read_data"进行数据集加载 - 它会自动将csv中的数据转换为numpy数组 . 阅读Getting Started With Python For Data Science文章对你有用......