2

我使用 python 的 scikit-learn 模块来预测 CSV 文件中的一些值。我正在使用随机森林回归器来做到这一点。例如,我有 8 个训练值和 3 个值要预测 - 我必须使用哪些代码?作为要预测的值,我必须一次(A)或单独(B)给出所有目标值?

变体 A:

#Readind CSV file
dataset = genfromtxt(open('Data/for training.csv','r'), delimiter=',', dtype='f8')[1:]
#Target value to predict  
target = [x[8:11] for x in dataset]
#Train values to train 
train = [x[0:8] for x in dataset]
#Starting traing
rf = RandomForestRegressor(n_estimators=300,compute_importances = True) 
rf.fit(train, target)

变体 B:

#Readind CSV file
dataset = genfromtxt(open('Data/for training.csv','r'), delimiter=',', dtype='f8')[1:]
#Target values to predict  
target1 = [x[8] for x in dataset]
target2 = [x[9] for x in dataset]
target3 = [x[10] for x in dataset]
#Train values to train 
train = [x[0:8] for x in dataset]
#Starting traings
rf1 = RandomForestRegressor(n_estimators=300,compute_importances = True) 
rf1.fit(train, target1)
rf2 = RandomForestRegressor(n_estimators=300,compute_importances = True) 
rf2.fit(train, target2)
rf3 = RandomForestRegressor(n_estimators=300,compute_importances = True) 
rf3.fit(train, target3)

哪个版本是正确的?

提前致谢!

4

2 回答 2

4

两者都是可能的,但做不同的事情。

第一个学习不同条目的独立模型y。第二个学习了所有条目的联合模型y。如果可以学习的条目之间存在有意义的关系y,则第二个应该更准确。

由于您正在对很少的数据进行训练并且没有进行规范化,我想您在第二种情况下只是过度拟合。我不完全确定回归案例中的分割标准,但如果标签空间是三维的,则叶子“纯”需要比它只是一维的时间长得多。因此,您将学习更复杂的模型,而您拥有的少量数据并不能保证这些模型。

于 2013-01-25T17:59:35.143 回答
2

在通常的机器学习用语中,“8 个训练值和 3 个值”可能最好表示为“8 个特征和 3 个目标变量”。

两种变体都应该工作并且产生类似的预测RandomForestRegressor支持多输出回归所做的那样。

RandomForestRegressor不过,预测与非确定性算法并不完全相同。但平均而言,两种方法的预测质量应该是相同的。

编辑:请参阅 Andreas 的答案。

于 2013-01-24T18:27:19.933 回答