python - 如何使用分类和连续变量作为 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)我要问的是“我需要做其他事情吗?我问这个是因为我在这里看到了类似的东西,但线程还没有结束,因此我无法确定答案的有效性。
解决方案
您应该在使用逻辑回归时尝试 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
推荐阅读
- r - 在 lapply() 中将列和数据框参数传递给我的函数?
- python - 无法从末尾匹配字符串
- flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?
- oracle - 如何在主 RANGE 分区中自动创建 LIST 子分区
- c# - 如何在asp.net mvc 5中使用局部视图进行分页
- c# - 从 IEnumerable 获取所有组中所有分组项的计数
> 分组依据 - javascript - Jquery日期选择器设置日期问题
- corda - Corda 中的数据安全性
- asp.net-mvc - 在 ASP.NET MVC iis 中获取客户端的 IP 地址
- spring-boot - oauth2 登录:显示未授权 - 无法生成 access_token