特征选择系列-01-过滤式详解-从原理到应用

这篇具有很好参考价值的文章主要介绍了特征选择系列-01-过滤式详解-从原理到应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

做一个完整的机器学习GUI框架,需要考虑诸多可能出现的场景,未能及时更新,完整的算法构建与评估仍需后续展示。目前在做一些特征选择及可解释AI的一些相关工作,而后期这也将成为GUI的重要部分。本文将以过滤式特征为主线,对其原理及实战展开介绍,希望能提供理解。

特征选择过滤法,机器学习,深度学习,人工智能

为什么需要特征选择?

特征选择,也称特征子集选择,是指从M个特征中选择N个特征使得模型预测性能有所提升,同时,降低特征维度,使得模型的计算效率大幅度提升,提取更易于理解的特征,挖掘底层数据中隐藏的有用信息。特征越多,并不直接意味着其性能会变好,反之会使模型更复杂,训练时间更长,带来“维度灾难”。在机器学习实际建模当中,我们往往会根据先验或一些自动特征抽取工具(比如tsfresh)提取出众多特征,但往往大部分特征对模型提升毫无帮助,反之会增大模型训练代价,因此特征选择在机器学习中是比较关键的一环。

特征选择过滤法,机器学习,深度学习,人工智能

很显然,穷举法是最简单粗暴的方法,针对每种可能出现的特征组合进行建模评估,进而找到最优表现特征及模型。简单,但耗时(2n-1)个模型构建评估,随n增大,训练模型指数型增大。

特征选择过滤法,机器学习,深度学习,人工智能

过滤式特征选择

  • 方差过滤

  • 卡方过滤

  • F检验

  • 互信息

  • 皮尔森相关系数

  • Fisher得分

1、方差过滤

毫无疑问,方差过滤即是删除方差低于某个阈值的特征,这里的阈值人为定义。一个特征的方差较小,就意味着该特征没有区分度,可能大部分值是相同的,再极端一点,如果一个特征,其值相同,那该列特征方差为0,试想一下,一列全为相同值的特征对模型有影响吗?答案是否定的。
 

特征选择过滤法,机器学习,深度学习,人工智能

2、卡方过滤

卡方过滤是专门针对离散标签(分类问题)的相关性过滤,通过计算每个非负特征和标签之间的卡方统计量,并按照得分排名,选出top K个特征。卡方统计量反映的是实际频数和理论频数的吻合度,理论频数基于原假设计算结果,如果原假设成立则实际频数与理论频数的差值会很小,卡方小,反之原假设不成立,卡方会增大。

特征选择过滤法,机器学习,深度学习,人工智能

原假设:熬夜与变丑无任何关系,即相互独立无关

特征选择过滤法,机器学习,深度学习,人工智能

特征选择过滤法,机器学习,深度学习,人工智能

根据如上公式计算卡方值=(200-116.6)2/116.6+(80-46.64)2/46.64+……+(100-41.7)2/41.7后查表。

3、F检验

F检验,又称ANOVA,方差齐性检验,是用来捕捉每个特征与标签之间的线性关系的过滤方法。F检验既可以做回归,也可以做分类,和卡方过滤一样,选取p值小于0.05或者0.01的特征,这些特征与标签显著相关应该保留,反之删除。因此在sklearn中提供了faeture_selection.f_classif方法和feature_selection.f_regression方法。F检验是一类建立在F分布基础上的假设检验方法:其中X1X2服从自由度为d1d2的卡方分布,其中𝑋1和𝑋2分别服从自由度为𝑑1和𝑑2的卡方分布,即𝑋1∼𝜒2(𝑑1),𝑋2∼𝜒2(𝑑2),且𝑋1与𝑋2独立,则随机变量𝐹服从自由度为 (𝑑1,𝑑2)的F分布,记为𝐹∼F(𝑑1,𝑑2)。

特征选择过滤法,机器学习,深度学习,人工智能

特征选择过滤法,机器学习,深度学习,人工智能

4、互信息

互信息法是一种用来捕捉每个特征与标签之间的线性和非线性关系的过滤方法。sklearn提供了两个类feature_selection.mutual_info_classif和feature_selection.mutual_info_regression用以做分类和回归互信息特征选择。互信息法不返回p值或F值类似的统计量,它返回“每个特征与目标之间的互信息量的估计”,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1则表示两个变量完全相关。

特征选择过滤法,机器学习,深度学习,人工智能

特征选择过滤法,机器学习,深度学习,人工智能

5、皮尔森相关系数

