Scikit learn XGBoost绘图重要性F分数值>;100

Scikit learn XGBoost绘图重要性F分数值>;100,scikit-learn,xgboost,xgbclassifier,Scikit Learn,Xgboost,Xgbclassifier,我已经为我的模型中的所有特性绘制了XGBoost特性重要性,如下图所示。但是您可以看到图中的F分数值没有标准化(不在0到100的范围内)。如果你知道为什么会这样,请告诉我。我是否需要在plot_重要性函数中传递任何参数以进行规范化 绘图的特征重要性由其参数决定 重要性\u类型,默认为重量。有3个选项:weight、gain和cover。不过,它们都不是一个百分比 对于此方法,请从中选择: 重要性类型(str,默认为“权重”)–重要性的计算方式:“权重”、“增益”或“覆盖” “权重”是特征在树中

我已经为我的模型中的所有特性绘制了XGBoost特性重要性,如下图所示。但是您可以看到图中的F分数值没有标准化(不在0到100的范围内)。如果你知道为什么会这样,请告诉我。我是否需要在plot_重要性函数中传递任何参数以进行规范化


绘图的特征重要性由其参数决定
重要性\u类型
,默认为
重量
。有3个选项:
weight
gain
cover
。不过,它们都不是一个百分比

对于此方法,请从中选择:

重要性类型(str,默认为“权重”)–重要性的计算方式:“权重”、“增益”或“覆盖”

  • “权重”是特征在树中出现的次数
  • “增益”是使用该功能的拆分的平均增益
  • “覆盖率”是使用功能的分割的平均覆盖率,其中覆盖率定义为受分割影响的样本数
所以,长话短说:对于你想要的东西,没有微不足道的解决方案

变通办法 模型的属性
功能\u重要性\u
按照您的意愿进行规范化,您可以自己绘制,但它将是一个手工制作的图表

首先,确保将分类器的
importance\u type
参数设置为上面列举的选项之一(构造函数的默认值为
gain
,因此如果不更改它,您将看到与
plot\u importances
绘制的内容不符)

best_model=xgb.xgb分类器(重要性_type='weight')
之后,您可以尝试以下内容:

将熊猫作为pd导入
最佳模型、功能和重要性_
#在我的玩具示例中:数组([0.21473685,0.19157895,0.28842106,0.30526316],dtype=float32)
最佳模型特征重要性总和()
#  1.0
#构建一个具有重要功能的简单数据框架
#您可以将命名fN更改为更具可读性的名称
fs=len(最佳模型、特征、重要性)
df=pd.DataFrame(zip([f“f{n}”表示范围内的n(fs)],最佳模型。特征重要性,列=['Features','feature importances'])
df=df.设置索引(“特征”).排序值(“特征重要性”)
#构建水平条字符
ax=df.plot.barh(颜色='red',alpha=0.5,网格=True,图例=False,title='Feature importance',figsize=(15,5))
#注释条形图,根据本SO答案改编:
# https://stackoverflow.com/questions/25447700/annotate-bars-with-values-on-pandas-bar-plots
对于p,zip中的值(ax.patches,df['Feature Importance']):
ax.注释(圆形(值,2),(p.get_width()*1.005,p.get_y()*1.005))
通过这种方法,我得到了如下图表,与原始图表非常接近:


绘图的特征重要性由其参数决定
重要性\u类型
,默认为
重量
。有3个选项:
weight
gain
cover
。不过,它们都不是一个百分比

对于此方法,请从中选择:

重要性类型(str,默认为“权重”)–重要性的计算方式:“权重”、“增益”或“覆盖”

  • “权重”是特征在树中出现的次数
  • “增益”是使用该功能的拆分的平均增益
  • “覆盖率”是使用功能的分割的平均覆盖率,其中覆盖率定义为受分割影响的样本数
所以,长话短说:对于你想要的东西,没有微不足道的解决方案

变通办法 模型的属性
功能\u重要性\u
按照您的意愿进行规范化,您可以自己绘制,但它将是一个手工制作的图表

首先,确保将分类器的
importance\u type
参数设置为上面列举的选项之一(构造函数的默认值为
gain
,因此如果不更改它,您将看到与
plot\u importances
绘制的内容不符)

best_model=xgb.xgb分类器(重要性_type='weight')
之后,您可以尝试以下内容:

将熊猫作为pd导入
最佳模型、功能和重要性_
#在我的玩具示例中:数组([0.21473685,0.19157895,0.28842106,0.30526316],dtype=float32)
最佳模型特征重要性总和()
#  1.0
#构建一个具有重要功能的简单数据框架
#您可以将命名fN更改为更具可读性的名称
fs=len(最佳模型、特征、重要性)
df=pd.DataFrame(zip([f“f{n}”表示范围内的n(fs)],最佳模型。特征重要性,列=['Features','feature importances'])
df=df.设置索引(“特征”).排序值(“特征重要性”)
#构建水平条字符
ax=df.plot.barh(颜色='red',alpha=0.5,网格=True,图例=False,title='Feature importance',figsize=(15,5))
#注释条形图,根据本SO答案改编:
# https://stackoverflow.com/questions/25447700/annotate-bars-with-values-on-pandas-bar-plots
对于p,zip中的值(ax.patches,df['Feature Importance']):
ax.注释(圆形(值,2),(p.get_width()*1.005,p.get_y()*1.005))
通过这种方法,我得到了如下图表,与原始图表非常接近:


我对绘图的重要性也有同样的问题!你能解决这个问题吗?谢谢我对情节的重要性也有同样的问题!你能解决这个问题吗?谢谢