机器学习特征构建与特征筛选

前言

上一篇文章讲述了原始特征分析和处理,保障后续拿到的是干净的特征变量,但实际这些特征对于建模不一定是有效的,所以需要在原始特征的基础上,结合业务场景做特征变量的衍生,提升数据的表达能力。此外,因为特征值的维度、分布、量纲等,真正进入模型训练还需要对特征做对应的变换处理。

特征构建

统计特征构建

参照pandas提供的titanic救生数据,筛选里面有特征变量

survived pclass sex age sibsp parch fare embarked class who adult_male alone
存活 票等级 性别 年龄 同行子女/配偶 同行父母 票价 登船港口 社会阶层 乘客类型 是否成年 是否独自

其中,年龄对应的人群获救概率不同,所以可以对年龄做衍生。按照年龄,将其分为child/yong/middle/old4个等级。

def age_bin(x):
    if x<=18:
        return 'child'
    elif x <=30:
        return 'yong'
    elif x<=45:
        return 'mid'
    else:
        return 'old'

#     增加age_bin特征
dt['age_bin'] = dt['age'].map(age_bin)

# 按照家庭维度,可以衍生家庭规模大小特征

dt['family_size'] = dt['sibsp'] +dt['parch'] + 1
print(dt['family_size'].head())

周期值构建

数据有时间维度的,可以结合业务抽取出新特征。比如,用户的电商消费数据,每个时间点是一行记录,可以抽取出仅一周消费频次、近一月消费频次等;

数据分桶

数据分桶通常是对连续性特征的处理方式,常见的分桶有

  • 等频分箱:数据平均分成几份
  • 等距分箱:数据按照最小值和最大值间距等分
  • 自定义分箱:结合业务场景自定义分箱规则
  • 卡方/Best-KS分桶: 这种方法侧重于发现目标分类变量和连续变量之间的关系,适用于分类问题中的特征工程。
  • 最小熵法分桶:最小熵法的目标是找到一种分箱方式,使得每个桶内的数据分布熵之和最小.适用于追求数据纯净度的场景.

对船票数据分析:

看到数据有很强的长尾效应,如果采用等距切分,容易出现分桶数据不均匀,所以采用等频切分。

# 设定分桶数量,拿到分桶值

data_cut, bins = pd.qcut(dt['fare'], 10, retbins=True)

# 查看桶内样本数量

data_cut.value_count()

# 定义函数,做分桶变量替换

def fare_cut(x):
    if x <= 7.854:
        return 0
    elif x<= 10.5:
        return 1
    elif x <= 21.679:
        return 2
    elif x<= 39.688:
        return 3
    else:
        return 4;
dt['fare_bin'] = dt['fare'].map(fare_cut)

特征组合

常用的特征组合有:

  • 离线+离散:构建笛卡尔积
  • 离线+连续:连续特征分桶后基于类别特征group by构建统计特征
  • 连续+连续:加减乘除,多项式特征,二阶差分等。
  • 多项式特征:针对连续值特征,对几个特征构建多项式特征,以达到特征组合与高阶增强的作用。于一些需要非线性关系建模的问题非常有用。

poly = PolynomialFeatures(degree=2)  # 指定二次多项式
X_poly = poly.fit_transform(X)
print("Transformed features:\n", X_poly)

特征自动构建工具Featuretools

一般情况下,不会滥用这个工具。

特征变换

连续特征变换

标准化处理(随机变量)

标准化处理是指将特征数值转换成算数平均为0,方差(以及标准差)为1的分布。

from sklearn.preprocessing import StandardScaler
X = np.array([[1], [2], [3], [4], [5]])
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

归一化处理(尺度缩放)

归一化处理是基于向量模长调整数据幅度大小,但并不会改变原始数据的顺序。归一化处理后可以加快梯度下降寻找最优解的速度,可以提升模型的精度,同时也使得特征之间具有可比性。注意:归一化后会损失掉特征的一些信息,根据代价来评估选择;

L2范数归一化:

### 机器学习中的特征选择方法 在构建有效的机器学习模型过程中,特征选择扮演着至关重要的角色。通过精心挑选最能代表数据本质的特征,可以显著提高模型的表现力并减少过拟合的风险。 #### 基于过滤的方法 这类技术依赖统计测试来衡量输入变量目标变量之间的关系强度。常见的度量标准包括卡方检验、互信息以及皮尔逊相关系数等。这种方法独立于所使用的具体学习算法,因此具有较高的通用性和灵活性[^2]。 #### 包裹法(Wrapper Methods) 包裹法直接利用预测模型来进行评估,通常会迭代地增加或移除某些特征组合,并观察这样做对于最终性能指标的影响。递归特征消除(RFE)及其变体RFECV就是典型的例子;前者允许用户自定义希望保留下来的特征数量,而后者则借助交叉验证机制自动寻找最佳子集大小。 #### 嵌入式方法(Embedded Methods) 嵌入式的策略是在训练期间同步完成特征的选择工作。Lasso回归就是一个很好的案例——它不仅能够估计参数权重,还能自然地实现稀疏化效果,即让不重要维度对应的系数趋向零从而达到降维的目的。此外像XGBoost这样的梯度提升框架也内置了类似的正则项用于控制复杂度[^3]。 为了防止时间序列场景下的“特征穿越”,应当特别注意确保所有参建模的历史记录均不会泄露任何有关未来时刻的信息。这意味着当处理此类特殊结构的数据集时,需谨慎设计实验流程以维护因果顺序完整性[^4]。 ```python from sklearn.feature_selection import RFE, RFECV from sklearn.svm import SVC # 使用RFE进行特征选择的例子 estimator = SVC(kernel="linear") selector = RFE(estimator=estimator, n_features_to_select=5).fit(X_train, y_train) # 获取被选中的特征索引 selected_indices = selector.support_ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值