python重要性_如何⽤Python计算特征重要性?
特征重要性评分是⼀种为输⼊特征评分的⼿段,其依据是输⼊特征在预测⽬标变量过程中的有⽤程度。
特征重要性有许多类型和来源,尽管有许多⽐较常见,⽐如说统计相关性得分,线性模型的部分系数,基于决策树的特征重要性和经过随机排序得到重要性得分。
特征重要性在预测建模项⽬中起着重要作⽤,包括提供对数据、模型的见解,以及如何降维和选择特征,从⽽提⾼预测模型的的效率和有效性。
在本教程中,我将会阐述⽤于python机器学习的特征重要性。完成本教程后,你将会知道:特征重要性在预测建模中的作⽤
如何计算和查看来⾃线性模型和决策树的特征重要性
如何计算和查看随机排序重要性得分random在python中的意思
现在让我们开始吧.
教程概述
本教程分为五部分,分别是:
1.特征重要性
2.准备
2.1. 检查Scikit-Learn版本
2.2. 创建测试数据集
3.特征重要性系数
3.1. 基于线性回归系数的特征重要性
3.2. 基于Logistic回归的特征重要性
4.基于决策树的特征重要性
4.1. 基于CART的特征重要性
4.2. 基于随机森林的特征重要性
4.3. 基于XGBoost的特征重要性
5.随机排序特征重要性
5.1. 随机排序(回归)中的特征重要性
5.2. 随机排序(分类)中的特征重要性
1.特征重要性
特征重要性是⼀种为预测模型的输⼊特征评分的⽅法,该⽅法揭⽰了进⾏预测时每个特征的相对重要性。
可以为涉及预测数值的问题(称为回归)和涉及预测类别标签的问题(称为分类)计算特征重要性得分。
这些得分⾮常有⽤,可⽤于预测建模问题中的多种情况,例如:更好地理解数据
更好地理解模型
减少输⼊特征的数量
特征重要性得分可以帮助了解数据集
相对得分可以突出显⽰哪些特征可能与⽬标最相关,反之则突出哪些特征最不相关。这可以由⼀个领域专家解释,并且可以⽤作收集更多的或不同的数据的基础。
特征重要性得分可以帮助了解模型
⼤多数重要性得分是通过数据集拟合出的预测模型计算的。查看重要性得分可以洞悉该特定模型,以及知道在进⾏预测时哪些特征最重要和哪些最不重要。这是⼀种模型解释,适⽤于那些⽀持它的模型。
特征重要性可⽤于改进预测模型
可以使⽤的重要性得分来选择要删除的特征(最低得分)或要保留的特征(最⾼得分)。这是⼀种特征选择,可以简化正在建模的问题,加快建模过程(删除特征称为降维),在某些情况下,还可以改善模型的性能。
特征重要性得分可以被输⼊到包装器模型,如SelectFromModel或SelectKBest,以进⾏特征选择。
有许多⽅法和模型可以计算特征重要性得分。
也许最简单的⽅法是计算每个特征和⽬标变量之间的统计学相关系数。
在本教程中,我们将研究三种⽐较⾼级的特征重要性,即:从模型系数得知的特征重要性。
决策树中的特征重要性。
随机排序检验中的特征重要性。
现在让我们深⼊了解这三个!
2.准备
在深⼊学习之前,我们先确认我们的环境并准备⼀些测试数据集。
检查Scikit-Learn版本
⾸先,确认你已安装最新版本的scikit-learn库。这⾮常重要,因为在本教程中,我们我们研究的⼀些模型需要最新版的库。
您可以使⽤以下⽰例代码来查看已安装的库的版本:# check scikit-learn version
import sklearn
print(sklearn.__version__)
运⾏⽰例代码将会打印出库的版本。在撰写本⽂时,⼤概是version 0.22。你需要使⽤此版本或更⾼版本的scikit-learn。0.22.1
⽣成测试数据集
接下来,让我们⽣成⼀些测试数据集,这些数据集可以作为基础来证明和探索特征重要性得分。每个测试问题有五个重要特征和五不重要的特征,看看哪种⽅法可以根据其重要性到或区分特征可能会⽐较有意思。
分类数据集
我们将使⽤make_classification()函数创建⼀个⽤于测试的⼆进制分类数据集。
数据集将包含1000个实例,且包含10个输⼊特征,其中五个将会提供信息,其余五个是多余的。
为了确保每次运⾏代码时都得到相同的实例,我们将使⽤假随机数种⼦。下⾯列出了创建数据集的⽰例。# test classification dataset
from sklearn.datasets import make_classification
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)
# summarize the dataset
print(X.shape, y.shape)
运⾏⽰例,创建数据集,并确保所需的样本和特征数量。(1000, 10) (1000,)
回归数据集
我们将使⽤make_regression()函数创建⼀个⽤于测试的回归数据集。
像分类数据集⼀样,回归数据集将包含1000个实例,且包含10个输⼊特征,其中五个将会提供信息,其余五个是多余的。# test regression dataset
from sklearn.datasets import make_regression
# define dataset
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)
# summarize the dataset
print(X.shape, y.shape)
运⾏⽰例,创建数据集,并确保所需的样本和特征数量。(1000, 10) (1000,)
接下来,我们仔细看⼀下特征重要性系数。
3.特征重要性系数
线性的机器学习能够拟合出预测是输⼊值的加权和的模型。
案例包括线性回归,逻辑回归,和正则化的扩展案例,如岭回归和弹性⽹络。
所有这些算法都是到⼀组要在加权求和中使⽤的系数,以便进⾏预测。这些系数可以直接⽤作粗略类型的特征重要性得分。
我们来仔细研究⼀下分类和回归中的特征重要性系数。我们将在数据集中拟合出⼀个模型以到系数,然后计算每个输⼊特征的重要性得分,最终创建⼀个条形图来了解特征的相对重要性。
3.1线性回归特征重要性
我们可以在回归数据集中拟合出⼀个LinearRegression模型,并检索coeff_属性,该属性包含为每个输⼊变量(特征)到的系数。这些系数可以为粗略特征重要性评分提供依据。该模型假设输⼊变量具有相同的⽐例或者在拟合模型之前已被按⽐例缩放。
下⾯列出了针对特征重要性的线性回归系数的完整⽰例。# linear regression feature importance
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression
from matplotlib import pyplot
# define dataset
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)
# define the model
model = LinearRegression()
# fit the model
model.fit(X, y)
# get importance
importance = f_
# summarize feature importance
for i,v in enumerate(importance):
print('Feature: %0d, Score: %.5f' % (i,v))
# plot feature importance
得分表明,模型到了五个重要特征,并⽤零标记了剩下的特征,实际上,将他们从模型中去除了。Feature: 0, Score: 0.00000
Feature: 1, Score: 12.44483
Feature: 2, Score: -0.00000
Feature: 3, Score: -0.00000
Feature: 4, Score: 93.32225
Feature: 5, Score: 86.50811
Feature: 6, Score: 26.74607
Feature: 7, Score: 3.28535
Feature: 8, Score: -0.00000
Feature: 9, Score: 0.00000
然后为特征重要性得分创建条形图。
这种⽅法也可以⽤于岭回归和弹性⽹络模型。
3.2 Logistic回归特征重要性
就像线性回归模型⼀样,我们也可以在回归数据集中拟合出⼀个LogisticRegression模型,并检索coeff
_属性。这些系数可以为粗略特征重要性评分提供依据。该模型假设输⼊变量具有相同的⽐例或者在拟合模型之前已被按⽐例缩放。
下⾯列出了针对特征重要性的Logistic回归系数的完整⽰例。# logistic regression for feature importance
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from matplotlib import pyplot
# define dataset
X, y = make_classification(n_samples=1000, n_features=10, n_informative=5, n_redundant=5, random_state=1)
# define the model
model = LogisticRegression()
# fit the model
model.fit(X, y)
# get importance
importance = f_[0]
# summarize feature importance
for i,v in enumerate(importance):
print('Feature: %0d, Score: %.5f' % (i,v))
# plot feature importance
回想⼀下,这是有关0和1的分类问题。请注意系数既可以为正,也可以为负。正数表⽰预测类别1的特征,⽽负数表⽰预测类别0的特征。
从这些结果,⾄少从我所知道的结果中,⽆法清晰的确定出重要和不重要特征。Feature: 0, Score: 0.16320
Feature: 1, Score: -0.64301
Feature: 2, Score: 0.48497
Feature: 3, Score: -0.46190
Feature: 4, Score: 0.18432
Feature: 5, Score: -0.11978
Feature: 6, Score: -0.40602
Feature: 7, Score: 0.03772
Feature: 8, Score: -0.51785
Feature: 9, Score: 0.26540
然后为特征重要性得分创建条形图。
现在我们已经看到了将系数⽤作重要性得分的⽰例,接下来让我们看向基于决策树的重要性得分的常见⽰例
4.基于决策树的特征重要性
决策树算法,⽐如说classification and regression trees(CART)根据Gini系数或熵的减少来提供重要性得分。这个⽅法也可⽤于随机森林和梯度提升算法。
OK.现在让我们看看相应的运⾏⽰例。
4.1基于CART的特征重要性
对于在scikit-learn中实现的特征重要性,我们可以将CART算法⽤于DecisionTreeRegressor和DecisionTreeClassifier类
拟合后,模型提供feature_importances_属性,可以访问该属性以检索每个输⼊特征的相对重要性得分。
让我们看⼀个⽤于回归和分类的⽰例。
基于CART(回归)的特征重要性
下⾯列出了拟合DecisionTreeRegressor和计算特征重要性得分的完整⽰例。# decision tree for feature importance on a regression problem
from sklearn.datasets import make_regression
import DecisionTreeRegressor
from matplotlib import pyplot
# define dataset
X, y = make_regression(n_samples=1000, n_features=10, n_informative=5, random_state=1)
# define the model
model = DecisionTreeRegressor()
# fit the model

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。