机器学习之降维打击

一.什么是维度?

在机器学习中,维度就是指的是特征数量,降维降的就是特征个数,去其无用的特征,保留有效特征,提升模型上限,毕竟数据不给力,再高级的算法都没什么鸟用。

二.方法

1.特征选择
(1).通过业务逻辑常识去自主选择,比如预测一个辆车的价格,那么就与买车的人是男是女没有多大关系(当然也可能出现是美女就降价打个折什么的,但我不想做讨论)。
(2).发现特征太多没办法通过业务逻辑去选,那就只有去用数学方面的工具去解决。

  • 过滤法
    考虑这样一个情况,一列数字全是一模一样的值,即这个特征对于预测目标来说,毫无意义,因为在这个特征上值是不带变化的,你都不带变化,我怎么能看出你是不是与我的预测目标相关呢?就像是舔狗一样,舔到最后一无所有,对方心里还毫无波动,那还舔个屁。可以用方差来描述这种波动,即是所带信息量,方差越大说明这个特征所带信息量越多,方差越小说明这个特征所带信息量越小。把方差小的进行过滤,就可以达到降维的目的。相关代码:
from sklearn.feature_selection import VarianceThreshold
select = VarianceThreshold()#不填任何值默认删除方差为0的特征
select.fit_transform(x)

到底填多少好呢,自己去利用学习曲线调参吧。
好了方差过滤完毕,但是你留下的这些特征,与我的目标到底相关不相关呢?比如你为你女票做了很多事,包含了大量的信息,可这并不妨碍她移情别恋(你所做的都是无用功)。一般常用三种方式:卡方,F检验,互信息
首先是卡方:卡方是计算每个非负特征和标签的统计量,并依照卡方统计量由高到低为特征排名。选取排名高的就可以再一次过滤。(分类问题用)卡方是先进行独立性假设 得到特征取值的无关理论值 再进行卡方计算 得到的结果再与卡方分布的临界值表进行对比 得相关性的概率大小 。

from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
 SelectKBest(chi2,k=).fit_transform(x,y)

k为超参数 利用学习曲线调参
其次是F检验,目的是用来捕捉每个特征与标签之间的线性关系的过滤方法。回归分类都可以用。和卡方一样:其原假设是数据不存在显著的线性关系,我们希望选取p值小于某值时的特征,这些特征与标签是显著线性相关的。

from sklearn.feature_selection import f_classif
F,pvalues_f = f_classif(x,y)
SelectKBest(f_classif,k=?).fit_transform(x,y)

最后是 互信息法
互信息法是用来捕捉每个特征与标签之间的任意关系(包括线性和非线性关系)的过滤方法。它分类回归都可以做。

from sklearn.feature_selection import mutual_info_classif as MIC
result  = MIC(x,y)
SelectKBest(MIC,K=?).fit_transform(x,y)

互信息返回的是每个特征与目标的互信息量的估计,这个估计量在[0,1]之间取值,为0则表示两个变量独立,为1表示两个完全相关。

  • 嵌入法
    嵌入法是一种让算法决定自己使用哪些特征方法,即特征选择和算法训练同时进行。我们先使用某些机器学习算法和模型进行训练,得到各个特征的权值系数,根据权值选特征。
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier as RFC
RFC_ = RFC(n_estimators=?,random_state=?)
X1 = SelectFromModel(RFC_,threshold=?).fit_transform(x,y)

threshold 阈值 小于阈值都要被删除

  • 包装法
    包装法使用一个目标函数作为黑盒来帮助我们选取特征,而不是输入某个评估指标。在初试特征集上训练评估器,并且通过coef_属性或通过feature_importances_属性获得每个特征的重要性。然后,从当前的一组特征修剪最不重要的特征。包装法是最能保证模型效果的特征选择方法。但是是算的最慢的算法。
from sklearn.feature_selection import RFE
RFC_ = RFC(n_estimators=?,random_state=0)
selector = RFE(RFC_,n_features_to_select=?,step=?).fit(x,y)
X_w = selector.transform(x)

RFE 递归特征消除法。它是一种贪婪的优化算法,旨在找到性能最佳的特征子集。它反复创建模型,并在每次迭代时保留最佳特征或剔除最差特征。
2. PCA
PCA是一种降维算法 与上面不同的是 它的降维类似压缩,从高维数据降到低维,并且信息损失较少。数学方面的内容不做阐述了 可以去自己翻阅资料。在sklearn PCA不是单纯的PCA 它是SVD与PCA的结合。SVD算出新特征向量空间V,V在乘上原特征向量,就达到了降维的效果。

from sklearn.decompositions import PCA
pca = PCA(n_components=?,svd_solver=?)#参数是降到几维或保留多少信息量,SVD四个参数“full","auto","arpack","randomized" 
pca = pca.fit(x)
x1 = pca.transform(x)

full:SVD算出完整的结果
auto:自动选择 精准计算 还是采用randomized计算结果
randomized:生成多个随机向量,一一进行检测看是否符合分解需求,如果符合就用这个向量,不符合就继续试。
arpark:分解时就将特征数量降低到输入的数值K,可以加快运算速度,一般用于稀疏矩阵的时候。


参考资料:菜菜的sklearn课堂(B站可看视频)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值