特征处理

特征工程

一、特征处理

1. 正负样本不均衡问题

a)       Oversampleing

b)       修改损失函数

c)       取n份正样本 与 负样本 分别构建分类器,然后vote

2. 数值特征处理

a) 归一化

b) Log变换

c) 统计max min mean std

d) 离散化

e) HASH分桶

f) 每个类别下对应的变量统计值histogram(分布状况)

3. 分类型特征处理

a) one-hot编码

b) 哑变量

c) Hash与聚类处理(根据先验的背景,分出一些桶,落在每个桶里面的频数不一样;根据用户的行为去做一些款型的聚类)把高维离散化的信息压成低维。

d) 统计每个类别变量 iv值

4. 时间型特征处理

连续值:单页浏览时长/上次购买离现在的时间

离散值:一天中哪个时间段,一周中星期几,一年中哪个季度

Day_of_week=lambda x: datetime.strptime(x, ‘%Y-%m-%d %H:%M:%S’ ).weekday()

Month=lambda x: datetime.strptime(x, ‘%Y-%m-%d %H:%M:%S’ ).month()

Week_number=lambda x:datetime.strptime(x, ‘%Y-%m-%d %H:%M:%S’ ).strftime(‘%v’)

Seasons=[0,0,1,1,2,2,2,3,3,30]

