当前位置: 首页 > news >正文

专注湛江地区网站开发定制建设天津seo关键词排名优化

专注湛江地区网站开发定制建设,天津seo关键词排名优化,做直播导航网站,新做的网站如何目录 ​编辑特征工程的第一步#xff1a;理解业务 Filter过滤法 ​编辑方差过滤 ​编辑- 相关性过滤 - 卡方过滤 - F检验 - 互信息法 ​编辑嵌入法#xff08;Embedded#xff09; 包装法#xff08;Wrapper#xff09; 特征工程的第一步#xff1a;理解业务 如…目录 ​编辑特征工程的第一步理解业务 Filter过滤法 ​编辑方差过滤 ​编辑- 相关性过滤 - 卡方过滤 - F检验 - 互信息法 ​编辑嵌入法Embedded 包装法Wrapper 特征工程的第一步理解业务 如果特征比较少且容易理解我们可以自行判断特征的取舍如前面的泰坦尼克号数据集。但是在真正的数据应用领域比如金融医疗电商我们的数据不可能像泰坦尼克号数据的特征这样少这样明显。那如果遇见极端情况我们无法依赖对业务的理解来选择特征该怎么办呢我们有四种方法可以用来选择特征过滤法嵌入法包装法和降维算法 Filter过滤法 过滤方法通常用作预处理步骤特征选择完全独立于任何机器学习算法。它是根据各种统计检验中的分数以及相关性的各项指标来选择特征。 方差过滤 VarianceThreshold 比如一个特征本身的方差很小就表示样本在这个特征上基本没有差异可能特征中的大多数值都一样甚至整个特征的取值都相同那这个特征对于样本区分没有什么作用。 所以无论接下来的特征工程要做什么都要优先消除方差为0的特征。VarianceThreshold有重要参数threshold表示方差的阈值表示舍弃所有方差小于threshold的特征不填默认为0即删除所有的记录都相同的特征。 首先导入原函数 import pandas as pd data pd.read_csv(rF:\data\digit recognizor.csv) 原函数的shape为(42000, 784) 然后我们采用方差过滤 from sklearn.feature_selection import VarianceThreshold selector VarianceThreshold() #实例化不填参数默认方差为0 X_var0 selector.fit_transform(X)  #获取删除不合格特征之后的新特征矩阵 # 等同于 X_var0 selector.fit_transform(VarianceThreshold()) 方差过滤后函数的shape为(42000, 708) 至此方差为0的特征全都删除了。 如果你只想保留一半的特征值那么可以这样做 import numpy as np np.median(X.var().values)  #  这一步是取中位数 X_fsvar VarianceThreshold(np.median(X.var().values)).fit_transform(X) 此时的X_fsvar.shape为(42000, 392) 当然如果你想取前50个你可以先把values排个序然后阈值定义为第50的那个方差就可以啦。 此外当方差是二分类的时候特征的取值就是伯努利随机变量这些变量的方差可以计算为Var[X] p(1-p)p为二分类特征中的一类在这个特征中所占的概率。 可以定义二分类特征中某种分类占到了80%以上的时候删除特征。 X_bvar VarianceThreshold(.8 * (1 - .8)).fit_transform(X) 方差过滤对模型的影响 我们这样做了以后对模型效果会有怎样的影响呢在这里我为大家准备了KNN和随机森林分别在方差过滤前和方差过滤后运行的效果和运行时间的对比。 #KNN vs 随机森林在不同方差过滤效果下的对比 from sklearn.ensemble import RandomForestClassifier as RFC from sklearn.neighbors import KNeighborsClassifier as KNN from sklearn.model_selection import cross_val_score import numpy as np X data.iloc[:,1:] y data.iloc[:,0] X_fsvar VarianceThreshold(np.median(X.var().values)).fit_transform(X) #【TIME WARNING35mins 】# cross_val_score(KNN(),X,y,cv5).mean() #python中的魔法命令可以直接使用%%timeit来计算运行这个cell中的代码所需的时间 #为了计算所需的时间需要将这个cell中的代码运行很多次通常是7次后求平均值因此运行%%timeit的时间会 远远超过cell中的代码单独运行的时间 #【TIME WARNING4 hours】# %%timeit cross_val_score(KNN(),X,y,cv5).mean() #【TIME WARNING20 mins】# cross_val_score(KNN(),X_fsvar,y,cv5).mean() #【TIME WARNING2 hours】# %%timeit cross_val_score(KNN(),X,y,cv5).mean() cross_val_score(RFC(n_estimators10,random_state0),X,y,cv5).mean() Tsai 方差过滤前的KNN结果 #【TIME WARNING20 mins】# cross_val_score(KNN(),X_fsvar,y,cv5).mean() #【TIME WARNING2 hours】# %%timeit cross_val_score(KNN(),X,y,cv5).mean() 方差过滤后的KNN结果 准确率稍有提升但平均运行时间减少了10分钟特征选择过后算法的效率上升了1/3。 那随机森林又如何呢 随机森林方差过滤前 随机森林方差过滤后 首先可以观察到的是随机森林的准确率略逊于KNN但运行时间却连KNN的1%都不到只需要十几秒钟。其次方差过滤后随机森林的准确率也微弱上升但运行时间却几乎是没什么变化依然是11秒钟。 为什么随机森林运行如此之快为什么方差过滤对随机森林没很大的有影响这是由于两种算法的原理中涉及到的计算量不同。最近邻算法KNN单棵决策树支持向量机SVM神经网络回归算法都需要遍历特征或升维来进行运算所以他们本身的运算量就很大需要的时间就很长因此方差过滤这样的特征选择对他们来说就尤为重要。但对于不需要遍历特征的算法比如随机森林它随机选取特征进行分枝本身运算就非常快速因此特征选择对它来说效果平平。这其实很容易理解无论过滤法如何降低特征的数量随机森林也只会选取固定数量的特征来建模而最近邻算法就不同了特征越少距离计算的维度就越少模型明显会随着特征的减少变得轻量。因此过滤法的主要对象是需要遍历特征或升维的算法们而过滤法的主要目的是在维持算法表现的前提下帮助算法们降低计算成本。 总的来说 方差过滤的影响如下 - 相关性过滤 方差挑选完毕之后我们就要考虑下一个问题相关性了。我们希望选出与标签相关且有意义的特征因为这样的特征能够为我们提供大量信息。如果特征与标签无关那只会白白浪费我们的计算内存可能还会给模型带来噪音。在sklearn当中我们有三种常用的方法来评判特征与标签之间的相关性卡方F检验互信息。 - 卡方过滤 卡方过滤是专门针对离散型标签即分类问题的相关性过滤。卡方检验类feature_selection.chi2计算每个非负特征和标签之间的卡方统计量并依照卡方统计量由高到低为特征排名。再结合feature_selection.SelectKBest这个可以输入”评分标准“来选出前K个分数最高的特征的类我们可以借此除去最可能独立于标签与我们分类目的无关的特征。 另外如果卡方检验检测到某个特征中所有的值都相同会提示我们使用方差先进行方差过滤。并且刚才我们已经验证过当我们使用方差过滤筛选掉一半的特征后模型的表现时提升的。因此在这里我们使用threshold中位数时完成的方差过滤的数据来做卡方检验如果方差过滤后模型的表现反而降低了那我们就不会使用方差过滤后的数据而是使用原数据 from sklearn.ensemble import RandomForestClassifier as RFC from sklearn.model_selection import cross_val_score from sklearn.feature_selection import SelectKBest from sklearn.feature_selection import chi2  #卡方检验 #假设在这里我们知道我们需要300个特征 X_fschi SelectKBest(chi2,k300).fit_transform(X_fsvar,Y) cross_val_score(RFC(n_estimators10,random_state0),X_fschi,Y,cv5).mean() cross_val_score(RFC(n_estimators10,random_state0),X_fsvar,Y,cv5).mean() 我们发现之前取中位数作方法过滤的时候交叉检验打分为0.9388098166696807而经过了卡方过滤交叉检验的打分变成了0.9333098667649198降低了 这说明K300的设定有问题我们K值调的太小了。 该如何选取K值 我们可以采用学习曲线来跑一跑。 %matplotlib inline import matplotlib.pyplot as plt score [] for i in range(390,200,-10):     X_fschi SelectKBest(chi2,ki).fit_transform(X_fsvar,Y)     once cross_val_score(RFC(n_estimators10,random_state0),X_fschi,Y,cv5).mean()     score.append(once) plt.plot(range(390,200,-10),score) plt.show() 另外一种选取k值的方式看p值选k值 法看p值选择k。 卡方检验的本质是推测两组数据之间的差异其检验的原假设是”两组数据是相互独立的”。卡方检验返回卡方值和P值两个统计量其中卡方值很难界定有效的范围而p值我们一般使用0.01或0.05作为显著性水平即p值判断的边界具体我们可以这样来看 从特征工程的角度我们希望选取卡方值很大p值小于0.05的特征即和标签是相关联的特征。而调用SelectKBest之前我们可以直接从chi2实例化后的模型中获得各个特征所对应的卡方值和P值。 chivalue, pvalues_chi chi2(X_fsvar,Y) #k取多少我们想要消除所有p值大于设定值比如0.05或0.01的特征 k chivalue.shape[0] - (pvalues_chi 0.05).sum()   - F检验 F检验又称ANOVA方差齐性检验是用来捕捉每个特征与标签之间的线性关系的过滤方法。它即可以做回归也 可以做分类因此包含feature_selection.f_classifF检验分类和feature_selection.f_regressionF检验回归两个类。其中F检验分类用于标签是离散型变量的数据而F检验回归用于标签是连续型变量的数据。 F检验的本质是寻找两组数据之间的线性关系其原假设是”数据不存在显著的线性关系“。它返回F值和p值两个统计量。和卡方过滤一样我们希望选取p值小于0.05或0.01的特征这些特征与标签时显著线性相关的而p值大于0.05或0.01的特征则被我们认为是和标签没有显著线性关系的特征应该被删除。以F检验的分类为例我们继续在数字数据集上来进行特征选择 from sklearn.feature_selection import f_classif F, pvalues_f f_classif(X_fsvar,Y) k F.shape[0] - (pvalues_f 0.05).sum()   - 互信息法 互信息法是用来捕捉每个特征与标签之间的任意关系包括线性和非线性关系的过滤方法。和F检验相似它既可以做回归也可以做分类并且包含两个类feature_selection.mutual_info_classif互信息分类和 feature_selection.mutual_info_regression互信息回归。这两个类的用法和参数都和F检验一模一样不过互信息法比F检验更加强大F检验只能够找出线性关系而互信息法可以找出任意关系。 from sklearn.feature_selection import mutual_info_classif as MIC result MIC(X_fsvar,y) k result.shape[0] - sum(result 0) #X_fsmic SelectKBest(MIC, k填写具体的k).fit_transform(X_fsvar, y) #cross_val_score(RFC(n_estimators10,random_state0),X_fsmic,y,cv5).mean() 建议 先使用方差过滤然后使用互信息法来捕捉相关性 嵌入法Embedded 因此相比于过滤法**嵌入法的结果会更加精确到模型的效用本身对于提高模型效力有更好的效果**。并且由于考虑特征对模型的贡献因此无关的特征需要相关性过滤的特征和无区分度的特征需要方差过滤的特征都会因为缺乏对模型的贡献而被删除掉可谓是过滤法的进化版。 可以完全不过滤直接使用嵌入法。 feature_selection.SelectFromModel 前两个参数是最重要的。 from sklearn.feature_selection import SelectFromModel from sklearn.ensemble import RandomForestClassifier as RFC RFC_ RFC(n_estimators 10,random_state 0)  #随机森林的实例化 X_embedded SelectFromModel(RFC_, threshold0.005).fit_transform(X,Y) X_embedded.shape 结果为(42000, 47) 0.005这个阈值对780个特征的数据来说是非常高的这里模型的维度明显降低了。 同样的我们也可以通过画学习曲线来找最佳阈值。 import numpy as np import matplotlib.pyplot as plt RFC_.fit(X,Y).feature_importances_ threshold np.linspace(0,(RFC_.fit(X,Y).feature_importances_).max(),20) score [] for i in threshold:     X_embedded SelectFromModel(RFC_,thresholdi).fit_transform(X,Y)     once cross_val_score(RFC_,X_embedded,Y,cv5).mean()     score.append(once) plt.plot(threshold,score) plt.show() 代码结果如下 随着阈值越来越高模型的效果逐渐变差被删除的特征越来越多信息损失也逐渐变大。但是在0.00134之前模型的效果都可以维持在0.93以上因此我们可以从中挑选一个数值来验证一下模型的效果。 X_embedded SelectFromModel(RFC_,threshold 0.00067).fit_transform(X,Y) X_embedded.shape cross_val_score(RFC_,X_embedded,Y,cv5).mean() 代码结果为 (42000, 324) 0.939905083368037 可以看出特征个数瞬间缩小到324多这比我们在方差过滤的时候选择中位数过滤出来的结果392列要小并且交叉验证分数0.9399高于方差过滤后的结果0.9388这是由于嵌入法比方差过滤更具体到模型的表现的缘故换一个算法使用同样的阈值效果可能就没有这么好了。 和其他调参一样我们可以在第一条学习曲线后选定一个范围使用细化的学习曲线来找到最佳值 score2 [] for i in np.linspace(0,0.00134,20):     X_embedded SelectFromModel(RFC_, thresholdi).fit_transform(X,Y)     once cross_val_score(RFC_, X_embedded, Y, cv5).mean()     score2.append(once) plt.figure(figsize[20,5]) plt.plot(np.linspace(0,0.00134,20),score2) plt.xticks(np.linspace(0,0.00134,20)) plt.show()   X_embedded SelectFromModel(RFC_,threshold0.000564).fit_transform(X,Y) X_embedded.shape cross_val_score(RFC_,X_embedded,Y,cv10).mean() 我们可能已经找到了现有模型的最佳结果。 (42000, 340) 0.9414774325210074 如果我们调整一下随机森林的参数呢 cross_val_score(RFC(n_estimators100,random_state0),X_embedded,Y,cv5).mean() 0.9639525817795566 得出的特征数目依然小于方差筛选并且模型的表现也比没有筛选之前更高已经完全可以和计算一次半小时的KNN相匹敌KNN的准确率是96.58%接下来再对随机森林进行调参准确率应该还可以再升高不少。可见在嵌入法下我们很容易就能够实现特征选择的目标减少计算量提升模型表现。因此比起要思考很多统计量的过滤法来说嵌入法可能是更有效的一种方法。然而在算法本身很复杂的时候过滤法的计算远远比嵌入法要快所以大型数据中我们还是会优先考虑过滤法。 包装法Wrapper 包装法在初始特征集上训练评估器并且通过coef_属性或通过feature_importances_属性获得每个特征的重要性。然后从当前的一组特征中修剪最不重要的特征。在修剪的集合上递归地重复该过程直到最终到达所需数量的要选择的特征。区别于过滤法和嵌入法的一次训练解决所有问题包装法要使用特征子集进行多次训练因此它所需要的计算成本是最高的。 最典型的目标函数是递归特征消除法Recursive feature elimination, 简写为RFE。它是一种贪婪的优化算法旨在找到性能最佳的特征子集。 它反复创建模型并在每次迭代时保留最佳特征或剔除最差特征下一次迭代时它会使用上一次建模中没有被选中的特征来构建下一个模型直到所有特征都耗尽为止。 然后它根据自己保留或剔除特征的顺序来对特征进行排名最终选出一个最佳子集。包装法的效果是所有特征选择方法中最利于提升模型表现的它可以使用很少的特征达到很优秀的效果。除此之外在特征数目相同时包装法和嵌入法的效果能够匹敌不过它比嵌入法算得更见缓慢所以也不适用于太大型的数据。相比之下包装法是最能保证模型效果的特征选择方法。 feature_selection.RFE class sklearn.feature_selection.RFE(estimator,n_features_to_selectNone,step1,verbose0) from sklearn.feature_selection import RFE RFC_ RFC(n_estimators10, random_state0) selector RFE(RFC_, n_features_to_select340, step50).fit(X,Y)  #刚刚用嵌入法选出来的340 selector.support_.sum()  #support返回的是boolean矩阵 selector.ranking_ X_wrapper selector.transform(X) cross_val_score(RFC_,X_wrapper,Y,cv5).mean() 0.9389522459432109 接下来对包装法画学习曲线。 score [] for i in range(1,751,50):     X_wrapper RFE(RFC_, n_features_to_selecti, step50).fit_transform(X,Y)     once cross_val_score(RFC_, X_wrapper, Y, cv5).mean()     score.append(once) plt.figure(figsize[20,5]) plt.plot(range(1,751,50),score) plt.xticks(range(1,751,50)) plt.show() 明显能够看出在包装法下面应用50个特征时模型的表现就已经达到了90%以上比嵌入法和过滤法都高效很多。我们可以放大图像寻找模型变得非常稳定的点来画进一步的学习曲线就像我们在嵌入法中做的那样。如果我们此时追求的是最大化降低模型的运行时间我们甚至可以直接选择50作为特征的数目这是一个在缩减了94%的特征的基础上还能保证模型表现在90%以上的特征组合不可谓不高效。 同时我们提到过在特征数目相同时包装法能够在效果上匹敌嵌入法。试试看如果我们也使用340作为特征数目运行一下可以感受一下包装法和嵌入法哪一个的速度更加快。由于包装法效果和嵌入法相差不多在更小的范围内使用学习曲线我们也可以将包装法的效果调得很好大家可以去试试看。 特征工程总结 当数据量很大的时候优先使用方差过滤和互信息法调整再上其他特征选择方法。 使用逻辑回归时优先使用嵌入法。 使用支持向量机时优先使用包装法。 原文链接https://blog.csdn.net/xlperpetual/article/details/103402737 觉得这篇文章写的很好然而浏览量却又很少想把他带到大家的视野当中更多人能够学习到。
http://www.hkea.cn/news/14274414/

