机器学习课程项目:特征工程与特征选择技术详解
mlcourse.ai Open Machine Learning Course 项目地址: https://gitcode.com/gh_mirrors/ml/mlcourse.ai
引言
在机器学习项目中,数据质量往往比算法选择更为关键。本文基于mlcourse.ai项目中的特征工程内容,深入探讨如何通过特征提取、转换和选择来提升模型性能。我们将通过实际案例展示特征处理的全流程,帮助读者掌握构建高质量特征的核心技术。
特征提取技术
文本特征提取
文本数据在自然语言处理任务中无处不在。处理文本的第一步是分词(Tokenization),将原始文本分解为有意义的单元(tokens)。简单的空格分词可能丢失语义,如"Santa Barbara"应视为一个整体。
词袋模型(Bag of Words)是最基础的文本向量化方法。其核心思想是:
- 构建词汇表
- 统计每个词在文本中的出现频率
- 生成与词汇表等长的向量
from sklearn.feature_extraction.text import CountVectorizer
texts = ["i have a cat", "you have a dog", "you and i have a cat and a dog"]
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
print(vectorizer.get_feature_names_out())
进阶技巧包括:
- N-gram特征:保留词序信息(如bi-gram)
- TF-IDF加权:降低常见词权重,突出关键词语
- 字符级N-gram:处理拼写错误和词形变化
图像特征提取
现代计算机视觉主要依赖预训练的卷积神经网络(CNN)提取特征:
from keras.applications.resnet50 import ResNet50, preprocess_input
from keras.preprocessing import image
# 加载预训练模型(不含顶层分类器)
model = ResNet50(weights='imagenet', include_top=False)
# 预处理图像并提取特征
img = image.load_img('raccoon.jpg', target_size=(224, 224))
x = image.img_to_array(img)
x = preprocess_input(x)
features = model.predict(x)
传统图像特征包括:
- 颜色直方图
- 纹理特征(LBP、HOG)
- 关键点检测(SIFT、SURF)
地理空间数据处理
处理经纬度坐标的典型方法:
import reverse_geocoder as rg
coordinates = [(40.7128, -74.0060), (34.0522, -118.2437)]
results = rg.search(coordinates) # 反向地理编码
地理特征工程技巧:
- 计算两点间球面距离
- 聚合区域统计特征
- 结合开放地图数据获取POI信息
特征转换技术
标准化与分布调整
不同尺度的特征需要标准化:
from sklearn.preprocessing import StandardScaler, PowerTransformer
# Z-score标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 处理偏态分布
transformer = PowerTransformer(method='yeo-johnson')
X_trans = transformer.fit_transform(X)
特征交互
创建特征间的交互项可捕捉复杂关系:
df['price_per_room'] = df['price'] / (df['bedrooms'] + 1)
特征选择方法
统计方法
from sklearn.feature_selection import SelectKBest, f_classif
selector = SelectKBest(f_classif, k=20)
X_new = selector.fit_transform(X, y)
基于模型的选择
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
model = RandomForestClassifier()
selector = SelectFromModel(model, threshold='median')
selector.fit(X, y)
实战案例:租房列表热度预测
我们使用Renthop数据集演示完整流程:
import pandas as pd
# 加载数据
df = pd.read_json('renthop_train.json.gz')
# 文本特征处理
df['description_length'] = df['description'].apply(len)
# 时间特征工程
df['created'] = pd.to_datetime(df['created'])
df['hour_created'] = df['created'].dt.hour
# 地理特征
df['coord_density'] = df.groupby(
['latitude', 'longitude']
)['price'].transform('count')
结语
特征工程是机器学习项目成功的关键因素。本文介绍了从原始数据到高质量特征的完整处理流程,包括:
- 多模态数据(文本、图像、地理)的特征提取方法
- 特征标准化和交互技巧
- 基于统计和模型的特征选择策略
掌握这些技术将显著提升模型性能,有时效果甚至超过更换更复杂的算法。建议在实践中根据具体问题灵活组合这些方法,并持续迭代优化特征集。
mlcourse.ai Open Machine Learning Course 项目地址: https://gitcode.com/gh_mirrors/ml/mlcourse.ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考