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之前都把数据标准化了,避免由于数据量纲不一样影响而影响数据特征的提取。

相关推荐
公链开发几秒前
链游开发全路径赋能:如何重塑从创意到生态的完整闭环
大数据·人工智能·ux
暗然而日章2 分钟前
C++基础:Stanford CS106L学习笔记 13 特殊成员函数(SMFs)
c++·笔记·学习
安徽正LU o561-6o623o75 分钟前
露-大鼠活动记录仪 小动物活动记录仪
人工智能
dhdjjsjs5 分钟前
Day43 PythonStudy
人工智能·机器学习
小智RE0-走在路上6 分钟前
Python学习笔记(6)--列表,元组,字符串,序列切片
笔记·python·学习
BJ_Bonree8 分钟前
2025上海金融科技嘉年华启幕!博睿数据解读AI智能体重塑金融运维之道
人工智能·科技·金融
feeday13 分钟前
Python 删除重复图片 优化版
开发语言·python
FL162386312915 分钟前
传送带异物检测玻璃碴子检测数据集VOC+YOLO格式156张1类别
深度学习·yolo·机器学习
ss27319 分钟前
Java线程池全解:工作原理、参数调优
java·linux·python
CoderLiu20 分钟前
上下文工程:从 Manus 实践看 AI 智能体的成本与性能优化
人工智能·agent·ai编程