相关文章:

  • 胶州住房和城乡建设厅网站wordpress自适应吸附菜单
  • wordpress qq主题seo软文外包公司
  • asp个人网站建设虫虫 wordpress 群发
  • 商城网站网络公司淮南 网站建设 有限公司
  • 中国最好的建站公司怎样开发一个管理系统
  • wordpress视频网站关键词搜索优化
  • 网站建设项目策划书琼海做网站公司
  • 常州微信网站建设服务亚马逊网上购物商城
  • 乐都网站建设企业域名注册哪里最便宜
  • 网上书店网站开发代码做理财网站 程序员 违法吗
  • 医疗知识普及网站开发做网站该注意哪些基本要素
  • 手机网站设计占工程比重四川网站备案咨询网
  • 学校网站建设 效果如何在阿里云wordpress
  • 广东汽车品牌网站建设深圳正规网站建设服务
  • 做网站怎样调用支付宝接口做项目搭建网站 构建数据库
  • 网站推广初期目标化妆品网站建设报告
  • 网站建设绩效考评电影网站制作教程
  • 建设网站一般多钱网站建设施工方案
  • 网站直播软件开发桂林漓江在哪个县哪个区
  • 哈尔滨网站建设设计在哪几个网站里做自媒体赚钱
  • 组服务器做网站上海网站制作公司介绍
  • php网站数据库修改装潢设计多少钱
  • 贵州建设厅考试网站准考证下载登陆插件wordpress
  • 企业网站建设的步骤静海网站建设公司
  • 网站实施过程电子商务网站开发技术有哪些
  • 湖北省建设局网站首页龙岩新罗区
  • 永州网站建设收费标准环境文化建设方案网站
  • flash 网站源码wordpress主页教程
  • 金牛区网站建设山西省住房和城乡建设厅网站报名
  • 大连权威发布网站创建网站的费用