如何使用随机森林进行具有分类和连续特征的特征选择

时间:2020-01-21 10:17:12

标签: python scikit-learn logistic-regression

要使用Sciki-learn进行逻辑回归,我需要使用随机森林进行特征选择。

我已经使用Scikit-learn进行了多个线性回归,其中包含3个类别变量(Cat V)和2个连续变量(Cont V)如下

    Cat V 1    Cat V 2    Cat V 3    Cont V 1    Cont V 2
    A          C3         X2         208         3000
    B          C6         X4         256         4000
    B          C7         X5         275         2000
    C          C2         X1         508         3200

我正在尝试使用此链接中的方法来获得以下结果,以进行功能选择https://hackersandslackers.com/random-forests-for-feature-selection/

Variable    Importance
Cat V 1     0.843122
Cat V 2     0.083392
Cat V 3     0.037216
Cont V 1    0.025057
Cont V 2    0.011213

与链接中所示的示例不同,我的应用程序中的区别在于我的数据既包含类别变量又包含连续变量。

from toolz.functoolz import pipe
from functools import partial

predVars = [
    "Cat V 1",
    "Cat V 2",
    "Cat V 3"
]


def oneHotEncodeMultipleVars(varList, df):
    partialEncoders = (partial(varToBool, x) for x in varList)

    return pipe(df,
                *partialEncoders)

# Encoding categorical data
    X = (df
     .dropna()
     [predVars]
     .pipe((fh.oneHotEncodeMultipleVars, "df"),
           varList = predVars)
    )

如何更改上面的代码以包含连续变量和编码的分类变量?

1 个答案:

答案 0 :(得分:0)

您的语言无法正确说明您实际上想要什么?
据我从您的问题中了解到您想要什么?

在机器学习模型中,超过90%的模型仅在数值数据上起作用 如果您的数据集包含分类值,则需要转换为数字格式

有几种技术可以用来分类->数字格式

  1. LabelEncoder
  2. 一个热编码器(您也可以使用pd.get_dummies())
  3. Taregt编码器
  4. 普通编码器

根据您的密码:

它包含3个分类col->将它们转换为OHE:

关于热编码

我们的第二种方法是将每个类别编码为一个热编码(OHE)向量(或虚拟变量)。 OHE是一种表示方法,它接受每个类别值并将其转换为大小为| i |(类别i中的值数)的二进制向量,其中除类别列之外,所有列均等于零。这是一个小例子:

enter image description here

现在跳转到您的代码

from sklearn.preprocessing import OneHotEncoder
one=OneHotEncoder()
X=one.fit_transform(X) # it will return scipy.sparse.csr.csr_matrix ->>> numpy array for feeding into model

使用get_dummies代替使用一种热编码器:

  new_data=pd.get_dummies(["Cat V 1"],prefix='Cat V 1',drop_first=True)
  df=pd.concat([df,new_data],axis=1)

 new_data=pd.get_dummies(["Cat V 2"],prefix='Cat V 2',drop_first=True)
  df=pd.concat([df,new_data],axis=1)

 new_data=pd.get_dummies(["Cat V 3"],prefix='Cat V 3',drop_first=True)
  df=pd.concat([df,new_data],axis=1)

现在您可以部署模型了