机器学习中经常会用到图形进行可视化,如在网格搜索(GridSearch)后对特征的重要性进行排序时,用到sns.barplot()函数按照重要程度输出特征。
(这种方法也能用于建立帕拉图)
sns.barplot()函数中能用于分类输出和排序的参数了解:
order, hue_order:字符串列表,可选项
根据参数定义的类别和级别画图,如果没有定义,则根据数据对象推断级别;order参数是指定条形图输出的顺序
示例代码:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 构造数据
maxnum = 10
a = pd.DataFrame({"feature": [19, 36, 28, 15, 2, 9, 45, 73, 3, 18, 66, 89]})
b = pd.DataFrame({"importance": [15396, 7812, 4795, 3857, 2966, 1984, 1735, 1266, 1128, 849, 6831, 2637]})
df = pd.concat([a, b], axis=1)
# 对特征按照重要性程度的从大到小进行排序
df = df.sort_values(by="importance", ascending=False)
# 只输出前10个重要的特征
df = df[:maxnum]
print(df)
# 不设置order参数的结果(默认情况下):
sns.barplot(x="importance", y="feature", data=df, orient="h")
结果输出:是按照特征feature中数值的从小到大排序的
由此可见,在画图前虽然已经将数据按重要性(importance)排序了,但是图形并没有按此输出,而是按照特征(feature)的数值大小依次输出。
# 设置order参数:按重要程度(importance)从大到小输出的结果:
sns.barplot(x="importance", y="feature",
data=df, order=df["feature"], orient="h")