Python机器学习:自定义函数筛选相关性高的特征

当特征有很多的时候,难免会出现一些相关性高的特征。可以自定义一个自动化的方法批量输出这些特征,方便我们进行下一步删除或者降维的处理。

def hight_corr(x):
    data_corr = x.corr()>0.65
    a=[]
    
    for i in data_corr.columns:
        if data_corr[i].sum()>=2:
            a.append(i)

    return a

代码讲解:

data是数据集;

def hight_corr()是自定义的函数名;

x是自定义参数,用来表示数据集的;

data.corr()生成相关矩阵,data.corr()>0.65是条件判断会生成布尔值;

data_corr 用来保存生成的布尔值的矩阵;

data_corr[i]筛选相关矩阵其中一列,i是被定义的用来代表columns的参数;

data_corr[i].sum()对布尔值进行相加,强相关的值为为True,也就是1,强相关的字段会被sum()函数计数出来;

那为什么要判断大于等于2呢,因为在矩阵里,特征a与自身相关 本来就有一个1,当这个特征a与另外的特征b强相关的时候才会有第二个1;

append()指在数组后面追加元素,a是定义的数组,i是字段名;


这个段代码可以直接复制使用,然后把数据集放到函数里就可以啦:

hight_corr(data)

运行结果:

 强相关性的字段就可以一键输出出来啦!

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
特征筛选是指从给定的特征集合中选择最具有代表性和相关性特征,以提机器学习模型的性能和效果。在Python中,可以使用 scikit-learn 库中的 feature_selection 模块进行特征筛选。 参考引用中的代码,通过使用 SelectPercentile 类从给定的特征集合中选择特定百分比的特征来进行特征筛选。具体步骤如下: 1. 导入所需的库和模块:首先,导入需要的库,如 numpy 和 sklearn 中的 feature_selection 和 cross_val_score。同时,确保已经导入了相关的数据集和模型。 2. 定义特征筛选的百分比范围:使用 range 函数定义特征筛选的百分比范围,例如 range(1, 100, 2)表示从1%到99%,步长为2%。 3. 进行特征筛选:使用 SelectPercentile 类和 chi2 方法创建一个特征筛选器(fs),并将其应用于训练数据集(X_train)。可以根据具体需求选择不同的特征选择方法和百分比。 4. 进行交叉验证:使用 cross_val_score 函数在特征筛选后的数据集上进行交叉验证,并计算模型的得分。可以根据具体需求选择交叉验证的次数和评分指标。 5. 收集结果:将每个百分比对应的得分保存在一个数组(results)中。 6. 找到最佳特征筛选百分比:通过找到得分最特征筛选百分比,确定最佳的特征筛选比例。 7. 输出最佳特征筛选百分比:输出得分最特征筛选百分比,以及对应的最佳特征筛选个数。 下面是一个示例代码,展示了如何在 Python 中进行特征筛选: ```python from sklearn import feature_selection from sklearn.model_selection import cross_val_score import numpy as np # 定义特征筛选的百分比范围 percentiles = range(1, 100, 2) # 存储结果的数组 results = [] # 特征筛选和交叉验证 for i in percentiles: fs = feature_selection.SelectPercentile(feature_selection.chi2, percentile=i) X_train_fs = fs.fit_transform(X_train, y_train) scores = cross_val_score(dt, X_train_fs, y_train, cv=5) results = np.append(results, scores.mean()) # 找到最佳特征筛选百分比 opt = np.where(results == results.max())[0] # 输出最佳特征筛选百分比 print('Optimal number of features: %d' % percentiles[int(opt)]) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值