要使用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)
)
如何更改上面的代码以包含连续变量和编码的分类变量?
答案 0 :(得分:0)
您的语言无法正确说明您实际上想要什么?
据我从您的问题中了解到您想要什么?
在机器学习模型中,超过90%的模型仅在数值数据上起作用 如果您的数据集包含分类值,则需要转换为数字格式
有几种技术可以用来分类->数字格式
根据您的密码:
它包含3个分类col->将它们转换为OHE:
关于热编码
我们的第二种方法是将每个类别编码为一个热编码(OHE)向量(或虚拟变量)。 OHE是一种表示方法,它接受每个类别值并将其转换为大小为| i |(类别i中的值数)的二进制向量,其中除类别列之外,所有列均等于零。这是一个小例子:
现在跳转到您的代码
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)
现在您可以部署模型了