1 特征选择原理
特征选择是机器学习中的一项重要任务,它涉及从原始特征集中选择最相关特征的过程。特征选择的目的是提高模型的性能,减少计算复杂度,并提供更好的可解释性。
2 公式
特征选择有多种方法,包括:
-
方差阈值:选择方差大于某个阈值的特征。
-
相关系数:选择与目标变量高度相关的特征。
-
基于模型的特征选择:使用模型(如随机森林)的特征重要性来选择特征。
3 案例实现
3.1 模块分析
以下是使用Python生成随机森林数据集,进行特征选择,并绘制相关图表的示例:
-
生成虚拟数据集:使用
make_classification
函数生成一个包含100个样本和8个特征的分类数据集。 -
可视化数据:使用
seaborn
的pairplot
函数绘制特征对之间的散点图,以可视化数据分布。 -
原始特征的相关性热力图:计算特征之间的相关性矩阵,并使用
seaborn
的heatmap
函数绘制热力图。 -
方差过滤:选择方差大于0.15的特征,并使用
seaborn
的boxplot
函数绘制过滤后数据的箱线图。 -
训练随机森林分类器并提取重要特征:使用随机森林模型训练数据,并提取每个特征的重要性。然后,根据重要性对特征进行排序,并使用
matplotlib
绘制条形图。
3.2 完整代码
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_classification
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectKBest, f_classif
import pandas as pd
# 1. 生成虚拟数据集
X, y = make_classification(n_samples=100, n_features=8, n_informative=3, n_redundant=0, random_state=42)
# 2. 可视化数据
plt.figure(figsize=(10, 6))
sns.pairplot(pd.DataFrame(X, columns=[f'Feature {i+1}' for i in range(8)]))
plt.suptitle('Pairplot of Features')
plt.show()
# 3. 原始特征的相关性热力图
plt.figure(figsize=(10, 8))
correlation_matrix = pd.DataFrame(X, columns=[f'Feature {i+1}' for i in range(8)]).corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm')
plt.title('Correlation Heatmap of Original Features')
plt.show()
# 4. 方差过滤
variance_threshold = 0.15
X_filtered = X[:, np.var(X, axis=0) > variance_threshold]
# 绘制过滤后的数据的箱线图
plt.figure(figsize=(10, 6))
sns.boxplot(data=pd.DataFrame(X_filtered, columns=[f'Feature {i+1}' for i in range(X_filtered.shape[1])]))
plt.title('Boxplot of Filtered Features')
plt.show()
# 5. 训练随机森林分类器并提取重要特征
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
importances = model.feature_importances_
# 根据重要性对特征排序
indices = np.argsort(importances)[::-1]
plt.figure(figsize=(10, 6))
plt.title('Feature Importances')
plt.bar(range(X.shape[1]), importances[indices], color="r", align="center")
plt.xticks(range(X.shape[1]), [f'Feature {i+1}' for i in indices], rotation=90)
plt.xlim([-1, X.shape[1]])
plt.show()
通过生成随机森林数据集,执行特征选择,并绘制相关图表,使得我们可以直观地观察到特征选择的效果和特征的重要性。
3.3 生成图形分析
-
图一:特征对的散点图(Pairplot)
-
这个图表展示了数据集中所有特征对之间的二维散点图。
-
通过这个图表,我们可以观察特征之间的相互关系,比如是否存在线性关系或非线性关系。
-
高度相关的特征将显示出较强的线性趋势,而不相关的特征将显示出随机分布的点。
-
这个图表有助于我们初步判断特征之间的独立性。
-
-
图二:原始特征的相关性热力图
-
相关性热力图显示了所有特征之间的相关系数,颜色越暖表示相关性越强,颜色越冷表示相关性越弱。
-
这个图表帮助我们识别哪些特征之间存在强烈的线性关系,从而可能考虑去除冗余特征或进一步探索特征组合。
-
高相关性可能指示特征冗余,特别是当两个特征高度相关但对模型的贡献有限时。
-
-
图三:过滤后特征的箱线图
-
方差过滤后,这个图表展示了剩余特征的分布情况。
-
箱线图可以揭示数据的分布、中位数、四分位数和异常值。
-
通过这个图表,我们可以检查每个特征的数据分布是否稳定,以及是否存在异常值。
-
过滤掉方差较小的特征有助于去除噪声较大的特征,这些特征可能对模型的训练和预测贡献不大。
-
-
图四:特征重要性条形图
-
这个图表展示了随机森林模型中每个特征的重要性。
-
特征重要性是通过模型学习过程中每个特征对预测的贡献度来确定的。
-
条形图的长度表示特征的重要性,更长的条表示更重要的特征。
-
这个图表帮助我们理解哪些特征对模型的预测能力贡献最大,哪些特征可以被忽略或进一步研究。
-
通过这些图表,我们可以对数据集的特征有一个全面的了解,包括它们之间的关系、分布情况以及对模型预测能力的贡献。这些信息对于特征工程、模型选择和模型优化都是极其宝贵的。
标签:分析,plt,特征,图表,特征选择,成分,相关性,import From: https://blog.csdn.net/qq_51749909/article/details/143260317