首页 > 解决方案 > 如何使用分类和连续变量作为 scikit 逻辑回归算法的输入

问题描述

我正在尝试对一个小数据集执行逻辑回归,其中每个实例都用一个分类(男性,女性)变量和一个连续变量(频率在 [0,1] 之间)和因变量(标签)表示为 0或 1. 因此任务是一个二元分类问题。下面我分享5-6个例子:

import pandas as pd 
df = pd.read_table('dataset.csv',sep=',')
df.head()


Gender  Frequency  Label
0    Male       0.10      0
1  Female       0.23      1
2  Female       0.35      1
3  Female       0.21      0
4    Male       0.15      1

我的问题是:在使用 scikit 的逻辑回归执行逻辑回归时,我应该对连续变量和分类变量进行不同的编码吗?这些变量中的任何一个都需要一些特殊的编码吗?或者是以下正确的方法吗?

from sklearn.cross_validation import train_test_split
X = df[['Gender','Frequency']] # Features
y = df.Label # Target variable
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.25,random_state=0)

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
# fit the model with data
logreg.fit(X_train,y_train)

#
y_pred=logreg.predict(X_test)

当我这样做时,回归函数是否理解 Gender 是一个分类变量而 Frequency 是一个连续变量?

编辑:当然,我需要将字符串转换为浮点值。(例如“男性”-> 0,“女性”-> 1)我要问的是“我需要做其他事情吗?我问这个是因为我在这里看到了类似的东西,但线程还没有结束,因此我无法确定答案的有效性。

标签: pythonmachine-learningscikit-learnlogistic-regression

解决方案


您应该在使用逻辑回归时尝试 onehotencoding。您现在正在做的是标签编码,它与决策树或随机森林等机器学习模型完美配合,但可能会导致逻辑回归问题,因为模型可能认为“女性”即“1”比“0”更重要。

在 sklearn 中查找一种热编码或在 pandas 中查找虚拟变量。这两个函数都会为男性和女性创建一个单独的列。每当该行的性别为男性时,男性列中的值将变为1并且女性列中的值将变为0相同的反向。

Male  Female  Frequency  Label
0    1   0    0.10      0
1    0   1    0.23      1
2    0   1    0.35      1
3    0   1    0.21      0
4    1   0    0.15      1

推荐阅读