Pearson相关系数是一种衡量特征与响应变量之间相关关系的方法,反映的是两个变量的相关性,因而只对线性关系敏感。取值范围在[-1,1之间],1表示完全正相关,0表示完全没有线性关系,-1表示完全负相关。通过下式得到的相关系数是基于一定样本的,并不能代表总体样本,所以同样需要进行假设检验以判定Conv(X,Y)是由于抽样误差所致还是两个变量之间确实存在相关关系。

特征选择过滤法,机器学习,深度学习,人工智能

6、Fisher得分

Fisher得分是一种基于距离的特征选择方法,Fisher得分越大,该特征的分类能力越强,说明该特征可以使得分类时类内部距离尽量小,类间距离尽可能大。

特征选择过滤法,机器学习,深度学习,人工智能

特征选择过滤法,机器学习,深度学习,人工智能

import os
import pandas as pd
from sklearn.datasets import make_classification
from sklearn.feature_selection import f_classif,f_regression
​
class featureSelect(object):
​
    def __init__(self,raw_data):
        self.raw_data = raw_data
​
    def pearsonr_selection(self, topN = 5):  # 皮尔逊pearsonr相关系数
        from scipy.stats import pearsonr
        data_x = self.raw_data.iloc[:, 1:-1]
        data_y = self.raw_data.iloc[:, -1]
        raw_features_list = self.raw_data.columns.to_list()
        fea_pear_list = []
        for col_name, data in data_x.iteritems():
            pears = pearsonr(data, data_y)[0]
            fea_pear_list.append([col_name, abs(pears)])
        # 对特征进行排序
        feature_df = pd.DataFrame(fea_pear_list)
        feature_df.columns = ["feature","pearson_score"]
        feature_df.sort_values(by="pearson_score", ascending=False, inplace=True)
        topn_fea = feature_df["feature"].iloc[0:topN].to_list()
        #筛选后的DataFrame可保存至csv文件以便后续建模输入
        return self.raw_data[[raw_features_list[0]]+topn_fea+[raw_features_list[-1]]]
​
    def variance_filter(self, threshold=0):
        from sklearn.feature_selection import VarianceThreshold
        X = self.raw_data.iloc[:, 1:-1]
        selector = VarianceThreshold(threshold)
        X_var_feature = selector.fit_transform(X)
        features_all = self.raw_data.columns.values.tolist()
        select_name_index = selector.get_support(indices=True)
        select_name = []
        for i in select_name_index:
            select_name.append(features_all[i])
        return self.raw_data[[features_all[0]]+select_name+[features_all[-1]]]
​
    #分类适用
    def chi2_select(self, k = 2):
        from sklearn.feature_selection import SelectKBest
        from sklearn.feature_selection import chi2
        X = self.raw_data.iloc[:, 0:-1]
        y = self.raw_data.iloc[:, -1]
        selector = SelectKBest(chi2, k = 2)
        selector.fit(X, y)
        features_all = self.raw_data.columns.values.tolist()
        select_name_index = selector.get_support(indices=True)
        select_name = []
        for i in select_name_index:
            select_name.append(features_all[i])
        return self.raw_data[[features_all[0]]+select_name+[features_all[-1]]]
​
        
    def f_classif_select(self,k):
        from sklearn.feature_selection import SelectKBest
        from sklearn.feature_selection import f_classif
        X = self.raw_data.iloc[:, 0:-1]
        y = self.raw_data.iloc[:, -1]
        F,pvalues_f = f_classif(X,y)
        features_all = self.raw_data.columns.values.tolist()
​
        selector = SelectKBest(f_classif, k=F.shape[0]-(pvalues_f>k).sum())
        selector.fit_transform(X, y)
        select_name_index = selector.get_support(indices=True)
        select_name = []
        for i in select_name_index:
            select_name.append(features_all[i])
        return self.raw_data[[features_all[0]]+select_name+[features_all[-1]]]
​
    def mutual_info_classif_select(self,k):
        from sklearn.feature_selection import SelectKBest
        from sklearn.feature_selection import mutual_info_classif as MIC
        X = self.raw_data.iloc[:, 0:-1]
        y = self.raw_data.iloc[:, -1]
        result = MIC(X, y)
        features_all = self.raw_data.columns.values.tolist()
​
        selector = SelectKBest(MIC, k=result.shape[0] - sum(result <= k))
        selector.fit_transform(X, y)
        select_name_index = selector.get_support(indices=True)
        select_name = []
        for i in select_name_index:
            select_name.append(features_all[i])
        return self.raw_data[[features_all[0]] + select_name + [features_all[-1]]]
