python - 在分类中,通过频繁的 one-hot 编码进行特征工程是否无效?
问题描述
简短的上下文
完成特征工程后,我的数据集从 15 列扩展到大约 90 列。超过 90% 的新数据集是一次性编码的(列中的大多数值是整个数据集中的 0 和 1)。在使用statsmodels并运行 Logistic 回归摘要后,我的伪 R-2 仅为 0.07,并且随着我删除统计上不显着的特征而继续降低。
主要问题
是否可以使用 one-hot 编码来过度特征工程?我做了尽可能多的特征工程来提取尽可能多的数据,所以我的低伪 R-2 值混淆了它为什么这么低。
我已经做了 3 个月的机器学习,在测试模型之前,我被教导要在特征工程中提取尽可能多的信息。在这样做之后,我真的被我目前的知识所困扰,为什么我的伪 R-2 可能这么低。
长上下文
我正在使用公共数据集进行个人项目。最终目标是预测哪些客户可能不会出现在他们预定的约会中。我从 11 个解释变量和 1 个响应变量开始 - 结果。最初,我的解释变量是:
- 性别(男/女)
- 预定日期(“日期时间”对象)
- 约会日(“日期时间”对象)
- 年龄
- 邻里(许多不同的)
- 奖学金(0/1 值)
- 高血压(0/1 值)
- 糖尿病(0/1 值)
- 酗酒(0/1 值)
- 让分盘(0/1 值)
- 收到短信(0/1 值)
我希望这个项目成为我作为新数据科学家的模范项目,所以我尽可能多地进行功能设计。示例包括:
- 从日期中提取月份的名称,然后进行一次热编码,因此每个月都在其列中
- 提取一周中的某一天,然后进行一次热编码,因此一周中的每一天都在自己的列中
- 按上午和下午拆分时间,并将该信息存储在热编码列中
- 识别年龄列的异常值并将它们存储在单独的列中,等等
完成特征工程后,我使用statsmodels使用以下代码示例运行模型的逻辑回归摘要:
smf.logit(formula = """ Outcome ~
Age +
Scholarship + ...)
全部完成后,我的伪 R-2 值最多只有 0.07。我进行了研究,发现伪 R-2 值介于 0.2 和 0.4 之间意味着模型很强大。因此,这让我很困惑,为什么在提取了所有可能的信息后我的分数如此之低。
解决方案
推荐阅读
- tensorflow - 如何使用 Keras 冻结某些层的权重?
- c++ - 在 C++ 中自动生成函数签名
- r - 如何在R中获取具有特殊条件的随机行
- httprequest - Springboot中未调用ClientHttpRequestInterceptor
- php - Symfony 4 / 学说插入初始数据库数据
- c - 这部分代码还有优化的空间吗?
- visual-studio-2017 - Nuget 输入不是有效的 Base-64 字符串,因为它包含非 base 64 字符,超过两个填充字符
- amazon-web-services - AWS API Gateway:API 密钥的最佳实践
- amazon-dynamodb - 是否可以使用 DynamoDB 存储后端横向扩展 Hashicorp Vault?
- resharper - 实现缺少的成员 - 当返回类型为任务时添加异步?