使用Sci Kit学习随机森林的多标签学习

时间:2015-03-30 16:50:20

标签: python pandas scikit-learn

我已经通过指定单个标签列来学习每个标签的代码,现在我试图同时指定所有标签... 数据位于Pandas dataFrame中。当我在每个标签上进行训练时,我会在每个标签上获得优于73%的标签。我确实想独立训练每个标签。那么这可能是完全错误的做法?

这个版本似乎只是在列表中的一个标签上进行培训,或者它可能正在训练所有这些并且我不知道如何正确反省?

from sklearn.cross_validation import cross_val_score
#split the dataset for train and test
combnum['is_train'] = np.random.uniform(0, 1, len(combnum)) <= .75
train, test = combnum[combnum['is_train']==True], combnum[combnum['is_train']==False]

et = RandomForestClassifier(n_estimators=114, max_depth=None, min_samples_split=10, random_state=0  )

labels = train[list(label_columns)].values 
#I get good results with 
#labels = train["service_a"].values

features = train[list(columns)].values

et_score = cross_val_score(et, features, labels, n_jobs=-1).mean()

print("{0} -> ET: {1})".format(columns[1:2], et_score))

输出:[&#39; n_0003&#39;] - &gt; ET:0.282943628784)
label_columns只是列标题的列表,例如:

['service_a',
 'service_b',
 'service_c',
 'service_d',
 'service_e',
 'service_f',
 'service_g',
 'service_h',
 'service_i',
 'service_j',
 'service_k',
 'service_l',
 'service_m',
 'service_n']

的推导方式与功能列表相同(有效...) 我想要通过标签获得交叉验证分数,这可以吗?

当我将最后两行更改为:

et_score = cross_val_score(et, features, labels, n_jobs=-1)
print("{0} -> ET: {1})".format(label_columns, et_score))

我得到:: [&#39; service_a&#39;,&#39; service_b&#39;,&#39; service_c&#39;,&#39; service_d&#39;,&#39; service_e&# 39;,&#39; service_f&#39;,&#39; service_g&#39;,&#39; service_h&#39;,&#39; service_i&#39;,&#39; service_j&#39;,&# 39; service_k&#39;,&#39; service_l&#39;,&#39; service_m&#39;,&#39; service_n&#39;] - &gt; ET:[0.28435115 0.28633761 0.28033815])

0 个答案:

没有答案