【大模型学习】第十章 机器学习中的特征工程技术详解

目录

一、引言

二、技术要点

三、技术要点原理

[1. 数据预处理](#1. 数据预处理)

[2. 特征编码](#2. 特征编码)

[3. 特征缩放](#3. 特征缩放)

[4. 特征选择](#4. 特征选择)

[5. 特征组合](#5. 特征组合)

四、技术架构

五、实际运用

案例背景

特征工程步骤

预期结果

六、示例代码和代码结构

代码结构

代码说明

七、结论


一、引言

特征工程是机器学习中至关重要的一环,它主要负责将原始数据进行加工和转化,以提高模型的性能和准确性。高质量的特征集能够帮助模型更好地捕捉数据中的规律和模式,从而提升预测能力。本文档将详细介绍机器学习中的特征工程的相关技术要点、原理、架构、实际运用,并提供相应的示例代码,帮助读者全面理解特征工程在机器学习中的应用。

二、技术要点

特征工程涵盖了多个关键的技术点,每个技术点都针对数据的不同方面进行处理和优化。以下是主要的技术要点:

  1. 数据预处理

    • 处理缺失值
    • 处理异常值
    • 数据清洗和格式化
    • 文本数据预处理
  2. 特征编码

    • 独热编码(One-Hot Encoding)
    • 标签编码(Label Encoding)
    • 哑变量编码(Dummy Encoding)
  3. 特征缩放

    • 标准化(Standardization)
    • 归一化(Normalization)
  4. 特征选择

    • 基于过滤的特征选择
    • 基于包装的特征选择
    • 基于嵌入的特征选择
  5. 特征组合

    • 特征交叉(Feature Crossing)
    • 非线性组合
三、技术要点原理

每种特征工程技术都有其独特的实现原理和数学基础。

1. 数据预处理

数据预处理的目的是将原始数据转换为统一的格式和质量,以确保后续处理和模型训练的准确性。

  • 处理缺失值

    常用的方法包括删除包含缺失值的记录、填充缺失值(如均值填充、中位数填充)或使用模型预测缺失值。

  • 处理异常值

    包括检测和剔除异常值,或通过数据转换(如对数转换)来缓解异常值的影响。

  • 文本数据预处理

    包括去除停用词、分词、词干提取等,以减少数据的噪声。

2. 特征编码

特征编码的目的是将非数值型特征(如类别型特征)转换为数值形式,以便机器学习模型能够处理。

  • 独热编码(One-Hot Encoding)

    为每个类别创建一个新的二进制列(0或1),表示该类别是否存在。例如,类别A、B、C将分别对应三个二进制列。

  • 标签编码(Label Encoding)

    为每个类别分配一个唯一的整数值,通常从0开始递增。例如,类别A分配0,B分配1,C分配2。

3. 特征缩放

特征缩放的目的是将不同量纲的特征统一到相似的范围内,避免某些特征因量纲过大或过小而对模型产生不适当的影响。

  • 标准化(Standardization)

    将特征转化为均值为0,方差为1的标准正态分布形式。公式为:z = (x - μ) / σ,其中μ是均值,σ是标准差。

  • 归一化(Normalization)

    将特征缩放到0到1的范围。公式为:x' = (x - min) / (max - min),其中min和max分别是特征的最小和最大值。

4. 特征选择

特征选择旨在从众多特征中挑选出对目标变量最具影响力的特征,以提高模型的性能和解释性。

  • 基于过滤的特征选择

    通过统计指标(如卡方检验、互信息)计算特征与目标变量的相关性,选择相关性较高的特征。

  • 基于包装的特征选择

    使用模型自身来评估特征的重要性,如递归特征消除(RFE)。

  • 基于嵌入的特征选择

    在模型训练过程中自动选择重要特征,如Lasso回归、决策树中的特征重要性。

5. 特征组合

特征组合是通过组合多个特征创建新的特征,以提高模型的表达能力和预测性能。

  • 特征交叉(Feature Crossing)

    通过将两个或多个特征相乘或相加,生成新的特征。例如,年龄和性别可以组合为年龄性别特征。

  • 非线性组合

    通过引入多项式项或其他非线性变换,丰富特征的表达形式。

四、技术架构

特征工程在机器学习流程中占据关键位置。其技术架构通常包括以下几个步骤:

  1. 数据获取
  2. 数据清洗与预处理
  3. 特征编码
  4. 特征缩放
  5. 特征选择
  6. 特征组合
  7. 特征集构建
  8. 模型训练与评估
  9. 特征工程优化

通过这一流程,能够系统性地对数据进行处理和优化,确保最终的特征集具备良好的预测能力。

五、实际运用

以下以一个房价预测的实例,展示特征工程在实际项目中的应用。

案例背景

我们有一个房屋销售数据集,包含了房屋的面积、卧室数量、所在区域等特征,目标是根据这些特征预测房屋的价格。

特征工程步骤
  1. 数据预处理

    • 处理缺失值:使用均值填充卧室数量的缺失值。
    • 处理异常值:检测并剔除房屋面积过大的异常记录。
  2. 特征编码

    • 将"区域"这一类别型特征进行独热编码,生成多个二进制列。
  3. 特征缩放

    • 对房屋面积和卧室数量进行标准化处理,使其分布均匀。
  4. 特征选择

    • 使用卡方检验,选择与房价相关性较高的特征。
  5. 特征组合

    • 将区域和卧室数量进行交叉组合,生成新的特征。
预期结果

经过特征工程处理后的数据集,能够更好地反映房屋价格的影响因素,从而帮助模型提高预测准确性。

六、示例代码和代码结构

以下提供一个完整的特征工程处理流程的示例代码,基于一个虚构的数据集。

代码结构
# 导入必要的库
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder, StandardScaler, MinMaxScaler
from sklearn.compose import ColumnTransformer
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 加载数据集
data = pd.read_csv('house_prices.csv')

# 数据预处理
# 处理缺失值:使用均值填充
data['bedrooms'] = data['bedrooms'].fillna(data['bedrooms'].mean())

# 处理异常值:检测并剔除异常记录
Q1 = data['area'].quantile(0.25)
Q3 = data['area'].quantile(0.75)
IQR = Q3 - Q1
data = data[(data['area'] >= (Q1 - 1.5 * IQR)) & (data['area'] <= (Q3 + 1.5 * IQR))]

# 特征编码:独热编码
categorical_cols = ['region']
encoder = OneHotEncoder()
encoded_categorical = encoder.fit_transform(data[categorical_cols]).toarray()

# 特征缩放:标准化和归一化
numerical_cols = ['area', 'bedrooms']

# 使用ColumnTransformer进行特征工程
preprocessor = ColumnTransformer(
    transformers=[
        ('numerical', StandardScaler(), numerical_cols),
        ('categorical', OneHotEncoder(), categorical_cols)
    ],
    remainder='passthrough'
)

X = preprocessor.fit_transform(data)

# 特征选择:使用卡方检验选择前5个特征
selector = SelectKBest(score_func=chi2, k=5)
X_selected = selector.fit_transform(X, data['price'])

# 特征组合:创建交叉特征
# 例如,将'area'与'bedrooms'相乘
X_with_interaction = np.hstack((X_selected, np.expand_dims(X_selected[:, 0] * X_selected[:, 1], axis=1)))

# 拆分数据集
X_train, X_val, y_train, y_val = train_test_split(X_with_interaction, data['price'], test_size=0.2, random_state=42)

# 模型训练与评估
model = LinearRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_val)

print(f"模型的R²分数为:{r2_score(y_val, y_pred)}")
代码说明
  • 数据预处理:处理缺失值和异常值,确保数据质量。
  • 特征编码:使用独热编码处理类别型特征。
  • 特征缩放:对数值型特征进行标准化处理。
  • 特征选择:通过卡方检验选择相关性较高的特征。
  • 特征组合:创建交叉特征以丰富模型的表达能力。
  • 模型训练与评估:构建线性回归模型,并评估其性能。

七、结论

特征工程在机器学习中起着不可替代的作用。通过合理的数据预处理、特征编码、缩放、选择和组合,可以有效提升模型的性能和预测能力。掌握这些技术,能够帮助我们在实际项目中更好地处理复杂的数据集,挖掘出更有价值的特征信息。未来,随着机器学习和数据科学的不断发展,特征工程在算法和工具上的创新也值得期待。

相关推荐
三三木木七10 分钟前
BERT、T5、GPTs,Llama
人工智能·深度学习·bert
仟濹13 分钟前
【算法 C/C++】二维差分
c语言·c++·算法
狠活科技14 分钟前
国内免费使用 Claude 3.7 Sonnt,GPT-4o,DeepSeek-R1联网极速响应
ai·chatgpt·oneapi
*星星之火*16 分钟前
【GPT入门】第9课 思维树概念与原理
gpt·算法·深度优先
problc1 小时前
Manus AI 全球首款通用型 Agent,中国制造
大数据·人工智能·制造
xiangzhihong81 小时前
GitHub神秘组织3小时极速复刻Manus
人工智能·深度学习·机器学习
总斯霖1 小时前
题解:士兵排列
数据结构·c++·算法
稳兽龙1 小时前
P4268 [USACO18FEB] Directory Traversal G
c++·算法·换根dp
上官-王野1 小时前
大模型day01自然语言+大模型+环境
python·ai·conda
博云技术社区1 小时前
DeepSeek×博云AIOS:突破算力桎梏,开启AI普惠新纪元
人工智能·博云·deepseek