sklearn学习(3)数据降维

(1)特征选择

特征选择是只选择一部分特征,常见的方法有:移除低方差法,单变量统计法、基于模型的选择、递归特征消除等方法。

移除低方差特征 VarianceThreshold

复制代码
#移除低方差特征,方差小代表这组数据相差不大,可以去掉
from sklearn.feature_selection import VarianceThreshold
from sklearn.datasets import load_iris

iris=load_iris()
X=iris.data
X_name=iris.feature_names
y=iris.target
#移除方差小于0.55的特征
sel=VarianceThreshold(threshold=0.55)
x_new=sel.fit_transform(X)
print("原数据:")
print(X.shape)
print("去除后")
print(x_new.shape)

VarianceThreshold只需传入一个阈值,经过fit_transform后会过滤掉方差小于该阈值的数据。

单变量数据选择:是基于统计检验选择最佳特征,从原始数据中选择K个最好的

复制代码
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import f_regression

x=load_iris().data
y=load_iris().target
#选择k个最好的特征,返回选择特征后的数据
sel=SelectKBest(f_regression,k=2)
#f_regression是其中一种评估方式,计算每个特征和目标之间的f值和p值
#还有 chi2:卡方、mutual_info_classif:互信息(分类)、
#mutual_info_regression互信息(回归)
x_new=sel.fit_transform(x,y)#这里x y都要传入,和其他不同
print("评分:",sel.scores_)
print(x)
print(x_new)

SelectKBest函数需要传入两个参数,第一个是评价方式有多种:f_regression是其中一种评估方式,计算每个特征和目标之间的f值和p值还有 chi2:卡方、mutual_info_classif:互信息(分类)、

mutual_info_regression互信息(回归)。第二个是保留特征数,传入几就保留几个评分最高的特征。

基于模型的特征选择

基于模型的特征选择,是根据不同模型进行选择特征,这里以线性模型为例

复制代码
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
from sklearn.linear_model import Lasso
x=load_iris().data
y=load_iris().target
#使用L1正则化的线性模型
lasso = Lasso(alpha=0.01)
lasso.fit(x,y)
#特征选择
sel=SelectFromModel(lasso,threshold=0.1)
x_new=sel.fit_transform(x,y)
print(x)
print(x_new)

lasso是正则化后的特征值,threshold是阈值,只会保留重要性大于0.1的数据,其他重要性小于0.1的会被忽略。

(2)特征提取,这里介绍一下主成分分析(PCA)和线性判别分析(LDA)。

PCA的原理是通过线性变换把原始特征转化为一组线性不相关的变量,是为了找让点分的最开的方向,并按照方差大小排序,是一种无监督方式,最求的是最大化方差和。

复制代码
from sklearn.decomposition import PCA
from sklearn.datasets import load_iris
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import StandardScaler
from matplotlib import pyplot as plt
from sympy.solvers.diophantine.diophantine import Linear

iris=load_iris()
x=iris.data
y=iris.target
#先给数据做个标准化,数据会更好
Stand_S=StandardScaler()
x_stand=Stand_S.fit_transform(x)
pca=PCA(n_components=2)
#n_components=2表示降维后的维度
# #还有一个svd_solver参数 指定求解器 一般默认,对于大型数据,使用'randomized'更高效
x_pca=pca.fit_transform(x_stand)
print(x_pca)

PCA函数中只需要传入一个参数,n_components=n即可,是表示原始数据降维后要保留的维数,上面代码是降维到2维。

LDA的原理是追求最大化类间距离,最小化类内距离,其是一种有监督方法,需要用到y值

复制代码
#线性判别分析(LDA):最小化类内距离,最大化类间距离
#LDA是一种有监督的降维技术,需要用到标签信息
lda=LinearDiscriminantAnalysis(n_components=2)
#n_components=2表示降维后的维度
x_lda=lda.fit_transform(x_stand,y)
plt.scatter(x_lda[y==0,0],x_lda[y==0,1],color='r',marker='o',label='0')
plt.scatter(x_lda[y==1,0],x_lda[y==1,1],color='b',marker='x',label='1')
plt.show()
print(x_lda)

注意如果先把数据标准化之后再传入会好很多。再PCA和LDA之前都把数据标准化了,避免由于数据量纲不一样影响而影响数据特征的提取。

相关推荐
运行时异常4 小时前
【WMS 仓储系统集成 AI Agent 实战】第 8 讲(终篇):生产部署与并发安全——Semaphore 放进 Flux.defer 的坑,压测抓了一晚上
人工智能·安全
杨杨杨大侠4 小时前
Jev、Kev、Laya:决策模型怎么选,什么时候需要微调?
人工智能·python·agent
代码方舟4 小时前
零信任架构实战:基于天远人企关联构建自动化供应链金融网关
运维·人工智能·架构·自动化
虹科网络安全4 小时前
“顶会”看安全(十八):超越越狱:揭示由能力边界模糊引发的 LLM 应用安全风险
人工智能·安全
LOVE️YOU5 小时前
Python 在定义函数时,究竟定义的是什么?
python
Maiko Star5 小时前
* LangChain 提示词模板详解:ChatPromptTemplate 的使用与高级特性
java·人工智能·langchain
段一凡-华北理工大学5 小时前
大模型应用开发 100 天:Python + LLM 从入门到精通 day26~Prompt 调试与优化——A/B 测试与效果评估
windows·python·大模型·prompt·智能体·提示词工程·高炉智能化
Minecraft红客5 小时前
以撒的结合
python·游戏·电脑·娱乐
鬓戈5 小时前
Rust 语言与 AI 应用生态调研及学习路径
人工智能·学习·rust
天远API5 小时前
零信任架构实战:基于天远人企关联构建自动化图谱网关
网络·人工智能·架构·自动化