Season=lambda x:  seasons[(datetime.strptime(x, ‘%Y-%m-%d %H:%M:%S’ ).month-1

5. 文本特征处理

词袋:文本数据分词后,去掉停用词,剩下的词组成list,在词库中的映射稀疏向量

From sklearn.feature_extraction.text import CountVectorizer

Vectorizer=Countvectorizer(min_df=1)

Corpus=[

‘This is the first document’

‘This is the second second document.’

‘And the third one.’]

X=vectorizer.fit_transform(corpus)

把词袋中的词扩充到n-gram:

使用TF-idf特征:是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时随着它在语料库中出现的频率成反比下降。

TF=(词t在当前文中的出现次数)/(t在全部文档中出现次数)

IDF=ln(总文档数/含t的文档数)

TF-IDF权重=TF(t)* IDF(t)

Word2vec:压缩成稠密矩阵,工具用google的word2vec或者python中gensim

6.特征处理之统计特征

天池比赛往往更加注重特征的处理,常常需要对一些变量做处理,比如加减平均(商品价格超过平均价格多少、用户在某个品类下消费超过平均用户多少),分位线,次序型(排在第几位),比例类(好/中/差评比例,你已经超过全国百分之。。。的同学)

8.特征处理之组合特征

简单组合特征:拼接型

GBDT产生特征组合路径

GBDT+FM/GBDT+LR

二、特征选择

过滤型:

比如LR这种线性模型,考虑变量与结果之间的相关性,排序留下TOP相关的特征部分,皮尔森相关系数,互信息,距离相关度,缺点是没有考虑特征之间的关联作用,可能把有用的关联特征误踢。一般不怎么用,因为大部分不是Liner模型。

From scipy.stats import personr

Print personr(x,y)

或者直接用sklearn中from sklearn.feature_selection import SelectKBest(选出其中K个,K可以指定);from sklearn.feature_selection import chi2

X_new=SelectKBest(chi2, k=2).fit_transform(x,y)

包裹型:

把特征选择看做一个特征子集的搜索问题,筛选各种特征子集,用模型评估效果。

典型的包裹型算法为“递归特征删除算法”

From sklearn.feature_selection import RFE

From sklearn.linear_model import LinearRegression

Lr=linearRegression()

Rfe=RFE(lr, n_feature_to_selection=1)

Rfe.fit(x,y)

Print sorted(zip(map(lambda x :round(x, 4), rfe.ranking_), names))

嵌入型:

最常见的方式是用正则化来做特征选择,L1正则化有截断性效应,有些参数前面系数为0(从而可以达到特征选择);而L2正则化有缩放效应,每个参数前面都有系数,只是整体的系数较小,参数压缩。

From sklearn.feature_selection import SelectFromModel

Lsvc=LinearSVC(C=0.01, penalty=’l1’, dual=False).fit(x, y)

Model=SelectFromModel(lsvc, prefit=True)

X_new=model.transform(x)

时间: 2024-08-23 13:14:55

特征处理的相关文章

c#简要概括面向对象的三大特征

要去面试了,朋友给我出个问题: 一,封装: 我们可以把世界上任何一个东西都看作为一个对象,那么我们这里以人为例,一个人就肯定是一个对象了. 那么封装是什么呢?封装就是这个人要完成一件事情,他所需要的任何工具都带在了自己的身上,所需要的技术也都装在了自己的脑子里了.不需要借助于别人的力量就能完成这一件事情.这个有什么好处呢?好处就是如果我要吩咐这个人去完成一件事情,我不需要知道他是怎么完成的,也不需要协助他去完成,只要知道结果,他完成了就OK了.至于他是先干什么后干什么我不干涉,这有助于他更快更好

Java多线程-新特征-阻塞队列ArrayBlockingQueue

阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止.同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用元素为止. 有了这样的功能,就为多线程的排队等候的模型实现开辟了便捷通道,非常有用. java.util.concurrent.BlockingQueue继承了java.util.Queue接口,可

OpenCV4Android 提取特征点描述符(Feature Descriptor)

OpenCV4Android 提取特征点描述符(Feature Descriptor) 在得到keypoints之后(参考前面),通过使用相应的FeatureDescriptor就可计算得到关键点处的描述子. Native Code: JNIEXPORT void JNICALL Java_com_example_test_NativeUtil_computeDescripors( JNIEnv *env, jclass thiz, jlong mGrayAddr, jlong mRgbaAdd

02. Android SDK 特征

SDK (software development kit)软件开发工具包.被软件开发工程师用于为特定的软件包.软件框架.硬件平台.操作系统等建立应用软件的开发工具的集合. 因此 Android SDK 就是Android专属的软件开发工具包. Android SDK特征 访问硬件(包括摄像头.GPS和传感器) Android包含了用来设计设备硬件开发的API开发.这些API库可以保证不必为不同的设备创建软件的特殊实现,因此,创建的Android应用程序 就可以像预料中的那样运行在所有支持And

Kaldi的delta特征

Delta特征是将mfcc特征(13维)经过差分得到的 它是做了一阶二阶的差分 提取的mfcc特征是13维的 然后通过delta就变成了39维 一阶差分: D(P(t))=P(t)-P(t-1) 二阶差分: D(D(P(t)))=(P(t)-P(t-1))-(P(t-1)-P(t-2)) Delta=Δ=差分 在 voxforge/s5/run.sh:116 rm/s5/run.sh:80 vystadial_cz/s5/run.sh:82 都注释了下一行的训练使用delta+delta-del

机器学习系列(6)_从白富美相亲看特征预处理与选择(下)

作者:viewmode=contents">龙心尘 &&寒小阳 时间:2016年1月. 出处: http://blog.csdn.net/longxinchen_ml/article/details/50493845. http://blog.csdn.net/han_xiaoyang/article/details/50503115 声明:版权全部,转载请联系作者并注明出处 1. 剧情一:挑螃蟹的秘密 李雷与韩梅梅的关系发展得不错.趁国庆休假一起来天津玩. 今天,李雷十分

面向对象的特征一:封装与隐藏

* 面向对象的特征一:封装与隐藏 3w: what? why? how? * * 1.问题的引入? * 我们在创建了一个类的对象以后,通过"对象.属性"的方式,可以给对象的属性赋值.对此属性的赋值,是限制的,比如:数据类型和 * 数据类型储值范围的限制.但是,在实际问题中,还通过需要额外的限制.同时这些额外的限制,不可能在属性的声明中加上限制逻辑. * 那么,我们只能考虑通过方法,对属性的赋值进行额外的限制.同时,我们必须禁止再直接通过"对象.属性"的方式,对属性进

构造函数和析构函数?它们有什么作用? 面向对象的特征有哪些?

析构函数:构造函数是在对象实例化时自动执行,而析构函数在对象被销毁时自动执行. 构造函数:当类被实例化时,会自动执行的函数 构造函数有什么作用:我们在使用类的过程中,有时需要立即为实例化对象的多个字段父子,如果通过手工,会带来很多不可预测的问题,而如果在对象创建过程中自动执行,则会带来很多方便. 析构函数有什么作用:默认情况下,php仅释放对象属性所占用的内存,并不销毁对象相关的资源,而利用析构函数在使用一个对象之后执行代码来清除内存,并将对象从内存中销毁 面向对象的特征有哪些? 封装.继承.多

随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客

目标检測.识别.分类.特征点的提取 David Lowe:Sift算法的发明者,天才. Rob Hess:sift的源代码OpenSift的作者,个人主页上有openSift的下载链接.Opencv中sift的实现.也是參考这个. Koen van de Sande:作者给出了sift,densesift,colorsift等等经常使用的特征点程序.输出格式见个人主页说明,当然这个特征点的算法,在Opencv中都有实现. Ivan Laptev:作者给出了物体检測等方面丰富C\C++源代码,及部

特征的生命周期

前言:传统的数据挖掘中都是在提取特征上做文章,而这又很大程度上取决于工程师自身的特征工程能力以及业务处理中的多年经验,所以想写一篇文章总结下这其中有脉可循的规律 摘要: 1.特征的可用性评估 2.特征的修剪 3.特征的可视化 4.特征的监控 5.特征的维护 内容: 1.特征的可用性评估 如果特征的缺失率高,并且不是重要性特征,可以直接弃用 如果特征方差小,说明特征的区分性并不高,可以删去这部分特征 2.特征的修剪: 识别对于模型有害的离群值/异常值(3倍标准差),或者只取数据分布中占80%的数据