当前位置: 首页 > 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.gsyq.cn/news/1435513.html

相关文章:

  • 青州抽沙船厂家哪家好 - 舒雯文化
  • 基于Arduino的智能植物浇水系统:自适应阈值灌溉与物联网实践
  • 一键删除Gemini账户?别信!真实流程需完成这6项强制验证,第4步90%用户忽略
  • 紧急!Gemini API调用量突增237%背后的3个隐蔽攻击指纹——附Python自动化检测脚本(限24小时免费领取)
  • 如何一键解密QQ音乐加密文件:QMCDecode音频格式转换实战指南
  • Android逆向工程终极指南:用Androguard轻松掌握APK分析技术
  • Python滑动窗口算法
  • FUXA实战:工业流程管道动画制作全流程指南
  • 2026手把手教你PDF转CSV!工具+在线方法全套教程
  • Windows 11优化神器:用Win11Debloat一键打造纯净高效系统
  • 终极指南:如何在Windows上优雅使用BiliBili-UWP第三方客户端
  • Altium Designer PCB设计全流程:从原理图到生产文件的实战指南
  • 如何高效构建现代化电子签名功能:Signature Pad专业开发指南
  • 基于RP2040 Pico的125Msps任意波形发生器:DMA与PIO硬件加速实战
  • 服务网格Istio实战与微服务治理
  • 从光敏电阻到物联网:手把手教你制作智能酒精消毒提醒器
  • 如何用.NET Windows Desktop Runtime轻松部署Windows桌面应用?终极解决方案来了!
  • 2026终极测评:16款降AIGC软件测评,闭眼入这款就对了! - 降AI小能手
  • Solon Server 启动模式深度解析:从 0.3MB 内核到 10+ Server 插件
  • MASA模组全家桶汉化包:让中文玩家轻松掌握顶级Minecraft工具
  • 在Ubuntu 20.04上为CARLA 0.9.14手动打上鱼眼相机补丁(附编译避坑指南)
  • 2026 年郑州GEO代运营公司盘点:五家AI服务商深度解析 - 资讯纵览
  • 如何用.NET Windows Desktop Runtime彻底告别部署噩梦?完整实战指南
  • 如何快速部署开源自动化工具:5个实用技巧让你轻松玩转鸣潮游戏
  • 2026上海金桥能长租的高端酒店公寓|浦东商务租住首选榜单 - 资讯纵览
  • 2026年栀子花香水推荐:从大牌到小众高性价比选购指南 - 资讯纵览
  • 【企业级隐私防护紧急指南】:Gemini API调用新规生效前,你漏掉了这4个GDPR致命漏洞
  • 论文写完怕重复率爆表?这个AI免费查重神器,90%的同学还不知道!
  • 如何快速解锁游戏窗口限制:终极窗口编辑器完整指南
  • 2026 广州工厂搬家公司口碑排行榜 权威实测推荐 - 从来都是英雄出少年