精华内容
下载资源
问答
  • 用xgboost模型对特征重要性进行排序

    万次阅读 多人点赞 2018-08-12 21:08:21
    xgboost对预测模型特征重要性排序的原理(即为什么xgboost可以对预测模型特征重要性进行排序)。 如何绘制xgboost模型得到的特征重要性条形图。 如何根据xgboost模型得到的特征重要性,在scikit-learn进行特征选择...

    用xgboost模型对特征重要性进行排序

    在这篇文章中,你将会学习到:

    1. xgboost对预测模型特征重要性排序的原理(即为什么xgboost可以对预测模型特征重要性进行排序)。
    2. 如何绘制xgboost模型得到的特征重要性条形图。
    3. 如何根据xgboost模型得到的特征重要性,在scikit-learn进行特征选择。

     

    梯度提升算法是如何计算特征重要性的?

    使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。一般来说,重要性分数,衡量了特征在模型中的提升决策树构建中价值。一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。

    属性重要性是通过对数据集中的每个属性进行计算,并进行排序得到。在单个决策书中通过每个属性分裂点改进性能度量的量来计算属性重要性,由节点负责加权和记录次数。也就说一个属性对分裂点改进性能度量越大(越靠近根节点),权值越大;被越多提升树所选择,属性越重要。性能度量可以是选择分裂节点的Gini纯度,也可以是其他度量函数。

    最终将一个属性在所有提升树中的结果进行加权求和后然后平均,得到重要性得分。

     

    绘制特征重要性

    一个已训练的xgboost模型能够自动计算特征重要性,这些重要性得分可以通过成员变量feature_importances_得到。可以通过如下命令打印:

    print(model.feature_importances_)

    我们可以直接在条形图上绘制这些分数,以获得数据集中每个特征的相对重要性的直观显示。例如:

    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()

    我们可以通过在the Pima Indians onset of diabetes 数据集上训练XGBOOST模型来演示,并从计算的特征重要性中绘制条形图。

    # plot feature importance manually
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from matplotlib import pyplot
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    y = dataset[:,8]
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # feature importance
    print(model.feature_importances_)
    # plot
    pyplot.bar(range(len(model.feature_importances_)), model.feature_importances_)
    pyplot.show()

    运行这个示例,首先的输出特征重要性分数:

    [0.089701, 0.17109634, 0.08139535, 0.04651163, 0.10465116, 0.2026578, 0.1627907, 0.14119601]

    相对重要性条形图:

    这种绘制的缺点在于,只显示了特征重要性而没有排序,可以在绘制之前对特征重要性得分进行排序。

    通过内建的绘制函数进行特征重要性得分排序后的绘制,这个函数就是plot_importance()示例如下:

    # plot feature importance using built-in function
    from numpy import loadtxt
    from xgboost import XGBClassifier
    from xgboost import plot_importance
    from matplotlib import pyplot
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    y = dataset[:,8]
    # fit model no training data
    model = XGBClassifier()
    model.fit(X, y)
    # plot feature importance
    plot_importance(model)
    pyplot.show()

    运行示例得到条形图:

    根据其在输入数组中的索引,特征被自动命名为f0-f7。在问题描述中手动的将这些索引映射到名称,我们可以看到,F5(身体质量指数)具有最高的重要性,F3(皮肤折叠厚度)具有最低的重要性。

     

    根据xgboost特征重要性得分进行特征选择

    特征重要性得分,可以用于在scikit-learn中进行特征选择。通过SelectFromModel类实现,该类采用模型并将数据集转换为具有选定特征的子集。这个类可以采取预先训练的模型,例如在整个数据集上训练的模型。然后,它可以阈值来决定选择哪些特征。当在SelectFromModel实例上调用transform()方法时,该阈值被用于在训练集和测试集上一致性选择相同特征。

    在下面的示例中,我们首先在训练集上训练xgboost模型,然后在测试上评估。使用从训练数据集计算的特征重要性,然后,将模型封装在一个SelectFromModel实例中。我们使用这个来选择训练集上的特征,用所选择的特征子集训练模型,然后在相同的特征方案下对测试集进行评估。

    示例:

    # select features using threshold
    selection = SelectFromModel(model, threshold=thresh, prefit=True)
    select_X_train = selection.transform(X_train)
    # train model
    selection_model = XGBClassifier()
    selection_model.fit(select_X_train, y_train)
    # eval model
    select_X_test = selection.transform(X_test)
    y_pred = selection_model.predict(select_X_test)

    我们可以通过测试多个阈值,来从特征重要性中选择特征。具体而言,每个输入变量的特征重要性,本质上允许我们通过重要性来测试每个特征子集。

    完整示例如下:

    # use feature importance for feature selection
    from numpy import loadtxt
    from numpy import sort
    from xgboost import XGBClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    from sklearn.feature_selection import SelectFromModel
    # load data
    dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
    # split data into X and y
    X = dataset[:,0:8]
    Y = dataset[:,8]
    # split data into train and test sets
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.33, random_state=7)
    # fit model on all training data
    model = XGBClassifier()
    model.fit(X_train, y_train)
    # make predictions for test data and evaluate
    y_pred = model.predict(X_test)
    predictions = [round(value) for value in y_pred]
    accuracy = accuracy_score(y_test, predictions)
    print("Accuracy: %.2f%%" % (accuracy * 100.0))
    # Fit model using each importance as a threshold
    thresholds = sort(model.feature_importances_)
    for thresh in thresholds:
    	# select features using threshold
    	selection = SelectFromModel(model, threshold=thresh, prefit=True)
    	select_X_train = selection.transform(X_train)
    	# train model
    	selection_model = XGBClassifier()
    	selection_model.fit(select_X_train, y_train)
    	# eval model
    	select_X_test = selection.transform(X_test)
    	y_pred = selection_model.predict(select_X_test)
    	predictions = [round(value) for value in y_pred]
    	accuracy = accuracy_score(y_test, predictions)
    	print("Thresh=%.3f, n=%d, Accuracy: %.2f%%" % (thresh, select_X_train.shape[1], accuracy*100.0))

    运行示例,得到输出:

    Accuracy: 77.95%
    Thresh=0.071, n=8, Accuracy: 77.95%
    Thresh=0.073, n=7, Accuracy: 76.38%
    Thresh=0.084, n=6, Accuracy: 77.56%
    Thresh=0.090, n=5, Accuracy: 76.38%
    Thresh=0.128, n=4, Accuracy: 76.38%
    Thresh=0.160, n=3, Accuracy: 74.80%
    Thresh=0.186, n=2, Accuracy: 71.65%
    Thresh=0.208, n=1, Accuracy: 63.78%

    我们可以看到,模型的性能通常随着所选择的特征的数量而减少。在这一问题上,可以对测试集准确率和模型复杂度做一个权衡,例如选择4个特征,接受准确率从77.95%降到76.38%。这可能是对这样一个小数据集的清洗,但对于更大的数据集和使用交叉验证作为模型评估方案可能是更有用的策略。

    展开全文
  • 软件测试重要性

    万次阅读 2015-10-08 11:12:03
    它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠保证具有极其重要的意义。在目前形式化方法和程序正确证明技术还无望成为实用方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠保证的...

      软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。软件工程的总目标是充分利用有限的人力和物力资源,高效率、高质量地完成软件开发项目。不足的测试势必使软件带着一些未揭露的隐藏错误投入运行,这将意味着更大的危险让用户承担。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。E.W.Dijkstra的一句名言说明了这一道理:“程序测试只能表明错误的存在,而不能表明错误不存在。”可见,测试是为了使软件中蕴涵的缺陷低于某一特定值,使产出、投入比达到最大。

      在软件业较发达的国家。软件测试不仅成为软件开发的一个有机组成部分,而且在软件开发的系统工程中占据着相当大的比重。以美国的软件开发和生产的平均资金投入为例,通常是:“需求分析”和“规划确定”各占百分之三,“设计”占百分之五,设计占百分之五,编程占百分之七,测试占百分之十五,投产和维护占百分之六七十。测试在。软件开发中的地位不言而喻。 软件测试工程师和软件卡发工程师就像两兄弟,缺一不可,国内开发工程师招聘还是比较容易的,但在做一些大型项目时需要大量软件测试人员,因为目前高校里没有专业的专业,只能招聘后在进行培训,这就大大增加了企业的成本,所以企业还是希望有一批专业培训的人员能直接上岗。 软件测试是一个系列过程活动,贯穿于软件项目的整个生命过程,很多软件项目的开发还停留在“作坊式”阶段,项目的成功往往靠个别程序员决定。 但随着市场对软件质量的的要求不断提高,软件测试将变得越来越重要,相应的软件测试工程师的地位和待遇将处于“双高”地位,而且做开发并不能做好测试,因为他们不懂得测试的理念而且不具备测试的经验。 目前国内软件测试人才缺口高达20万,已成为我国软件产业发展的瓶颈之一。“软件测试人才需求量的加大,是由于近年来我国软件行业的产业升级所决定的。

    展开全文
  • 随机森林的特征重要性原理

    万次阅读 2018-05-25 17:04:39
    答:在随机森林中某个特征X的重要性的计算方法如下:1:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.2: 随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以...

    1、随机森林得到的feature importance的原理?

    答:

    在随机森林中某个特征X的重要性的计算方法如下:

    1:对于随机森林中的每一颗决策树,使用相应的OOB(袋外数据)数据来计算它的袋外数据误差,记为errOOB1.

    2:  随机地对袋外数据OOB所有样本的特征X加入噪声干扰(就可以随机的改变样本在特征X处的值),再次计算它的袋外数据误差,记为errOOB2.

    3:假设随机森林中有Ntree棵树,那么对于特征X的重要性=∑(errOOB2-errOOB1)/Ntree,之所以可以用这个表达式来作为相应特征的重要性的度量值是因为:若给某个特征随机加入噪声之后,袋外的准确率大幅度降低,则说明这个特征对于样本的分类结果影响很大,也就是说它的重要程度比较高。


    参考于:http://www.cnblogs.com/justcxtoworld/p/3447231.html#3975497

    展开全文
  • 数据分析的重要性

    万次阅读 2019-06-04 17:42:49
    目前许多企业在决策时仍沿用以往的个人经验,没有用数据说话,这在实际决策运行时会出现很多问题。在数据分析行业发展成熟的...数据分析的重要性主要体现在哪些方面呢? (一) 数据分析工作是完整地、正确地反映客观...

    目前许多企业在决策时仍沿用以往的个人经验,没有用数据说话,这在实际决策运行时会出现很多问题。在数据分析行业发展成熟的国家,90%的市场决策和经营决策都是通过数据分析研究确定的。用数据说话,重视定量分析,也逐渐成为科学研究、企业经营、政府决策等过程着重考虑的问题。越来越多的人们意识到数据分析对经济发展的重要意义。

    数据分析的重要性主要体现在哪些方面呢?

    (一) 数据分析工作是完整地、正确地反映客观情况

    为了完整地、正确地反映客观情况的全貌,就必须在实事求是的原则的指导下,经过对大量的、丰富的统计资料和数据进行加工制作和分析研究,才能做出科学的判断,并编写成数据分析报告。这比一般的报表数据更集中、更系统、更全面地反映客观实际,也便于人们的阅读、理解和利用。

    (二) 数据分析工作是发挥监督的重要手段

    数据分析部门掌握有大量丰富的统计数据及资料,比较全面、准确地掌握和了解社会及该公司经济运行的状态和发展变化情况,对数据的口径范围和来龙去脉熟悉,因而能较好地承担监督检查和企业运营相关部门的方针政策的贯彻执行情况、发展规划和生产经营计划的完成情况、以及生产经营责任制和各项重要经济指标的完成情况等任务。
      
    (三) 数据分析工作是实现管理科学化和统计参与决策的有效手段

    数据分析部门利用数据资料丰富的优势,开展分析研究,透过事物的表面现象深入到事物的内在本质,由感性认识阶段上升到理性认识阶段,实现认识运动的质的飞跃,从而提示事物的现状及其内在联系和发展规律,不仅有利于领导和有关部门客观全面地认识该公司经济活动的历史、现状及其发展趋势,促进管理水平的提高,而且有利于制定正确的决策和计划,以充分发挥数据分析促进管理、参与决策的重要作用。

    (四) 数据分析工作有利于数据资料的深度开发利用

    进行数据分析的目的都是为了可以给企业带来更多的商业价值以及帮助企业规避或者减少风险带来的损失,提高数据质量,为企业解决问题。

    (五) 数据分析工作有利于提高数据分析人员的素质

    进行数据处理的过程是一个复杂的过程,这个环节当中,从数据的收集到数据筛选、数据分析都有可能产生错误,因此我们需要在各个环节中对错误的数据进行甄别,特别是数据处理的阶段,可以很好的对数据进行一个清理的过程。当然不仅仅是数据处理的过程,每一个环节都需要相关的技术人员通过一定合理性分析找出质量不高的数据,或者进行错误数据的判定,它要求数据分析人员不仅需要有数据分析基础知识,还要有一定的经济理论和政策水平;不仅需要了解数据分析的方法,还要了解数据分析的来龙去脉,了解有关的经济技术状况;不仅要有一定的文化水平和分析归纳能力,还要具有一定的写作能力和技巧。这不仅仅需要的是技术,也是对数据分析人员素质的考验。

    展开全文
  • 节点重要性和相似性

    万次阅读 2017-03-06 00:22:36
    1、当考虑有向网络中节点重要性时,一种简单的方法是把有向网络视为无向网络,从而可以直接利用无向网络中节点的重要性指标。另外,有向网络中边的方向对于节点重要性往往是非常重要的。 2、搜索引擎领域已经成为...
  •   一个企业的失败,终究是人的失败!说什么市场饱和,国家政策问题,都不过是庸人...  鄙人从一个资深的码农走到今天的团队Leader,自认为有资格讨论Leader对团队的重要性,以及对整个公司发展的影响。 ...
  • 项目前期准备的重要性

    万次阅读 2017-06-29 10:08:30
    今天读《代码大全》的第3.1节(前期准备的重要性)后,感觉到项目的前期准备非常重要,但是仍然有很多管理者不重视项目的前期准备,往往上来就要求赶紧开发功能,速度出Demo。项目开发中总会有这种情况:项目开始一...
  • XGBoost 输出特征重要性以及筛选特征

    千次阅读 2018-08-26 10:27:00
    1.输出XGBoost特征的重要性 from matplotlib import pyplot pyplot.bar(range(len(model_XGB.feature_importances_)), model_XGB.feature_importances_) pyplot.show() XGBoost 特征重要性绘图 也可以使用...
  • 特征选择方法中,有一种方法是利用随机森林,进行特征的重要性度量,选择重要性较高的特征。下面对如何计算重要性进行说明。 1 特征重要性​度量 计算某个特征X的重要性时,具体步骤如下: 1)对每一...
  • 随机森林对特征重要性排序

    万次阅读 多人点赞 2018-05-18 17:00:47
    two methods: 1.Mean decrease impurity 大概是对于每颗树,按照impurity(gini /entropy /information gain)给特征排序,然后...影响小说明这个特征不重要,反之重要 具体步骤如下: 在随机森林中某个特征X...
  • 随机森林能够度量每个特征的重要性,我们可以依据这个重要性指标进而选择最重要的特征。sklearn中已经实现了用随机森林评估特征重要性,在训练好随机森林模型后,直接调用feature_importances属性就能得到每个特征的...
  • xgb_trained_model = xgb.train(params, train_xgb_split, 500, watch_list, early_stopping_rounds=50, verbose_eval=10) importance = xgb_trained_model.get_fscore() temp1 = [] temp2 = [] ...
  • lightgbm 特征重要性选择 / 看所有特征哪个重要

    万次阅读 热门讨论 2018-06-05 11:43:13
    print(pd.DataFrame({ 'column': feature_names, 'importance': lgb_trained_model.feature_importance(), }).sort_values(by='importance'))
  • 【算法】关于xgboost特征重要性的评估

    万次阅读 多人点赞 2019-05-29 08:21:59
    xgboost很好用,但是很多同学对它特征重要性评估的原理不太明白。今天简单梳理下: 特征重要性函数 调用xgb.feature_importances_函数,即可求出各个特种的重要性,这是我们的目标。 现在就来探究一下,这个feature_...
  • 利用随机森林对特征重要性进行评估

    万次阅读 多人点赞 2018-08-24 09:30:53
    我们将变量重要性评分(variable importance measures)用VIMVIM来表示,将Gini指数用GIGI来表示,假设有mm个特征X1,X2,X3,...,XcX1,X2,X3,...,Xc,现在要计算出每个特征XjXj的Gini指数评分VIM(Gini)jVIMj...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,933,251
精华内容 1,173,300
关键字:

性的重要性是什么