4

我正在为 scikit-learn 的随机森林分类器生成特征向量。特征向量代表9个蛋白质氨基酸残基的名称。有 20 个可能的残基名称。因此,我使用 20 个虚拟变量来表示一个残基名称,对于 9 个残基,我有 180 个虚拟变量。

例如,如果滑动窗口中的 9 个残基是: ARNDCQEGH(每个字母代表一个蛋白质残基的名称),我的特征向量将是:

"True\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\t
False\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tTrue\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\tFalse\n" 

另外,我尝试使用 (1,0) 替换 (True,False)

在训练和测试 Scikit 的随机森林分类器模型后,我发现它完全不起作用。但是 Scikit 的随机森林可以与我的其他数值数据一起使用。

Scikit 的随机森林可以处理分类变量或虚拟变量吗?如果是这样,你能提供一个例子来说明它是如何工作的。

这是我设置随机森林的方法:

clf=RandomForestClassifier (n_estimators=800, criterion='gini', n_jobs=12, max_depth=None, compute_importances=True, max_features='auto', min_samples_split=1,  random_state=None)

提前非常感谢!

4

2 回答 2

3

使用编码为 0 和 1 的布尔特征应该可以工作。如果即使您的森林中有大量决策树,预测准确性也很差,则可能是您的数据太嘈杂,以至于学习算法无法提取任何有趣的想法。

您是否尝试过拟合线性模型(例如逻辑回归)作为此数据的基线?

编辑:在实践中,对分类变量使用整数编码往往适用于许多随机决策树模型(例如 scikit-learn 中的 RandomForest 和 ExtraTrees)。

于 2013-04-05T12:11:39.797 回答
2

Scikits 随机森林分类器可以使用虚拟变量,但也可以直接使用分类变量,这是首选方法。只需将您的字符串映射为整数。假设您的特征向量是 ['a' ,'b', 'b', 'c']

vals = ['a','b','b','c']
#create a map from your variable names to unique integers:
intmap = dict([(val, i) for i, val in enumerate(set(vals))]) 
#make the new array hold corresponding integers instead of strings:
new_vals = [intmap[val] for val in vals]

new_vals 现在保存值 [0, 2, 2, 1],您可以直接将其提供给 RF,无需进行虚拟化

于 2013-04-05T07:48:31.983 回答