sklearn 5.14.7 univariate feature selection

使用sklearn进行单变量特征选择
本文深入探讨了如何利用sklearn库进行单变量特征选择。通过介绍和实例,展示了如何有效地从数据集中筛选出最相关的特征,提高模型的性能和解释性。
# 一个单变量特征选择的例子
# 在使用iris数据集时,会往里添加噪音特征,然后再应用单变量特征选择。对于每一个特征,会同时展示出单变量特征选择给出的p值和SVM算法给出的权重值
# 可以看到单变量选择会把拥有较高SVM权重的特征选择出来
# 全量特征集中,只有4个是关键特征,它们在单变量特征选择中也拥有最高分
# SVM虽然给这些特征赋予了最大权重,但仍然会选择其他无关特征
# 在训练SVM模型之前,应用单变量特征选择对数据进行转换可以促使SVM将权重分配到最重要的那部分特征上,并且提高分类效果
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, svm
from sklearn.feature_selection import SelectPercentile, f_classif

# import iris dataset
# 导入训练数据,数据形状为(150,4)
iris = datasets.load_iris()
# some noisy data not correlated
# 生成噪音数据,数据形状为(150,20)
E = np.random.uniform(0, 0.1, size=(len(iris.data), 20))
# add the noisy data to the informative features
# 将噪音数据添加到训练数据,新的训练数据形状为(150,24)
X = np.hstack((iris.data, E))
y = iris.target
plt.figure(1)
plt.clf()
# 生成训练数据特征索引,从0开始直到23。arange函数左闭右开
X_indices = np.arange(X.shape[-1])
# univariate feature selection with F-test for feature scoring
# we use the default selection function: the 10% most significant features
# 应用基于F检验的单变量特征选择,按评分从高到低选择前10%的特征
# SelectPercentle类,根据评分函数给出的评分,按给定百分比选择特征,默认前10%
# 类属性包括F值和p值
# f_classif类,根据方差分析计算F值和p值
selector = SelectPercentile(f_classif, percentile=10)
# 匹配训练数据和标签数据
selector.fit(X, y)
# 特征p值对数化
scores = -np.log10(selector.pvalues_)
# 特征p值正则化,统一取值范围 0~1
scores /= scores.max()
# 用柱状图可视化p值,参数分别为:柱状图位置、柱状图高度、柱状图宽度、柱状图标签、壮壮图颜色、柱状图边框颜色
plt.bar(X_indices - .45, scores, width=.2,
       label=r'univariate score ($-log(p_{value})$)', color='darkorange', edgecolor='black')
# compare to the weights of an SVM
# 实例化SVC分类器
clf = svm.SVC(kernel='linear')
# 训练模型
clf.fit(X, y)
# 正则化SVC特征权重,权重取值范围为 0~1
svm_weights = (clf.coef_**2).sum(axis=0)
svm_weights /= svm_weights.max()
# 柱状图可视化权重,参数同上
plt.bar(X_indices - .25, svm_weights, width=.2, label='SVM weight',
       color='navy', edgecolor='black')
# 实例化SVC分类器
clf_selected = svm.SVC(kernel='linear')
# 先用单变量特征选择对元树数据进行转换,再训练分类模型
clf_selected.fit(selector.transform(X), y)
# 正则化新分类模型的权重
svm_weights_selected = (clf_selected.coef_**2).sum(axis=0)
svm_weights_selected /= svm_weights_selected.max()
# 柱状图可视化新特征权重
plt.bar(X_indices[selector.get_support()]-.05, svm_weights_selected,
       width=.2, label='SVM weights after selection', color='c',
       edgecolor='black')
plt.title('comparing feature selection')
plt.xlabel('feature number')
plt.yticks(())
plt.axis('tight')
plt.legend(loc='upper right')
plt.show()

