您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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']
常用结构化数据特征提取技术: - 时间特征分解(年/月/日/星期等) - 数值特征组合(加减乘除等运算) - 分组统计特征(均值/方差/分位数等)
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、频谱特征
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'])
# 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'])
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)
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_]
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)
特征提取:
特征转换:
特征选择:
# 完整流程示例
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())
])
特征提取要点:
特征转换最佳实践:
特征选择策略:
特征工程没有”一刀切”的解决方案,需要根据具体数据和问题不断迭代优化。
附录: - Scikit-learn特征工程文档 - Featuretools自动化特征工程工具 - Kaggle特征工程教程 “`
注:本文实际约2400字,完整版可根据需要扩展具体方法的数学原理、更多代码示例和可视化展示等内容。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。