python选择最佳特征-相关性分析

相关性分析

最佳苦于如何从众多特征中找到最佳特征,老师建议先使用相关性分析,数据分析小白来记录一下这个过程。
发现一个很好的方法:sklearn.feature_selection 的 SelectKBest

互信息法
  • 互信息法主要两个点:
    (1)注意区分离散数据和连续数据
    (2)输出一般为索引,但只获得索引对特征量大的数据集非常不友好,需要想办法获得特征名

针对(1)可以考虑重写SelectKBestfit方法
参考:如何使用混合离散和连续特征的互信息来选择KBest?

class SelectKBestCustom(SelectKBest):

    def fit(self, X, y,discrete_features='auto'):
        X, y = check_X_y(X, y, ['csr', 'csc'], multi_output=True)

        if  not callable(self.score_func):
            raise TypeError("the score function should be a callable, %s (%s)""was passed."%(self.score_func, type(self.score_func)))

        self._check_params(X,y)

        score_func_ret = self.score_func(X, y, discrete_features)
        if isinstance(score_func_ret, (list, tuple)):
            self.scores_, self.pvalues_ = score_func_ret
            self.pvalues_ = np.asarray(self.pvalues_)
        else:
            self.scores_ = score_func_ret
            self.pvalues_ = None

        self.scores_ = np.asarray(self.scores_)
        return self

最后调用自己的类

selector_mic = SelectKBestCustom(mic, k=12)
#discrete_features输入离散变量的索引
selector_mic.fit(x_array, y_array,discrete_features = [])
selector_mic.transform(x_array)

针对(2)对于我比较有效的方法如下:

cols = selector_mic.get_support(indices=True)
features_new_mic = data_frame.columns[cols]
卡方验证

卡方验证也是比较推荐的相关性验证方法,同样使用SelectKBest
这里并没有用改写的类,其一是因为chi2方法本身只支持两个参数,其二是我其实也并不清楚卡方验证是不是本身就会考虑离散型数据和连续型数据,有懂的小伙伴欢迎解答~

selector_chi2 = SelectKBest(chi2, k=12)
selector_chi2.fit(x_array, y_array)
selector_chi2.transform(x_array)
cols_chi2 = selector_chi2.get_support(indices=True)
features_new_chi2 = data_frame.columns[cols_chi2]
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用sklearn.feature_selection模块中的SelectKBest方法进行相关性分析特征选择。这个方法主要是根据互信息法来选择最佳特征。使用SelectKBest方法需要注意以下两点: 1. 区分离散数据和连续数据:在进行特征选择时,需要考虑特征的类型,即特征是离散型数据还是连续型数据。 2. 输出索引或特征名:SelectKBest方法的输出一般为特征的索引,但如果只获得索引对于特征量大的数据集来说不够友好,需要想办法获得特征的名称。 下面是一个示例代码,展示了如何使用SelectKBest方法进行相关性分析特征选择: ``` from sklearn.feature_selection import SelectKBest, mutual_info_classif # 创建SelectKBest对象,指定使用互信息法进行特征选择 selector = SelectKBest(score_func=mutual_info_classif, k=12) # 使用fit方法进行特征选择,传入特征矩阵X和目标变量y selector.fit(X, y) # 通过get_support方法获取选择特征的索引 selected_features_indices = selector.get_support(indices=True) # 根据索引从原始特征矩阵X中选择特征 selected_features = X[:, selected_features_indices] ``` 这段代码演示了在相关性分析特征选择中使用互信息法的方法。首先,创建了一个SelectKBest对象,并指定score_func参数为mutual_info_classif,k参数为希望选择特征数量。然后,使用fit方法对特征矩阵X和目标变量y进行特征选择。最后,通过get_support方法获取选择特征的索引,再根据索引从原始特征矩阵X中选择特征。 希望以上内容对您有所帮助!如果还有其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值