数据预处理方法详解:特征选择、特征缩放与特征构造
创作时间:
作者:
@小白创作中心
数据预处理方法详解:特征选择、特征缩放与特征构造
引用
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()
热门推荐
奥运冠军谌龙入选世界羽联名人堂
“绝大多数自杀者,都会感到后悔”|关于自杀及其警号的基本知识
音响知识分享,7种改善音质的音响摆位方法
乒乓球横拍正手搓球技巧详解:从入门到精通的全面指南
外贸跟单的主要工作内容是什么?盘点跟单员的要求有哪些?
消化功能差的人不能吃木耳?这些关于木耳的谣言,你信了几个?
央视财经调查:你买的乳胶枕可能是假的!或含致癌物
「体脂肪计算」公式,减重你该看的是体脂不是体重
学车选择手动还是自动?C1和C2都适合哪些人?
司美格鲁肽注射液为什么不建议长期使用
掌握现金管理,提升财务自由度的秘诀
中国手术机器人行业发展趋势分析与未来投资报告(2024-2031年)
圆锥角膜交联术后视力能提升吗?多久可以配镜?技术成熟吗?这篇文章为你解答
描写乡村生活的诗词名句
怎么举报陌生号码骚扰
香港黑帮片“教父”,推荐10部杜琪峰执导的高分电影
您应该为 Raspberry Pi 使用哪种编程语言?
18岁女生确诊“恋爱脑”!医生:严重可威胁生命
十大振兴产业,共筑经济高质量发展新篇章
电焊闪眼后如何正确使用眼药水?
从机器人密度看上海智能制造新发展
景洪市委书记赵刚用10张图片展示"象"往之地的魅力
体坛联播|利物浦冠军稳了!曼联保级稳了!
葡萄干适合减肥的人吃吗
乐山大佛:千年巨佛背后的故事与历史变迁
20天累涨50%后,科创还能走多远?这九个指标值得关注
补镁多了有什么副作用
冷色暖色怎麼分?掌握色彩冷暖特性,打造更具感染力的設計
《老年人防诈骗指南》,请查收
《西游记》作者真的是吴承恩吗?