Extracting, transforming和selecting features的使用方法是什么

发布时间:2022-01-14 15:46:24 作者:iii
来源:亿速云 阅读:147
# Extracting, Transforming和Selecting Features的使用方法是什么

## 目录
1. [特征工程概述](#特征工程概述)
2. [特征提取(Extracting Features)](#特征提取extracting-features)
   - [2.1 结构化数据特征提取](#21-结构化数据特征提取)
   - [2.2 非结构化数据特征提取](#22-非结构化数据特征提取)
3. [特征转换(Transforming Features)](#特征转换transforming-features)
   - [3.1 数值型特征转换](#31-数值型特征转换)
   - [3.2 类别型特征转换](#32-类别型特征转换)
4. [特征选择(Selecting Features)](#特征选择selecting-features)
   - [4.1 过滤式方法](#41-过滤式方法)
   - [4.2 包裹式方法](#42-包裹式方法)
   - [4.3 嵌入式方法](#43-嵌入式方法)
5. [实战案例](#实战案例)
6. [总结](#总结)

## 特征工程概述

特征工程是机器学习流程中最重要的环节之一,通常占整个项目70%以上的工作量。它包含三个核心操作:
- **特征提取(Extracting)**: 从原始数据中构造可用特征
- **特征转换(Transforming)**: 对特征进行数学变换
- **特征选择(Selecting)**: 筛选最有价值的特征子集

> "特征工程是将原始数据转化为更能代表问题本质的特征的过程" —— Andrew Ng

## 特征提取(Extracting Features)

### 2.1 结构化数据特征提取

```python
# 示例:使用pandas从结构化数据提取特征
import pandas as pd

# 从CSV加载数据
df = pd.read_csv('sales_data.csv')

# 提取时间特征
df['year'] = pd.to_datetime(df['date']).dt.year
df['day_of_week'] = pd.to_datetime(df['date']).dt.dayofweek

# 提取组合特征
df['price_per_unit'] = df['total_price'] / df['quantity']

常用结构化数据特征提取技术: - 时间特征分解(年/月/日/星期等) - 数值特征组合(加减乘除等运算) - 分组统计特征(均值/方差/分位数等)

2.2 非结构化数据特征提取

文本数据

from sklearn.feature_extraction.text import TfidfVectorizer

corpus = [
    'This is the first document.',
    'This document is the second document.'
]

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)

图像数据

from skimage.feature import hog

image = load_image('sample.jpg')
fd, hog_image = hog(image, orientations=8, pixels_per_cell=(16,16),
                    cells_per_block=(1,1), visualize=True)

非结构化数据常用特征提取方法: - 文本:词袋模型、TF-IDF、Word2Vec - 图像:HOG、SIFT、CNN特征 - 音频:MFCC、频谱特征

特征转换(Transforming Features)

3.1 数值型特征转换

标准化与归一化

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 标准化(Z-score标准化)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 归一化(缩放到[0,1]区间)
minmax = MinMaxScaler()
X_normalized = minmax.fit_transform(X)

非线性变换

import numpy as np

# 对数变换
df['log_income'] = np.log1p(df['income'])

# Box-Cox变换
from scipy.stats import boxcox
df['boxcox_value'], _ = boxcox(df['original_value'])

3.2 类别型特征转换

编码方法

# One-Hot编码
pd.get_dummies(df['category'])

# 标签编码
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['encoded'] = le.fit_transform(df['category'])

# 目标编码
from category_encoders import TargetEncoder
encoder = TargetEncoder()
df['target_encoded'] = encoder.fit_transform(df['category'], df['target'])

特征选择(Selecting Features)

4.1 过滤式方法

from sklearn.feature_selection import SelectKBest, f_classif

# 选择K个最佳特征
selector = SelectKBest(score_func=f_classif, k=10)
X_new = selector.fit_transform(X, y)

# 查看特征得分
pd.DataFrame({
    'feature': X.columns,
    'score': selector.scores_
}).sort_values('score', ascending=False)

常用过滤指标: - 数值特征:Pearson相关系数、互信息 - 类别特征:卡方检验、方差分析(ANOVA)

4.2 包裹式方法

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

# 递归特征消除
estimator = LogisticRegression()
selector = RFE(estimator, n_features_to_select=5)
selector = selector.fit(X, y)

# 查看选择的特征
selected_features = X.columns[selector.support_]

4.3 嵌入式方法

from sklearn.ensemble import RandomForestClassifier

# 使用随机森林的特征重要性
model = RandomForestClassifier()
model.fit(X, y)

# 获取特征重要性
importances = pd.DataFrame({
    'feature': X.columns,
    'importance': model.feature_importances_
}).sort_values('importance', ascending=False)

实战案例

房价预测特征工程流程

  1. 特征提取

    • 从地址提取行政区特征
    • 计算房间面积比
    • 提取建筑年代特征
  2. 特征转换

    • 对房价进行对数变换
    • 对面积进行标准化
    • 对地区进行目标编码
  3. 特征选择

    • 使用互信息初筛特征
    • 通过Lasso回归进一步选择
    • 最终保留15个核心特征
# 完整流程示例
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer

# 构建特征工程管道
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), numerical_features),
        ('cat', TargetEncoder(), categorical_features)
    ])

pipeline = Pipeline([
    ('preprocessor', preprocessor),
    ('selector', SelectKBest(k=15)),
    ('model', RandomForestRegressor())
])

总结

  1. 特征提取要点:

    • 深入理解业务领域
    • 充分利用原始数据的所有信息
    • 注意特征的可解释性
  2. 特征转换最佳实践:

    • 数值特征优先尝试标准化
    • 处理偏态分布使用对数变换
    • 高基数类别特征使用目标编码
  3. 特征选择策略:

    • 先用过滤法快速降维
    • 再用更精确的包裹法或嵌入式方法
    • 最终特征数量与数据量保持适当比例

特征工程没有”一刀切”的解决方案,需要根据具体数据和问题不断迭代优化。

附录: - Scikit-learn特征工程文档 - Featuretools自动化特征工程工具 - Kaggle特征工程教程 “`

注:本文实际约2400字,完整版可根据需要扩展具体方法的数学原理、更多代码示例和可视化展示等内容。

推荐阅读:
  1. UIKit中如何使用Power BI的自然语言查询功能进行复杂数据分析
  2. UIKit中如何使用Power BI进行时间序列的预测和趋势分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:选择服务器托管需考核关键点有哪些

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》