数据预处理方法详解:特征选择、特征缩放与特征构造
创作时间:
作者:
@小白创作中心
数据预处理方法详解:特征选择、特征缩放与特征构造
引用
CSDN
1.
https://blog.csdn.net/2301_80151359/article/details/144144194
特征选择
1.1 原理
特征选择是选择对模型训练最重要的特征,减少数据维度,去除冗余或不相关特征,提高模型性能的性能和训练速度,减少过拟合。
1.2 核心公式
可以使用基于树模型的特征重要性度量,如在随机森林中计算特征的重要性:
其中,Ii,j是第j棵树中特征Xi的重要性度量。
假设使用基于Gini系数的特征重要性计算方法,单棵树的特征重要性可以表示为:
其中,T是所有包含特征Xi的节点,Nt是节点t的样本数量,N是总样本数量,
是节点t上的Ginit系数变化。
1.3 Python案列
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, f_classif, mutual_info_classif
from sklearn.preprocessing import StandardScaler
# 加载数据集
data = load_iris()
X = data.data
y = data.target
# 标准化数据
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 特征选择方法
selectors = [
('SelectKBest_f_classif', SelectKBest(score_func=f_classif, k=2)),
('SelectKBest_mutual_info_classif', SelectKBest(score_func=mutual_info_classif, k=2))
]
# 绘制图形
plt.figure(figsize=(14, 6))
for i, (name, selector) in enumerate(selectors):
plt.subplot(1, 2, i + 1)
X_new = selector.fit_transform(X_scaled, y)
mask = selector.get_support()
plt.scatter(X_new[:, 0], X_new[:, 1], c=y, edgecolor='k', s=50)
plt.title(f'{name} Feature Selection')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.tight_layout()
plt.show()
特征缩放
2.1 原理
减少特征值范围的差异,帮助某些算法更快收敛,常用于标准化和归一化之外的方法。
2.2 核心公式
最大最小缩放
其中,Xmax和Xmin分别是特征的最大值和最小值。
对数变换
其中,加1是为了避免对数零或负值问题。
2.3 Python案例
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler, MinMaxScaler
# 加载Iris数据集
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['species'] = iris.target
# 原始数据集的散点图
sns.pairplot(df, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Original Data', y=1.02)
plt.show()
# 标准化
scaler = StandardScaler()
df_standardized = pd.DataFrame(scaler.fit_transform(df.iloc[:, :-1]), columns=iris.feature_names)
df_standardized['species'] = df['species']
# 标准化数据集的散点图
sns.pairplot(df_standardized, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Standardized Data', y=1.02)
plt.show()
# 最小最大缩放
scaler = MinMaxScaler()
df_minmax = pd.DataFrame(scaler.fit_transform(df.iloc[:, :-1]), columns=iris.feature_names)
df_minmax['species'] = df['species']
# 最小最大缩放数据集的散点图
sns.pairplot(df_minmax, hue='species', markers=['o', 's', 'D'])
plt.suptitle('Min-Max Scaled Data', y=1.02)
plt.show()
特征构造
3.1 原理
特征构造可以中的隐藏关系,提升模型表现。
3.2 Python案例
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 生成示例数据
np.random.seed(42)
data = pd.DataFrame({
'area': np.random.randint(1000, 3500, 100),
'bedrooms': np.random.randint(1, 5, 100),
'bathrooms': np.random.randint(1, 3, 100),
'price': np.random.randint(100000, 500000, 100)
})
# 构造新特征
data['price_per_sqft'] = data['price'] / data['area']
data['bed_bath_ratio'] = data['bedrooms'] / data['bathrooms']
# 绘制图形
plt.figure(figsize=(14, 6))
# 图形1:价格与每平方英尺价格的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['area'], y=data['price_per_sqft'])
plt.title('Price per Square Foot vs Area')
plt.xlabel('Area (sqft)')
plt.ylabel('Price per Square Foot ($)')
# 图形2:价格与卧室-浴室比例的关系
plt.subplot(1, 2, 2)
sns.scatterplot(x=data['bed_bath_ratio'], y=data['price'])
plt.title('Price vs Bedroom-Bathroom Ratio')
plt.xlabel('Bedroom-Bathroom Ratio')
plt.ylabel('Price ($)')
plt.tight_layout()
plt.show()
# 更多图形
plt.figure(figsize=(14, 6))
# 图形3:面积与价格的关系
plt.subplot(1, 2, 1)
sns.scatterplot(x=data['area'], y=data['price'])
plt.title('Area vs Price')
plt.xlabel('Area (sqft)')
plt.ylabel('Price ($)')
# 图形4:每平方英尺价格的分布
plt.subplot(1, 2, 2)
sns.histplot(data['price_per_sqft'], kde=True)
plt.title('Distribution of Price per Square Foot')
plt.xlabel('Price per Square Foot ($)')
plt.ylabel('Frequency')
plt.tight_layout()
plt.show()
热门推荐
基于图的异常检测算法OddBall详解
德国为何冒险进攻苏联?希特勒进攻苏联时在想啥?
抗菌肽抗菌机制及与抗生素协同作用的研究进展
电容选型技巧:如何根据电路需求选择合适的电容器
园区规划:提升区域经济与生态可持续性的关键策略
润滑油脂的保质期多久 润滑油脂如何保存
Excel表格怎么快速编辑超链接目录
溢价率51%,换手率超1800%!多家公募基金密集提醒跨境ETF风险
玉米要煮多久才能熟透?冷水下锅还是热水下锅?
空气炸锅不启动怎么办?7个常见原因及解决方法
老年人吞咽困难的五大原因解析
网络爆火的泰顺茶歌,背后故事更惹乡愁
烹饪比赛乱象频现,厨师参赛到底是比技术还是拼关系?
奇偶函数的加减乘除 四则运算是什么
敦煌遗书《祭驴文》:原文 译文
头屑多如“雪”,当心可能是皮肤病
低学历女生适合的十大职业 女生学历不高适合什么工作 低学历做什么好
BBA降到十几万也没人买?车主:身边12个同学,8个都换了电动车
戴牙套矫正牙齿的危害有哪些
千年古县|宁阳:有140多处历史遗址的全国首批县域商业“领跑县”
麒麟系统安装CrossOver软件的详细操作步骤
从春节到过年,《节日之书》带你领略传统节日的魅力
北京大栅栏观音寺片区保护更新方案获北京市二等奖
种植金银花的要点,施肥以有机肥为主
刘邦与朱元璋:两位农民皇帝的对比分析
护照免签国家清单及政策解析
如何确保劳动合同模板符合当地法律法规?
电影项目管理全攻略:从前期规划到后期制作
六大食物提神 让大脑充满活力
戴上盔、系好带,安全才会常相伴!|一盔一带