
机器学习中有效特征选择的技巧
图片作者 | Canva 创建
在训练机器学习模型时,您有时会处理具有大量特征的数据集。但是,只有一小部分特征对于模型进行预测实际上是重要的。这就是为什么您需要特征选择来识别这些有用的特征。
本文介绍了一些有用的特征选择技巧。我们不会深入研究特征选择技术。但我们会介绍一些简单而有效的技巧,帮助您理解数据集中最相关的特征。我们不会使用任何特定的数据集。但您可以尝试在选定的样本数据集上进行尝试。
让我们开始吧。
1. 理解数据
您可能已经厌倦了阅读这个建议。但解决任何问题没有比理解您试图解决的问题以及您正在处理的数据更好的方法了。
因此,理解数据是特征选择的第一步,也是最重要的一步。这包括探索数据集以更好地了解变量的分布、理解特征之间的关系、识别潜在的异常值和相关特征。
探索数据中的关键任务包括检查缺失值、评估数据类型以及为数值特征生成汇总统计信息。
此代码片段加载数据集,提供数据类型和非空值的摘要,为数值列生成基本描述性统计信息,并检查缺失值。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import pandas as pd # 加载你的数据集 df = pd.read_csv('your_dataset.csv') # 获取数据集概述 print(df.info()) # 为数值特征生成汇总统计信息 print(df.describe()) # 检查每列中的缺失值 print(df.isnull().sum()) |
这些步骤可以帮助您更深入地了解数据中的特征以及在进行特征选择之前需要解决的潜在数据质量问题。
2. 移除不相关特征
您的数据集可能有很多特征。但并非所有特征都能提高模型的预测能力。
这些不相关的特征会增加噪声并增加模型复杂性,但并不能使其更有效。在训练模型之前,必须移除这些特征。如果您已详细理解和探索了数据集,那么这将是简单的。
例如,您可以这样删除一组不相关的特征
1 2 |
# 假设“feature1”、“feature2”和“feature3”是不相关的特征 df = df.drop(columns=['feature1', 'feature2', 'feature3']) |
在您的代码中,将“feature1”、“feature2”和“feature3”替换为您要删除的不相关特征的实际名称。
此步骤通过删除不必要的信息来简化数据集,这可以提高模型性能和可解释性。
3. 使用相关性矩阵识别冗余特征
有时您会遇到高度相关的特征。相关性矩阵显示特征对之间的相关系数。
高度相关的特征通常是冗余的,为模型提供相似的信息。在这种情况下,您可以删除其中一个相关特征。
以下是计算数据集中高度相关的特征对的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import seaborn as sns import matplotlib.pyplot as plt # 计算相关性矩阵 corr_matrix = df.corr() # 绘制相关性矩阵的热力图 sns.heatmap(corr_matrix, annot=True, cmap='coolwarm') plt.show() # 识别高度相关的特征对 threshold = 0.8 corr_pairs = corr_matrix.abs().unstack().sort_values(kind="quicksort", ascending=False) high_corr = [(a, b) for a, b in corr_pairs.index if a != b and corr_pairs[(a, b)] > threshold] |
本质上,上述代码旨在识别高相关性(绝对相关值大于 0.8)的特征对,排除自相关。这些高度相关的特征对存储在一个列表中以供进一步分析。然后,您可以审查并选择要在下一步中保留的特征。
4. 使用统计检验
您可以使用统计检验来帮助您确定特征相对于目标变量的重要性。为此,您可以使用 scikit-learn 的 feature_selection 模块中的功能。
以下代码段使用卡方检验来评估每个特征相对于目标变量的重要性。然后使用 SelectKBest 方法选择得分最高的 Top 特征。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from sklearn.feature_selection import chi2, SelectKBest # 假设目标变量是分类的 X = df.drop(columns=['target']) y = df['target'] # 应用卡方检验 chi_selector = SelectKBest(chi2, k=10) X_kbest = chi_selector.fit_transform(X, y) # 显示选定的特征 selected_features = X.columns[chi_selector.get_support(indices=True)] print(selected_features) |
这样做可以将特征集缩减到最重要的变量,从而显著提高模型性能。
5. 使用递归特征消除 (RFE)
递归特征消除 (RFE) 是一种特征选择技术,它递归地移除最重要的特征,并用剩余的特征构建模型。这会一直持续到达到指定的特征数量。
以下是如何在构建逻辑回归模型时使用 RFE 来查找最重要的五个特征。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
从 sklearn.特征选择 导入 RFE from sklearn.linear_model import LogisticRegression from sklearn.model_selection import train_test_split # 假设“X”是特征矩阵,“y”是目标 # 分割为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=25) # 创建逻辑回归模型 model = LogisticRegression() # 在训练集上应用 RFE 以选择 Top 5 特征 rfe = RFE(model, n_features_to_select=5) X_train_rfe = rfe.fit_transform(X_train, y_train) X_test_rfe = rfe.transform(X_test) # 显示选定的特征 selected_features = X.columns[rfe.support_] print(selected_features) |
因此,您可以通过递归地删除最重要的特征来使用 RFE 选择最重要的特征。
总结
有效的特征选择对于构建稳健的机器学习模型很重要。总结一下:您应该理解您的数据,移除不相关的特征,使用相关性识别冗余特征,应用统计检验,并在需要时使用递归特征消除 (RFE) 来提高模型的性能。
祝您特征选择愉快!如果您正在寻找特征工程方面的技巧,请阅读 机器学习有效特征工程技巧。
能否分享软拷贝,如果可能的话
嗨…请详细说明您的问题,以便我们更好地帮助您。