文档章节

关于机器学习中特征工程的一些实战经验与可直接利用代码的分享

WYF_DATA
 WYF_DATA
发布于 2017/08/02 11:08
字数 850
阅读 97
收藏 0
点赞 0
评论 0

特征选择(分为两类,一类根据自身信息选择,一类借助模型选择)

 

1.根据特征自身信息方差选择

选出方差阈值大于0.9的特征, X 为特征矩阵

From  sklearn.feature_selection  import  VarianceThreshold

threshold = 0.90

vt = VarianceThreshold().fit(X)

# Find feature names

feat_var_threshold = data.columns[vt.variances_ > threshold * (1-threshold)]

print(feat_var_threshold)

 

2.根据模型算法来选择特征,例如使用RF

model = RandomForestClassifier()

model.fit(X, Y)

feature_imp=pd.DataFrame(model.feature_importances_,index=X.columns,columns=["importance"])

feat_imp_20 = feature_imp.sort_values("importance", ascending=False).head(20).index

print(feat_imp_20)

 

将树结构模型评估出来的特征重要度可视化

names=list(x_train.columns)

# sort importances

indices = np.argsort(model.feature_importances_)

# plot as bar chart

plt.barh(np.arange(len(names)), model.feature_importances_[indices])

plt.yticks(np.arange(len(names)) + 0.25, np.array(names)[indices])

_ = plt.xlabel('Relative importance')

#plt.show()

 

3.通过SelectKBest  chi2 test来选择特征,但是特征的取值必须为正

from sklearn.feature_selection import VarianceThreshold, RFE, SelectKBest, chi2

from sklearn.preprocessing import MinMaxScaler

X_minmax = MinMaxScaler(feature_range=(0,1)).fit_transform(X)

X_scored = SelectKBest(score_func=chi2, k='all').fit(X_minmax, Y)

feature_scoring = pd.DataFrame({'feature': X.columns, 'score': X_scored.scores_})

feat_scored_20=feature_scoring.sort_values('score',ascending=False).head(20)['feature'].values

print(feat_scored_20)

 

 

4.应用某一种模型来选择特征

借用某个模型,来选出超过阈值的特征,可以指定你需要的特征数或者阈值

from sklearn.datasets import load_boston

from sklearn.feature_selection import SelectFromModel

from sklearn.linear_model import LassoCV

# Load the boston dataset.

boston = load_boston()

X, y = boston['data'], boston['target']

# We use the base estimator LassoCV since the L1 norm promotes sparsity of features.

clf = LassoCV()

# Set a minimum threshold of 0.25

sfm = SelectFromModel(clf, threshold=0.25)

sfm.fit(X, y)

n_features = sfm.transform(X).shape[1]

1.          # Reset the threshold till the number of features equals two.

# Note that the attribute can be set directly instead of repeatedly

# fitting the metatransformer.

while n_features > 2:

sfm.threshold += 0.1

X_transform = sfm.transform(X)

n_features = X_transform.shape[1]

# Plot the selected two features from X.

plt.title(

"Features selected from Boston using SelectFromModel with "

"threshold %0.3f." % sfm.threshold)

feature1 = X_transform[:, 0]

feature2 = X_transform[:, 1]

plt.plot(feature1, feature2, 'r.')

plt.xlabel("Feature number 1")

plt.ylabel("Feature number 2")

plt.ylim([np.min(feature2), np.max(feature2)])

plt.show()

 

 

 

 

5. RFE with model

借用一个线性模型,利用给予每个特征的系数权重的大小比较,帅选出最优的特征

即递归特征消除的方法,反复构建模型训练,选出最好的特征,然后拿出来放在一边,继续筛选剩下的特征,择优,逐步择优,对特征进行排序。

from sklearn.feature_selection import RFE

rfe = RFE(LogisticRegression(), 20)

rfe.fit(X, Y)

feature_rfe_scoring = pd.DataFrame({

        'feature': X.columns,

        'score': rfe.ranking_

    })

