如何在python scikit-learn-random-fors中使用伪变量表示分类数据

2024-06-06 12:45:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为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)

提前多谢!


Tags: 名称nonefalsetrue森林分类代表蛋白质
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]

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

使用编码为0和1的布尔特性应该可以工作。如果预测精度很差,即使在你的森林中有大量的决策树,可能是因为你的数据太嘈杂,无法获得学习算法,无法获取任何有趣的想法。

你试过用线性模型(如Logistic回归)作为这个数据的基线吗?

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

相关问题 更多 >