sklearn手册 5.14.1节 recursive feature elimination

from sklearn.svm import SVC
from sklearn.datasets import load_digits
from sklearn.feature_selection import RFE
import matplotlib.pyplot as plt

# load the digits dataset
# 返回图片格式的数字数据集,数据类型是np.Bunch,一种类似字典的数据,分训练样本和样本标签,共10个类别,从0~9
# 每一个类别大概180个样本,共1797个样本
# 每个样本由16个特征组成的一个8*8的像素图片构成,所以特征维度是64,训练数据集的形状是(1797, 64)
digits = load_digits()
# 分别从Bunch数据集中获取训练数据和标签数据
# 使用digits.images获取训练数据,使用digits.target获取标签数据
# 并且使用reshape函数重新定义训练数据的形状,指定的参数为1797行,列为自动计算得到,因此形状仍为(1797, 64)
# 不过此时 X 的数据类型为np.ndarray,而不是np.Bunch
X = digits.images.reshape((len(digits.images), -1))
# 数据集的标签值数据类型为np.ndarray
y = digits.target

# create the RFE object and rank each pixel
# sklearn.svm.SVC,C-Support Vector Classification 支持向量分类器,C是一个可调参数。user guide中有更详细的介绍,还有关于SVC、LinearSVC、NuSVC模型的比较
# 参考材料:https://www.jianshu.com/p/31ec24baaada
# 实例化SVC分类器,核函数选择线性核函数
# 其他可选的核函数包括:linear, poly, rbf(默认), sigmoid, precomputed 或者自定义可调用函数等,如果使用其他核函数,还有其他参数可供选择
# 参数C表示对于错误类别的惩罚洗漱,默认为1,参数值越高,对错误项越敏感
# 分类器对于超过十万量级的数据集来说不太适用,这时建议使用LinearSVC或者SGDClassifier分类器
# 当应用于多分类情况时,是通过 1 vs 1 方式转换得到多分类情况
svc = SVC(kernel="linear", C=1)
# 特征选择模块中的RFE方法,recursive feature elimination(循环特征剔除)
# 在原始特征集上赋予每个特征权重,模型必须是监督学习模型,要么通过fit方法,要么通过coef_属性,提供特征权重信息
# 比如用一个相关系数线性模型在原始数据集上训练,然后赋予每个特征权重,把权重最小的特征提出,再剩下的特征集上再次进行模型训练,一直循环下去,直到特征集中剩下的特征数目达到指定目标
# 这里选择的模型是svc,n_feature_to_select参数表示最后选择的特征数目,默认是选择一半,step参数表示每次剔除的特征数目,默认是1
rfe = RFE(estimator=svc, n_features_to_select=1, step=1)
# 调用RFE实例方法,在未被剔除的特征集上训练模型
rfe.fit(X, y)
# 获取实例的ranking_属性,一个按特征重要性降序排序的数组
ranking = rfe.ranking_.reshape(digits.images[0].shape)

# plot pixel ranking
# 矩阵可视化函数matshow将ranking数组可视化
# cmap参数选择色彩体系,其他的还有RGB、gray等
plt.matshow(ranking, cmap=plt.cm.Blues)
# 显示色彩条,可以用参数控制颜色条摆放位置等
plt.colorbar()
# 显示绘图标题
plt.title("ranking of pixels with RFE")
# 展示绘图
plt.show()

展示一个样本:

digits.data.shape
plt.gray()
plt.matshow(digits.images[0])
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值