sklearn的SelectKBest特征选择函数的运用

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from scipy.stats import pearsonr
import numpy as np
import pandas as pd
from IPython.display import display

# 导入IRIS数据集
iris = load_iris()
# 特征矩阵
iris_data = iris.data
print('iris_data:\n', iris_data)
# 目标向量
iris_target = iris.target
print('iris_target:\n', iris_target)
# 特征
feature_names = iris.feature_names
print('feature_names:\n', feature_names)

#class sklearn.feature_selection.SelectKBest(score_func=<function f_classif>, *, k=10)
# 参数:
    # score_func:为计算评估特征是否好的函数(该函数输入特征矩阵和目标向量,输出二元组(评分,P值)的数组,
    #                                   数组第i项为第i个特征的评分和P值,在此定义为计算相关系数)。
    # k:为选择的特征个数,保留前几个最佳特征
#返回选择器selector
'''
score_func参数的内容:
lambda x:pearson(x,Y) :是计算x(每一个特征)与Y(预测结果)的pearson系数。
                    lambda argument_list:expersion :lambda函数是匿名函数
                                                     argument_list是参数列表、expression是一个关于参数的表达式
map(lambda x:pearsonr(x, Y)[0], X.T) :
                    map(function, iterable, ...) :第一个参数 function以参数序列iterable中的每一个元素调用function 函数,
                                                 返回包含每次 function 函数返回值的新列表。
                    .T  :是.permute函数的简化版本,不仅可以转置2维tensor,甚至可以对n维tensor进行转置
                    X.T :在lambda函数后面直接传递实参给x
np.array(list(map( , ))) :map函数在Python3.x下返回迭代器,numpy.array()需写入list。map前要再套一个list()
map(lambda x: pearsonr(x, Y)[0], X.T) :要计算的是每一个特征与预测结果的关系,不加转置则相当于是每一个样本与预测结果的关系了。
                                        故X后要再加一个.T
                                        scipy.stats.pearsonr(x, y)返回值这里只需要返回的r值即皮尔森系数即可。
                                        pearsonr(x, Y)[0]=r,pearsonr(x, Y)[1]=p-value.
'''
selector = SelectKBest(lambda X, Y: np.array(list(map(lambda x: pearsonr(x, Y)[0], X.T))).T, k=3)

# 常用方法:
    #fit(x,y):传入特征集x和标签y,拟合数据。
    #transform(x):fit(x,y)后使用,转换数据,返回特征过滤后保留下的特征数据集。
    #fit_transform(x,y):拟合数据+转化数据,返回特征过滤后保留下的特征数据集。
    #get_support(indices=True):fit(x,y)后使用,返回特征过滤后保留下的特征列索引。
#用fit_transform方法,返回选择特征后的数据。
'''
(lambda X, Y:np.array(...),, k=3).fit_transform(iris.data, iris.target):
fit_transform分别传递实参iris.data、iris.target给X,Y
'''
datas=selector.fit_transform(iris.data, iris.target)
#用get_support(indices=True)方法,返回特征列索引
select_feature_index=selector.get_support(indices=True)
print('select feature index:\n',select_feature_index)

#属性:fit(x,y)方法后才能调用
  #scores_ :返回每个特征的得分
  #pvalues_ : 返回每个特征得分对应的p_value值。如果score_func只返回分数,则pvalues_返回空
#调用属性scores_,获得特征选择函数返回的得分
feature_score = selector.scores_
print('feature score:\n',feature_score)
#调用属性pvalues_ ,获得特征选择函数返回的P值
feature_P = selector.pvalues_
print('feature P:\n',feature_P)

#以DataFrame形式返回特征选择后的数据
iris_data_new = pd.DataFrame(data=datas,
                             columns=np.array(feature_names)[select_feature_index])
print('new data:')
display(iris_data_new)

参考资料:

机器学习中,有哪些特征选择的工程方法? - bonelee - 博客园 (cnblogs.com)

每天一点sklearn函数之SelectKBest(9.5) - 知乎 (zhihu.com)

(5条消息) Python数据分析:特征选择-SelectKBest_爱上这个夏天的博客-CSDN博客

(5条消息) 机器学习学习记录之sklearn特征选择SelectKBest函数_sklearn selectkbest_Lotus莲的博客-CSDN博客

细说Python的lambda函数用法,建议收藏 - 知乎 (zhihu.com)
(5条消息) tensor .t() vs .T_tensor.t()_lollows的博客-CSDN博客Python map() 函数 | 菜鸟教程 (runoob.com)

注明:

仅供个人参考,如有理解错误还请评论区指出,不胜感激(*^_^*)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值