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

相关推荐
黑客思维者43 分钟前
Salesforce Einstein GPT 人机协同运营的核心应用场景与工作流分析
人工智能·gpt·深度学习·salesforce·rag·人机协同·einstein gpt
玦尘、1 小时前
《统计学习方法》第5章——决策树(上)【学习笔记】
决策树·机器学习
多恩Stone1 小时前
【ModelScope-1】数据集稀疏检出(Sparse Checkout)来下载指定目录
人工智能·python·算法·aigc
郭庆汝1 小时前
(七)自然语言处理笔记——Ai医生
人工智能·笔记·自然语言处理
生而为虫1 小时前
28.Python处理图像
人工智能·python·计算机视觉·pillow·pygame
Dev7z1 小时前
基于OpenCV和MATLAB的椭圆检测系统的设计与实现
人工智能·opencv·matlab
青春不败 177-3266-05201 小时前
R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表
人工智能·r语言·生态学·meta分析·统计学·环境科学·农业科学
代码or搬砖1 小时前
Java Lambda 表达式全面详解
java·开发语言·python
薛定e的猫咪2 小时前
【论文精读】ICLR 2023 --- 作为离线强化学习强表达能力策略类的扩散策略
人工智能·深度学习·机器学习·stable diffusion