如何缩放文本格式的特征“年龄”?
Posted
技术标签:
【中文标题】如何缩放文本格式的特征“年龄”?【英文标题】:How to scale feature "Age" which is in text format? 【发布时间】:2019-12-09 06:48:04 【问题描述】:我需要从以下格式的数据集中缩放“年龄”属性。如何在 R 中对基于文本的变量进行缩放?
age_upon_outcome
2 weeks
1 month
3 months
1 year
3 weeks
2 months
8 months
【问题讨论】:
你能再清楚一点,时代的格式是什么吗?在进行任何缩放之前,您必须将文本字段转换为数字字段。 @A.K.年龄的格式为 2 周、1 个月、3 个月、1 年 【参考方案1】:处理文本数据的一般规范是将它们转换为数字格式,即完整的数字。
在您的情况下,由于变量按周、月或年的顺序排列,因此一种方法是按周或按天计算。
如果你按天计算,你通常会有(考虑一周有 7 天,一个月有 30 天):
14, 30, 90, ....
如果按周计算,您通常会有(考虑一个月有 4 周,一年有 52 周):
2, 4, 12, ...
现在你已经有了数字,应该很容易缩放它们,例如流行的 MinMaxScaling:
MinMaxScaleFeature <- function(x)
return((x - min(x)) /(max(x) - min(x)))
这就是典型函数的样子。
您还可以使用其他扩展机制,例如 Standard 或 Robust,您可以在此处查看它们:https://medium.com/@ian.dzindo01/feature-scaling-in-python-a59cc72147c1
【讨论】:
【参考方案2】:require(dplyr)
require(tidyr)
age_upon_outcome <-
'2 weeks
1 month
3 months
1 year
3 weeks
2 months
8 months'
age_upon_outcome <- strsplit(age_upon_outcome, '\n') %>% unlist
my_df <- as.data.frame(age_upon_outcome, stringsAsFactors = FALSE) %>% as_tibble()
my_df %>% separate(age_upon_outcome, into = c('age', 'unit'), sep = ' ') %>%
mutate(unit_in_days = case_when(unit == 'weeks' ~ 7,
unit == 'month' ~ 30,
unit == 'months' ~ 30,
unit == 'year' ~ 365)) %>%
mutate(age = as.numeric(age)*unit_in_days) %>%
mutate(scaled_age = (age - mean(age)) /sd(age))
输出
age unit unit_in_days scaled_age
<dbl> <chr> <dbl> <dbl>
1 14 weeks 7 -0.769
2 30 month 30 -0.650
3 90 months 30 -0.202
4 365 year 365 1.85
5 21 weeks 7 -0.717
6 60 months 30 -0.426
7 240 months 30 0.916
【讨论】:
以上是关于如何缩放文本格式的特征“年龄”?的主要内容,如果未能解决你的问题,请参考以下文章
机器学习特征工程之特征缩放+无量纲化:最小最大缩放(MinMaxScaler)