数据预处理方法详解:特征选择、特征缩放与特征构造
创作时间:
作者:
@小白创作中心
数据预处理方法详解:特征选择、特征缩放与特征构造
引用
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()
热门推荐
可食用的东方神奇树叶及其特色烹饪方法
【历史】清代光绪皇帝简介
成人学习钢琴的方法
18年巅峰期!马龙解锁30个世界冠军成就,首冠时张本智和3岁
植物病害的7大症状,10种类型,6个诊断方式,学会了你就是专家!
满屏大涨!黄金又狂飙,现货、期货均突破历史新高
左后脚跟疼痛什么原因引起的
云主机选择关键考量是什么,如何深入了解其性能?
如何预防颈源性头痛?三个实用方法帮你远离头痛困扰
疼痛在头 病根在脖——正确认识颈源性头痛
大便不成形大便不畅
百合用美植袋种植指南
上海专家在顶级期刊发文:益生菌减肥降糖效果与基线水平密切相关
CZ赵长鹏推动AI与区块链结合:BNB Chain AI是下一个风口吗?
脑机接口技术应用迈出坚实一步
完美主义者:病态追求完美的代价
宝宝出生后,这5个证件要抓紧办,早办早省心
基于科学思维的高中生物学原创试题命制探索
宝剑骑士 (Knight of Swords)逆位代表什么意思?
塔罗牌 宝剑骑士逆位的核心意义
常见词牌名及格式
生活|接纳不完美,我们在不一样的未来等你
什么是投资规划的制定方法?这种制定方法有哪些优势和不足?
儿童的鞋该怎么选:守护成长的每一步
居里夫人不是孤军奋战的女英雄
为什么敬佩居里夫人?
如何利用按摩穴位缓解失眠问题?
数值解线性方程组(高级)
人格分析在法律领域的应用:从案件侦破到司法审判
隐藏套餐,免费!成都人太有爱了