专栏首页小小挖掘机一文详解数据归约的四种途径

一文详解数据归约的四种途径

数据归约是在保证数据信息量的基础上,尽可能精简数据量。筛选和降维是数据归约的重要手段,尤其在数据量大且维度高的情况下,可以有效地节约存储空间和计算时间。反之,当数据量不多,或者现有存储和计算资源能满足分析和预测时不一定需要降维,因为任何的归约都会造成数据损失。

除了减少数据量,特征筛选的另一个好处是去掉干扰特征,有时候加入了新特征后,在训练集上的准确率提高了,而在测试集上的准确率却降低了,这种情况在小数据集中最为常见,主要由于无效特征的干扰使模型对训练集过拟合,反而使模型效果变差。可见,特征并不是越多越好。总之,降维不是数据预处理的必经过程,是否降维主要取决于数据量,以及降维后对预测效果的影响。本文章主要介绍数据归约的四种途径。

经验筛选特征

根据经验筛选特征是利用行业专家的经验筛选有效特征,去掉无关特征,或者在更早期数据采集阶段在特征重要性和广度之间取舍。

有一次笔者在处理医疗检验结果时,获取了五种检验单,共七十多个指标,而进一步的数据分析需要人工整理历史数据,指标太多使工作量倍增。于是通过前期提取数据训练GBDT模型,选取了模型输出的特征贡献度最高的前20个特征,再代入模型训练,但训练后效果变差很多。之后与医生讨论该问题时,医生从中筛选了不到10个重要特征,训练之后,效果只略有下降,最终使用了医生的经验特征方案。

在特征较多的情况下,很多时候无效特征或者相关特征干扰了模型,如果使用一些专家经验,能节约大量的算力和时间成本,特征选择是人类经验和算法结合的重点之一。

该方法的效果主要取决于开发人员和专业人士对业务的理解程度。

统计学方法筛选特征

利用统计学方法筛选特征包括:去除缺失数据较多的特征,去除取值无差异的特征,以及通过数据分析,保留与目标变量相关性强的连续特征,有统计显著性的分类特征。

筛选特征时使用最多的统计方法是假设检验,其核心思想是对比每个自变量x的不同取值时因变量y的差异。对于自变量和因变量同为连继性特征的情况,一般分析其是否为线性相关,即具有同增同减的性质,该方法也用于去掉相关性强的自变量,若两个自变量功能相似,则去掉其中一个。

对于自变量或者因变量是离散值的情况,可用离散值分类,统计每一类别的数据是否具有统计性差异,例如:当自变量为性别、因变量为身高时,可对比男性身高与女性身高的差异,对比其均值是最简单的方法,还需要考虑不同类别实例个数的差异,以及不同类别的分布差异,是否为高斯分布,方差等等,具体方法将在第七章数据分析中详细介绍。

统计分析可通过Python三方库提供的方法实现,比较简单快捷,可以一次性处理多个特征。但也有一些问题,例如在相关性分析中不能识别非线性相关,有可能去掉有意义的特征。

模型筛选特征

大多数模型在训练之后都会反馈特征优先级feature_importance,可以通过保留其重要性最高的前N个特征,去掉其它特征的方法进行数据筛选,但由于算法不同,模型计算出的特征重要性也不尽相同,筛选之后需要再代入模型,在保证去掉的特征不影响预测效果的提下做筛选。当数据量较大时,可以先选择一部分数据代入模型,进行特征选择。

另一种利用模型筛选特征的方法是随机选取特征或者随机去除特征,不断尝试,以近乎穷举的方式做特征筛选,该方法一般用于小数据集,且算力足够的情况下。

本例使用了Sklearn自带的鸢尾花数据集,代入决策树模型,训练数据之后,通过模型中的feature_importance_查看各个特征对应权重。

01   from sklearn.datasetsimport load_iris
02   from sklearn import tree
03  
04   iris = load_iris()
05   clf =tree.DecisionTreeClassifier()
06   clf = clf.fit(iris.data,iris.target)
07   print(clf.feature_importances_)
08  
09   # 运行结果
10   # [0.02666667 0.         0.05072262 0.92261071]

从运行结果可以看出,第四维特征重要性最高,第二维特征对预测因变量iris.target的重要性为0。

数学方法降维

使用PCA和SVD等数学方法也是降维的常用手段,它的主要思想是将相关性强的多个特征合成一个特征,在损失信息较少的情况下,有效减少了维度,主要用于降低数据量。使用该方法的问题在于,转换后的特征与原特征意义不同,损失了原特征的业务含义。

本例中使用Sklearn自带的PCA工具实现PCA降维,数据为Sklearn自带的鸢尾花数据集,利用Matplotlib和Seaborn工具绘图。