​
​
if __name__ == '__main__':
    data = pd.read_csv("E:\\pycharm_project\\house_price-master\\house_price-master\\iris_training.csv",index_col=0)
    data.reset_index(inplace=True)
    data.columns = ["a","b","c","d","class"]
    fs = featureSelect(data)
​
    print(fs.chi2_select(k = 2))

 部分参考:https://www.bilibili.com/video/BV1Ch411x7xB/?spm_id_from=333.337.search-card.all.click&vd_source=12e876d9321bec4269ae1f826cf80ada文章来源地址https://www.toymoban.com/news/detail-778734.html

到了这里,关于特征选择系列-01-过滤式详解-从原理到应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python | 基于LendingClub数据的分类预测研究Part01——问题重述+特征选择+算法对比

    欢迎交流学习~~ 专栏: 机器学习深度学习 本文利用Python对数据集进行数据分析,并用多种机器学习算法进行分类预测。 具体文章和数据集可以见我所发布的资源:发布的资源 问题一: 在数据集 lending-club 中筛选不同属性,确定至少三组对应训练集及测试集,选用同一种机器

    2023年04月08日
    浏览(40)
  • 机器学习基础 数据集、特征工程、特征预处理、特征选择 7.27

    无量纲化 1.标准化 2.归一化 信息数据化 1.特征二值化 2. Ont-hot编码 3.缺失数据补全 1.方差选择法 2.相关系数法

    2024年02月14日
    浏览(52)
  • 机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?

    在实际应用中,特征选择作为机器学习和数据挖掘领域的重要环节,对于提高模型性能和减少计算开销具有关键影响。特征选择是从原始特征集中选择最相关和最具区分力的特征子集,以提高模型的泛化能力和可解释性。 特征选择在实践中具有以下重要性: 提高模型性能:

    2024年02月12日
    浏览(38)
  • 【机器学习】特征降维 - 方差选择法VarianceThreshold

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 提取的特征当中,有一些相关(相似)的 「冗余特征」 ,这种特征是没有必

    2024年02月13日
    浏览(32)
  • python——机器学习:sklearn特征选择feature_selection

        特征选择是机器学习中很重要的一部分,构造并选取合适的特征,能极大的提高模型的表现。sklearn中feature_selection模块提供了一些特征选择方法。可以通过dir()的方法整体看一下。 0. 读取测试数据  1. 方差阈值法 VarianceThreshold         该方法筛选掉方差低于某个值的变量

    2024年02月19日
    浏览(49)
  • OpenAI开发系列(六):Completions模型的工作原理及应用实例(开发多轮对话机器人)

    授权声明: 本文基于九天Hector的原创课程资料创作,已获得其正式授权。 原课程出处:九天Hector的B站主页,感谢九天Hector为学习者带来的宝贵知识。 请尊重原创,转载或引用时,请标明来源。 全文共7000余字,预计阅读时间约15~30分钟 | 满满干货(附代码),建议收藏! 本文

    2024年02月13日
    浏览(35)
  • 【机器学习】包裹式特征选择之拉斯维加斯包装器(LVW)算法

    🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在机器学习的世界中,特征选择是一项至关重要的任务。它能够帮助我们筛选出与目标变量

    2024年03月14日
    浏览(50)
  • Scikit-Learn中的特征选择和特征提取详解

    机器学习在现代技术中扮演着越来越重要的角色。不论是在商业界还是科学领域,机器学习都被广泛地应用。在机器学习的过程中,我们需要从原始数据中提取出有用的特征,以便训练出好的模型。但是,如何选择最佳的特征是一个关键问题。在本文中,我们将探讨特征选择

    2024年02月10日
    浏览(65)
  • 机器学习图像特征提取—SIFT特征提取原理及代码实现

    目录 1 SIFT简介 2 SIFT原理及特点 2.1 SIFT算法特点 2.2 SIFT特征检测 3 SIFT代码实现        SIFT,即尺度不变特征变换(Scale-invariant feature transform,SIFT),是用于图像处理领域的一种描述。这种描述具有尺度不变性,可在图像中检测出关键点,是一种局部特征描述子。       SIF

    2024年02月06日
    浏览(39)
  • [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用

    文章首发于若绾 [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用,转载请注明出处。 K-means算法是一种非常流行的无监督学习方法,主要应用于聚类问题。本篇博客将详细介绍K-means算法的原理、优缺点及实际应用场景。 K-means算法的核心思想是将数据划分

    2024年02月08日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包