print(iris.data.shape)
print(E.shape)
print(X.shape)
print(scores)
print(svm_weights)
print(selector.get_support())
print(svm_weights_selected)
(150, 4)
(150, 20)
(150, 24)
[3.40023500e-01 1.75404693e-01 1.00000000e+00 9.31982956e-01
 4.84838523e-03 1.44660170e-02 5.43086781e-03 1.09236463e-02
 2.31751532e-03 1.67390458e-05 8.62127705e-03 8.77580361e-04
 7.71874738e-03 1.16995322e-03 1.59215706e-02 2.46085855e-04
 4.20414737e-03 1.13601613e-02 7.24168285e-03 7.67741484e-03
 1.85821739e-03 6.90814695e-03 1.02542495e-02 9.69346040e-03]
[6.52829321e-02 2.21457858e-01 1.00000000e+00 8.03981594e-01
 3.66844225e-04 2.50121675e-05 2.32778421e-03 2.59312393e-03
 2.26319998e-03 4.39828920e-04 2.49510595e-02 1.74691867e-03
 2.62280244e-03 2.62203257e-04 9.25326284e-03 9.87155952e-04
 4.10793213e-03 2.34023190e-03 1.72658141e-03 6.26172314e-04
 3.93877462e-03 2.45925689e-03 3.37272762e-03 8.46258754e-04]
[ True False  True  True False False False False False False False False
 False False False False False False False False False False False False]
[0.07565093 1.         0.6996112 ]
要在 Ubuntu 系统上下载 Linux 内核版本 `5.14.10`,你可以从官方 Linux 内核网站(https://www.kernel.org/)下载,或者使用 Ubuntu 的源仓库获取对应的内核包。 下面提供两种方式来下载 `5.14.10` 版本的内核: --- ### 方法一:从 kernel.org 下载源码包 这是官方发布的内核源码,适合需要编译或研究内核源代码的用户。 ```bash # 安装必要的依赖 sudo apt update sudo apt install build-essential libncurses-dev flex bison libssl-dev # 创建一个目录用于存放内核源码 mkdir -p ~/kernel-source cd ~/kernel-source # 下载 5.14.10 内核源码包 wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.14.10.tar.xz # 解压源码包 tar -xvf linux-5.14.10.tar.xz # 进入源码目录 cd linux-5.14.10 ``` **解释:** - `wget` 从官方下载源码压缩包。 - `tar -xvf` 解压 `.tar.xz` 格式的文件。 - 进入目录后,你可以配置和编译该内核(如需安装新内核,请参考后续步骤)。 --- ### 方法二:从 Ubuntu 官方仓库安装预编译内核包(推荐用于运行) 如果你只是想安装该版本的内核用于运行,而不是开发,可以尝试使用 `linux-image`、`linux-headers` 等预编译包。 但需要注意:Ubuntu 官方通常不会为每个小版本提供单独的包(如 `5.14.10`),而是将其集成到某个 Ubuntu 发行版中。你可以通过 [Ubuntu Kernel Mainline](https://kernel.ubuntu.com/~kernel-ppa/mainline/) 查找是否包含该版本。 ```bash # 安装 wget 和 curl(如果未安装) sudo apt install wget curl # 访问 mainline 内核列表页面 curl https://kernel.ubuntu.com/~kernel-ppa/mainline/ ``` 在页面中找到包含 `v5.14.10` 的版本(比如 `5.14.10-051410`),然后下载并安装: ```bash # 示例(根据实际链接修改): wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.14.10/amd64/linux-image-5.14.10-051410-generic_5.14.10-051410.202110081631_amd64.deb wget https://kernel.ubuntu.com/~kernel-ppa/mainline/v5.14.10/amd64/linux-headers-5.14.10-051410-generic_5.14.10-051410.202110081631_amd64.deb # 安装内核包 sudo dpkg -i linux-headers-5.14.10-*.deb linux-image-5.14.10-*.deb # 更新 GRUB sudo update-grub # 重启系统 sudo reboot ``` **解释:** - 使用 `dpkg` 安装 `.deb` 包。 - 安装完成后需要更新 GRUB 引导菜单。 - 重启后可以在 GRUB 菜单中选择新安装的内核。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值