当前位置: 首页 > news >正文

Python特征工程基础

# Python特征工程基础
# 特征工程是将原始数据转换为更适合模型的表示
# 包括缩放、编码、特征构造和特征选择

# 1. 导入库
import numpy as np
import pandas as pd
from sklearn.preprocessing import (
StandardScaler, MinMaxScaler, OneHotEncoder, LabelEncoder, PolynomialFeatures
)
from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split

# 2. 创建示例数据(含数值和分类特征)
data = {
'age': [25, 30, 35, 40, 45, 50, 55, 60],
'salary': [30000, 45000, 50000, 60000, 70000, 80000, 90000, 100000],
'city': ['BJ', 'SH', 'GZ', 'BJ', 'SH', 'SZ', 'GZ', 'BJ'],
'department': ['Tech', 'HR', 'Tech', 'Sales', 'Tech', 'HR', 'Sales', 'Tech'],
'target': [0, 0, 1, 1, 1, 0, 0, 1]
}
df = pd.DataFrame(data)
print(f"原始数据:\n{df}\n")

# 3. StandardScaler — 标准化(均值=0,标准差=1)
scaler_std = StandardScaler()
age_salary = df[['age', 'salary']]
age_salary_scaled = scaler_std.fit_transform(age_salary)
print(f"=== StandardScaler ===")
print(f"均值: {age_salary_scaled.mean(axis=0).round(4)}")
print(f"标准差: {age_salary_scaled.std(axis=0).round(4)}")

# 4. MinMaxScaler — 归一化
scaler_mm = MinMaxScaler()
age_salary_mm = scaler_mm.fit_transform(age_salary)
print(f"\n=== MinMaxScaler ===")
print(f"最小值: {age_salary_mm.min(axis=0)}, 最大值: {age_salary_mm.max(axis=0)}")

# 5. OneHotEncoder — 独热编码
ohe = OneHotEncoder(sparse_output=False, drop='first')
city_encoded = ohe.fit_transform(df[['city']])
print(f"\n=== OneHotEncoder ===")
print(f"原始类别: {ohe.categories_}")
print(f"编码结果:\n{city_encoded}")

# 6. LabelEncoder — 标签编码
le = LabelEncoder()
department_encoded = le.fit_transform(df['department'])
print(f"=== LabelEncoder ===")
print(f"编码映射: {dict(zip(le.classes_, le.transform(le.classes_)))}")
print(f"编码结果: {department_encoded}")

# 7. PolynomialFeatures — 多项式特征
poly = PolynomialFeatures(degree=2, include_bias=False)
age_salary_poly = poly.fit_transform(age_salary)
print(f"\n=== PolynomialFeatures ===")
print(f"原始 {age_salary.shape[1]} 维 -> {age_salary_poly.shape[1]} 维")
print(f"特征名称: {poly.get_feature_names_out()}")

# 8. SelectKBest — 特征选择
iris = load_iris()
X, y = iris.data, iris.target
selector = SelectKBest(score_func=f_classif, k=2)
X_selected = selector.fit_transform(X, y)
print(f"\n=== SelectKBest (K=2) ===")
print(f"特征分数: {selector.scores_}")
print(f"选中索引: {selector.get_support(indices=True)}")

# 9. 完整流程:拟合训练集,转换测试集
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # 只用 transform!
print(f"\n=== 特征工程总结 ===")
print(f"训练集均值 (≈0): {X_train_scaled.mean(axis=0).round(4)}")

# 10. 特征工程原则
# - 训练集 fit_transform,测试集只 transform(避免数据泄露)
# - 数值型: StandardScaler / MinMaxScaler
# - 无序类别: OneHotEncoder,有序: OrdinalEncoder
# - 特征选择可减少维度、降低过拟合

http://www.jsqmd.com/news/924188/

相关文章:

  • OpCore Simplify终极指南:5分钟快速构建OpenCore EFI配置
  • 【Gemini欺诈识别系统合规生死线】:GDPR+《反电信网络诈骗法》双框架下6类数据使用红线与审计通关清单
  • Prompt工程×Gemini双引擎启动,手把手教你写出高响应率提示词,3类行业模板即拿即用
  • 2026论文必藏降AI率网站大曝光:一键压到安全线谁最稳
  • SecureCRT 8.5安装激活避坑全记录:从下载到成功注册,我踩过的雷你别再踩
  • 1975B
  • 青州抽沙船厂家哪家好 - 舒雯文化
  • 基于Arduino的智能植物浇水系统:自适应阈值灌溉与物联网实践
  • 从房价预测到广告点击率:用LinearRegression的positive参数解决业务中的‘非负’约束问题
  • 2026 年6月天津继承律所深度测评,深耕家族财富传承 - 资讯纵览
  • 别再盲目点击“同意”!Gemini新版通知中隐藏的2个未声明数据共享接口(附检测脚本)
  • 电源厂 ToMES 用户使用说明书_v4
  • 一键删除Gemini账户?别信!真实流程需完成这6项强制验证,第4步90%用户忽略
  • 如何3分钟获取中小学电子课本?这款开源工具让你告别繁琐下载
  • 三大优化方案让老旧电视重获新生:mytv-android原生直播应用性能调优指南
  • 基于ESP32与BLE的摩托车智能通知显示系统DIY全攻略
  • 年省电费超9万:科瑞昌省电空调改造案例解析 - 资讯纵览
  • Python点击劫持防护
  • 2026降AI率工具红黑榜:降AIGC网站怎么选?用过才敢说!
  • 如何一键解密QQ音乐加密文件:QMCDecode音频格式转换实战指南
  • 2026 西安黄金回收真实案例分享 实力商家卖价高口碑稳居前列 - 薛定谔的梨花猫
  • 抖音批量下载器终极指南:高效获取无水印视频与音乐原声
  • 紧急!Gemini API调用量突增237%背后的3个隐蔽攻击指纹——附Python自动化检测脚本(限24小时免费领取)
  • 跨平台资源下载神器:3分钟掌握视频号、抖音等热门内容保存技巧
  • Android逆向工程终极指南:用Androguard轻松掌握APK分析技术
  • WeChatMsg:重新定义你的数字记忆主权,让每一段对话都值得被珍藏
  • Keyviz技术深度解析:跨平台键盘鼠标事件可视化架构剖析
  • 高效Java图像处理解决方案:WebP ImageIO深度解析与实战指南
  • Python滑动窗口算法
  • 别再死磕EKF了!用ESKF搞定IMU+激光雷达融合,误差状态建模实战(附Python代码)