数据预处理方法详解:特征选择、特征缩放与特征构造
创作时间:
作者:
@小白创作中心
数据预处理方法详解:特征选择、特征缩放与特征构造
引用
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()
热门推荐
群晖NAS怎么直接连接电脑
读懂食品标签益处多
莓茶为什么叫死人茶?揭秘莓茶的危害与副作用
东汉是不是西汉的延续,刘备的蜀汉为何不是汉的延续?一文说清楚
上海持续推进白玉兰推广应用:打造“1+20+30+100”特色景观
如何写好本科论文
背书方法有哪些?十种实用的记忆和复习技巧
假期前3天122万余人打卡天安门,他们做好游客服务保障
DeepSeek预测:未来5年中国房价下跌最厉害的10个二线城市!
中海安:缅甸安全形势持续恶化,军方与地方武装冲突频发
人像数据库如何建设
减肥必看:8大主食热量对比与低热量食品推荐
Steam游戏打不开没反应怎么办?5种实用解决方案
沙漠遇死驼:为何不能碰?触碰后果很严重
健身吃增肌粉对身体有害吗?使用指南来了
什么因素影响管理团队名称的选择?
Ps 滤镜:画笔描边
文化中国行丨传承的不只是建造技艺 看闽南传统民居的今与昔
河南项城一厂区突发爆炸,官方通报
身边涉及法律的案例:从日常生活到法律责任的全面解析
香港银行卡解冻全流程指南:从原因分析到最终解冻
英语四级模拟考试活动策划案
百家姓知识普及
姓氏起源与家谱文化对社会的积极作用
口腔护理知识培训课件
农村宅基地使用权申请、买地盖房及搬迁赔偿指南
城镇居民医疗保险异地报销的方法是什么
如何鉴别椰子油品质的优劣
一边清理一边投放?成都共享电动自行车现状再调查
糖尿病患者可以吃红糖吗?医生的专业解答来了