01   fromsklearn.decomposition import PCA
02   from sklearn importdatasets
03   import pandas as pd
04   import numpy as np
05   import matplotlib.pyplotas plt
06   import seaborn as sns
07   %matplotlib inline # 仅在 jupyter notebook 中使用

鸢尾花数据集包含四维自变量,使用DataFrame的corr函数生成特征间的皮尔森相关系数矩阵,然后使用Seaborn对该矩阵做热力图。

01   iris =datasets.load_iris()
02   data =pd.DataFrame(iris.data, columns=['SpealLen', 'SpealWid',
03                                'PetalLen','PetalWid'])
04   mat = data.corr()
05   sns.heatmap(mat,annot=True, vmax=1, vmin=-1, xticklabels= True,
06               yticklabels= True, square=True,cmap="gray")

热力图结果如图1所示。

图1 鸢尾花特征相关系数热力图

相关系数取值范围在[-1,1]之间,趋近于1为正相关,趋近-1为负相关,趋近零为非线性相关,可以看出其中除了Speal Width以外,其它三个特征均呈现较强的正相关,因此,将四维变量降成二维。

01   pca = PCA(n_components=2)
02   data1 =pca.fit_transform(data)
03   print(data1.shape)
04  print(pca.explained_variance_ratio_,
05         pca.explained_variance_ratio_.sum())
06   plt.scatter(data1[:,0],data1[:,1], c = np.array(iris.target),
07               cmap=plt.cm.copper)

通过PCA方法降维后,从data1.shape可以看到原来150记录,4特征数据转换成为150记录,2特征,explained_variance_ratio_显示降维后各维成份的方差值占总方差值的比例,该占比越大,该成份越重要,explained_variance_ratio_.sum累加了降维后所有成份之和,它越趋近1,说明降维带来的数据损失越小。用两维数据作图,颜色标出其分类,可以看到降维后的数据对因变量iris.target成功分类,如图2所示。

图2 降维后的两维数据对因变量分类

当数据维度很多,不能确定降成多少维度合适时,可将n_components的值设置为0-1之间,程序将自动选择维度,使得降维后各成份的explained_variance_ratio_之和不低于该比例。将n_component设置为1以上的值,则是设定转换后的维度。

本文选自电子工业出版社出版的《python大数据与机器学习》一书,略有改动。经出版社授权刊登于此。

本文分享自微信公众号 - 小小挖掘机(wAIsjwj),作者:谢彦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 汽车之家推荐系统排序算法迭代之路

    导读:汽车之家的推荐系统紧随前沿技术,在支持内部多个推荐场景的同时,对外也有了一定的输出。未来我们期望汽车之家的推荐系统不只是前沿技术的应用者,更是推动者和创新...

    石晓文
  • 【AI in 美团】深度学习在美团搜索广告排序的应用实践

    AI(人工智能)技术已经广泛应用于美团的众多业务,从美团App到大众点评App,从外卖到打车出行,从旅游到婚庆亲子,美团数百名最优秀的算法工程师正致力于将AI技...

    石晓文
  • 深入浅出排序学习:写给程序员的算法系统开发实践

    搜索、推荐和广告等这些AI主流应用背后的一个核心技术,是排序学习(Learning to Rank)。本文从系统开发工程师的角度做了非常系统通俗的解读,主要概念...

    石晓文
  • 深度了解特征工程

    Feature:An attribute useful for your modeling task. Feature Selection:From many ...

    马上科普尚尚
  • 如何在Kaggle比赛上击败98%的对手?你需要一份七步秘笈

    一位叫做Abhay Pawar的少年,在2600多支队伍参加的Instacart Market Basket Analysis比赛上,击败了98%的对手。

    量子位
  • 特征工程之特征选择

        特征工程是数据分析中最耗时间和精力的一部分工作,它不像算法和模型那样是确定的步骤,更多是工程上的经验和权衡。因此没有统一的方法。这里只是对一些常用的方法...

    刘建平Pinard
  • 不想累死就来看看 : 特征工程之特征选择

    地址:https://www.cnblogs.com/pinard/p/9032759.html

    机器学习算法工程师
  • 【技术分享】推荐系统中的自动化特征工程

    在机器学习的各个子领域中,特征工程都扮演着重要的角色。业界有这么一句话,数据和特征决定了机器学习算法的上限,而模型、算法的选择和优化只是在不断逼近这个上限。通过...

    腾讯智能钛AI开发者
  • 美团网内部分享:机器学习中的数据清洗与特征处理实践

    用户1737318
  • 【学习】机器学习中的数据清洗与特征处理综述

    背景 随着美团交易规模的逐步增大,积累下来的业务数据和交易数据越来越多,这些数据是美团做为一个团购平台最宝贵的财富。通过对这些数据的分析和挖掘,不仅能给美团业务...

    小莹莹

扫码关注云+社区

领取腾讯云代金券