feat_rfe_20 = feature_rfe_scoring[feature_rfe_scoring['score'] == 1]['feature'].values

print(feat_rfe_20)

 

 

 

6.稳定性特征选择方法

是一基于二次抽样和特征选择算法相结合的方法,主要思想是在不同的数据子集以及特征子集中运行算法,不断重复,每一次利用模型的反馈选中好的特征,最后可以统计每个特征被选为优秀特征的次数除以所在特征集被用到的次数作为分数,选出好的特征。

 

可以利用一下模型实现:
from sklearn.linear_model import RandomizedLogisticRegression as RLR

Model=RLR(C=1, scaling=0.5,

sample_fraction=0.75,

n_resampling=200, selection_threshold=0.25)

RLR.fit(x,y)

Print(RLR.get_support())

 

7.将各个方法选出来的特征融合在一起

features = np.hstack([

        feat_var_threshold,

        feat_imp_20,

        feat_scored_20,

        feat_rfe_20

    ])

features = np.unique(features)

print(features)

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

 

 

6.特征评估

如果将特征进行分组后,例如数值型特征以及字符型特征,或者稀疏型与稠密型特征,可以分别用不同的特征集合训练模型,考察模型的效果

比如有人说稠密型的特征比较适合数模型,例如gbdt,xgb,稀疏特征则适合于线性模型,例如lr,lasso。

© 著作权归作者所有

共有 人打赏支持
WYF_DATA
粉丝 1
博文 4
码字总数 5290
作品 0
机器学习实战(一)KNN算法:简单的数据分类和决策

说明:该案例来源 机器学习实战之KNN,里面有更详尽的KNN原理分析和案例实现流程详解,是一个关于机器学习实战的不错的学习资料,推荐一波。出于编程实践和机器学习算法梳理的目的,按照自己...

stayfoolish_fan
05/13
0
0
面向机器学习数据平台的设计与搭建

机器学习作为近几年的一项热门技术,不仅凭借众多“人工智能”产品而为人所熟知,更是从根本上增能了传统的互联网产品。在近期举办的2018 ArchSummit全球架构师峰会上,个推首席数据架构师袁...

个推
07/17
0
0
面向机器学习:数据平台设计与搭建实践

机器学习作为近几年的一项热门技术,不仅凭借众多“人工智能”产品而为人所熟知,更是从根本上增能了传统的互联网产品。在近期举办的2018 ArchSummit全球架构师峰会上,个推首席数据架构师袁...

个推
前天
0
0
面向机器学习:数据平台的设计与搭建

机器学习作为近几年的一项热门技术,不仅凭借众多“人工智能”产品而为人所熟知,更是从根本上增能了传统的互联网产品。在近期举办的2018 ArchSummit全球架构师峰会上,个推首席数据架构师袁...

个推君
07/18
0
0
机器学习实践心得:数据平台设计与搭建

机器学习作为近几年的一项热门技术,不仅凭借众多“人工智能”产品而为人所熟知,更是从根本上增能了传统的互联网产品。下文将基于本人所负责的个推大数据平台搭建工作,与大家分享个推数据平...

eva7
07/17
0
0
专访唐亘:计算机编程和数学建模缺一不可

点击图片购书 参与文末话题讨论,每日赠送异步图书 ——异步小编 异步社区:可以介绍一下自己吗?目前正在做哪些事情? 唐亘:大家好,我叫唐亘,是《精通数据科学:从线性回归到深度学习》一...

异步社区
06/03
0
0
基于斯坦福CS231n课程的学习经验与实战技巧|分享总结

雷锋网(公众号:雷锋网)AI研习社按:斯坦福大学的CS231n主要介绍卷积神经网络相关的深度学习知识,课程从算法的公式到实践进行了全面的介绍。基于该课程的三场实战分享直播课近期在AI研习社上...

