特征选择与评分可视化显示

在上一篇推文中,我们讲述了判定各个特征与标签的相关性,对特征进行选择,本文,我们将会利用sklearn中的SelectKBest和SelectPercentile默认的"f_classif"(通过方差分析)给特征进行打分 ,并且进行排序和可视化,希望本篇文章能够帮助你进一步挖掘数据当中特征之间的统计关系。

我们进行选取鸢尾花数据集为例进行讲解

1. 导入数据科学库

from sklearn import datasets
import numpy as np
from sklearn.feature_selection import SelectKBest
from matplotlib import pyplot as plt
import seaborn as sns
sns.set()

2. 载入数据

def load_named_x_y_data():
    # 载入数据,同时也返回特征的名称,以便可视化显示(以鸢尾花数据集为例)
    # x_names = ["花萼长度", "花萼宽度", "花瓣长度", "花瓣宽度"]
    x_names = ["sepal_lenth", "sepal_width", "petal_lenth", "petal_width"]
    iris = datasets.load_iris()
    x = iris.data
    y = iris.target
    return x, y, x_names

3. 可视化特征并排序

def plot_feature_scores(x, y, names=None):
 
    if not names:
        names = range(len(x[0]))
 
 
    # 1. 使用 sklearn.feature_selection.SelectKBest 给特征打分
    slct = SelectKBest(k="all")
    slct.fit(x, y)
    scores = slct.scores_
 
    # 2. 将特征按分数 从大到小 排序
    named_scores = zip(names, scores)
    sorted_named_scores = sorted(named_scores, key=lambda z: z[1], reverse=True)
 
    sorted_scores = [each[1] for each in sorted_named_scores]
    sorted_names = [each[0] for each in sorted_named_scores]
 
    y_pos = np.arange(len(names))# 从上而下的绘图顺序
 
    # 3. 绘图
    fig, ax = plt.subplots()
    ax.barh(y_pos, sorted_scores, height=0.7, align='center', color='#AAAAAA', tick_label=sorted_names)
    # ax.set_yticklabels(sorted_names) # 也可以在这里设置“条条”的标签~
    ax.set_yticks(y_pos)
    ax.set_xlabel('Feature Score')
    ax.set_ylabel('Feature Name')
    ax.invert_yaxis()
    ax.set_title('F_classif scores of the features.')
 
    # 4. 添加每个“条条”的数字标签
    for score, pos in zip(sorted_scores, y_pos):
        ax.text(score + 20, pos, '%.1f' % score, ha='center', va='bottom', fontsize=8)
 
    plt.show()

4. 测试结果

x, y, names = load_named_x_y_data()
plot_feature_scores(x, y, names)

5. 下载本文链接

https://github.com/PENGBLACKLEGS/Data-Science/tree/master/特征工程建立

6. 参考链接

sklearn-learn官方文档https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html

最后,希望能给大家带来帮助,我会在更新一篇利用xgboost进行选择特征并可视化的文章,欢迎关注。

5. 下载本文链接

https://github.com/PENGBLACKLEGS/Data-Science/tree/master/特征工程建立

6. 参考链接

sklearn-learn官方文档https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectKBest.html

最后,希望能给大家带来帮助,我会在更新一篇利用xgboost进行选择特征并可视化的文章,欢迎关注。

欢迎关注公众号“并非一无所有”