使用map作为Random Forest分类器输入时遇TypeError问题求助
解决Random Forest分类中map()导致的TypeError问题
你遇到的这个TypeError问题根源很清晰——在Python3环境下,map()函数返回的是迭代器对象,而非直接的数值列表,而sklearn的模型需要接收数值型的列表/数组作为特征输入,直接把迭代器存入X和test_X后,后续处理时会尝试将迭代器转换为float,自然就触发了错误。
问题定位
你代码里的这两处是核心问题点:
X.append(map(float, tokens[0:NUM_PCA])) test_X.append(map(float, tokens[0:NUM_PCA]))
直接将map()的返回值(迭代器)添加到特征列表中,模型无法识别这种类型的数据。
修复方案
只需要把map()的结果转换成列表即可,用list()包裹住map调用:
修改后的完整代码如下:
count = 0 for line in lines: tokens = line.strip().split(",") if count < TRAINING_SIZE: X.append(list(map(float, tokens[0:NUM_PCA]))) # 转换为列表 if CLASSIFICATION_TYPE == 2: y.append(int(tokens[len(tokens)-1])) elif int(tokens[len(tokens)-1]) == 1: y.append(0) else: y.append(1) count += 1 else: test_X.append(list(map(float, tokens[0:NUM_PCA]))) # 转换为列表 if CLASSIFICATION_TYPE == 2: test_y.append(int(tokens[len(tokens)-1])) elif int(tokens[len(tokens)-1]) == 1: test_y.append(0) else: test_y.append(1) clf = RandomForestClassifier(n_estimators=10, max_depth=None, min_samples_split=1, random_state=0) clf.fit(X,y) train_predictions = clf.predict(X) test_predictions = clf.predict(test_X)
可选替代写法
你也可以用列表推导式替代map(),写法更直观,效果完全一致:
# 替换map调用行 X.append([float(x) for x in tokens[0:NUM_PCA]])
修改后,X和test_X就会存储纯数值的列表,sklearn的RandomForestClassifier就能正常处理这些特征数据了。
内容的提问来源于stack exchange,提问作者H.H
相关产品推荐
相关产品推荐