sanman
04/24
0
0
报名 | 恰到好处的机器学习入门课,一站搞定基础+算法+实战

     每天能留给学习的时间不多,当入门一个新技术的时候,多么希望学到的每一个字都能立马派上用场,所以我们会偏向选择那些可以“速成”但学完依旧没有什么卵用的技能,对于可以提升整...

机器之心
07/17
0
0
Web开发工程师转型机器学习的实战经验

摘要: 历经两个月对深度学习和计算机视觉领域进行探索,获得一些经验与总结。 作为一名Web开发人员,我发现计算机视觉和机器学习领域的快速发展是让人感到兴奋,但是我没有任何使用这些技术...

阿里云云栖社区
07/12
0
0
算法高手再度集结 通关秘籍拿走不谢

近日,第二届腾讯广告算法大赛启动报名。截至目前,已收到来自中国、美国、欧洲、澳洲等20个多国家和地区的报名。众多算法高手已加入到这场烧脑竞技中。为了让更多参赛者在未来的比赛中有更好...

tw6cy6ukydea86z
05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

高效编写Dockerfile的几条准则

概述 Dockerfile 是专门用来进行自动化构建镜像的编排文件(就像Jenkins 2.0时代的Jenkinsfile是对Jenkins的Job和Stage的编排一样),我们可以通过 docker build 命令来自动化地从 Dockerfi...

小致dad
36分钟前
0
0
SpringBoot | 第十章:Swagger2的集成和使用

前言 前一章节介绍了mybatisPlus的集成和简单使用,本章节开始接着上一章节的用户表,进行Swagger2的集成。现在都奉行前后端分离开发和微服务大行其道,分微服务及前后端分离后,前后端开发的...

oKong
今天
9
0
Python 最小二乘法 拟合 二次曲线

Python 二次拟合 随机生成数据,并且加上噪声干扰 构造需要拟合的函数形式,使用最小二乘法进行拟合 输出拟合后的参数 将拟合后的函数与原始数据绘图后进行对比 import numpy as npimport...

阿豪boy
今天
7
0
云拿 无人便利店

附近(上海市-航南路)开了家无人便利店.特意进去体验了一下.下面把自己看到的跟大家分享下. 经得现场工作人员同意后拍了几张照片.从外面看是这样.店门口的指导里强调:不要一次扫码多个人进入....

周翔
昨天
1
0
Java设计模式学习之工厂模式

在Java(或者叫做面向对象语言)的世界中,工厂模式被广泛应用于项目中,也许你并没有听说过,不过也许你已经在使用了。 简单来说,工厂模式的出现源于增加程序序的可扩展性,降低耦合度。之...

路小磊
昨天
194
1
npm profile 新功能介绍

转载地址 npm profile 新功能介绍 npm新版本新推来一个功能,npm profile,这个可以更改自己简介信息的命令,以后可以不用去登录网站来修改自己的简介了 具体的这个功能的支持大概是在6这个版...

durban
昨天
1
0
Serial2Ethernet Bi-redirection

Serial Tool Serial Tool is a utility for developing serial communications, custom protocols or device testing. You can set up bytes to send accordingly to your protocol and save......

zungyiu
昨天
1
0
python里求解物理学上的双弹簧质能系统

物理的模型如下: 在这个系统里有两个物体,它们的质量分别是m1和m2,被两个弹簧连接在一起,伸缩系统为k1和k2,左端固定。假定没有外力时,两个弹簧的长度为L1和L2。 由于两物体有重力,那么...

wangxuwei
昨天
0
0
apolloxlua 介绍

##项目介绍 apolloxlua 目前支持javascript到lua的翻译。可以在openresty和luajit里使用。这个工具分为两种模式, 一种是web模式,可以通过网页使用。另外一种是tool模式, 通常作为大规模翻...

钟元OSS
昨天
2
0
Mybatis入门

简介: 定义:Mybatis是一个支持普通SQL查询、存储过程和高级映射的持久层框架。 途径:MyBatis通过XML文件或者注解的形式配置映射,实现数据库查询。 特性:动态SQL语句。 文件结构:Mybat...

霍淇滨
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部