手把手带你入门和实践特征工程的万字笔记

开通VIP,畅享免费电子书等14项超值服

首页

好书

留言交流

下载APP

联系客服

2019.10.14

1)常见简易画图

2)检查缺失情况

#移除缺失值climate.dropna(axis=0,inplace=True)#检查缺失个数climate.isnull().sum()3)变量类别转换

需要还原一下:

Demo:

经过上面的处理,模型的精度可以达到0.73177,但我们可以继续优化吗?那是肯定的。

我们可以先看看所有特征的分布(特征少的时候可以这么看):

1)Z分数标准化

最为常用的标准化技术,利用了统计学中的z分数思想,也就是将数据转换为均值为0,标准差为1的分布,其在python中的调用方法:

2)min-max标准化

min-max标准化和z-score类似,其公式为:(X-Xmin)/(Xmax-Xmin)

在python中的调用方法:

#min-max标准化fromsklearn.preprocessingimportMinMaxScaler#实例化方法min_max=MinMaxScaler()#使用min-max标准化pima_min_maxed=pd.DataFrame(min_max.fit_transform(pima.fillna(-9)),columns=pima_columns)3)行归一化

行归一化针对的是每一行数据,不同于上面的两种方法(针对列),对行进行处理是为了保证每行的向量长度一样(也就是单位范围,unitnorm),有L1、L2范数。

如果我们对变量进行处理之后,效果仍不是非常理想,就需要进行特征构建了,也就是衍生新变量。

而在这之前,我们需要了解我们的数据集,先前两节中我们了解到了可以通过data.info和data.describe()来查看,同时结合数据等级(定类、定序、定距、定比)来理解变量。

本小节中我们使用一个自定义数据集。

首先我们需要对分类变量进行填充操作,类别变量一般用众数或者特殊值来填充,回顾之前的内容,我们也还是采取Pipeline的方式来进行,因此可以事先基于TransformMixin基类来对填充的方法进行封装,然后直接在Pipeline中进行调用,代码可以参考:

又或者利用scikit-learn的Imputer类来实现填充,而这个类有一个Strategy的方法自然就被继承过来用了,包含的有mean、median、most_frequent可供选择。

对上面的两种填充进行流水线封装:

完成了分类变量的填充工作,接下来就需要对分类变量进行编码了(因为大多数的机器学习算法都是无法直接对类别变量进行计算的),一般有两种办法:独热编码以及标签编码。

1)独热编码

独热编码主要是针对定类变量的,也就是不同变量值之间是没有顺序大小关系的,我们一般可以使用scikit_learn里面的OneHotEncoding来实现的,但我们这里还是使用自定义的方法来加深理解。

2)标签编码

标签编码是针对定序变量的,也就是有顺序大小的类别变量,就好像案例中的变量ordinal_column的值(dislike、somewhatlike和like可以分别用0、1、2来表示),同样的可以写个自定义的标签编码器:

3)数值变量分箱操作

以上的内容是对类别变量的一些简单处理操作,也是比较常用的几种,接下来我们就对数值变量进行一些简单处理方法的讲解。

有的时候,虽然变量值是连续的,但是只有转换成类别才有解释的可能,比如年龄,我们需要分成年龄段,这里我们可以使用pandas的cut函数来实现。

综上,我们可以对上面自定义的方法一并在Pipeline中进行调用,Pipeline的顺序为:

1)用imputer填充缺失值

2)独热编码city和boolean

3)标签编码ordinal_column

4)分箱处理quantitative_column

代码为:

这一小节我们使用一个新的数据集(人体胸部加速度数据集),我们先导入数据:

这边只介绍一种多项式生成新特征的办法,调用PolynomialFeatures来实现。

在流水线中的实现代码:

1)bagofwords

词袋法分成3个步骤,分别是分词(tokenizing)、计数(counting)、归一化(normalizing)。

2)CountVectorizer

将文本转换为矩阵,每列代表一个词语,每行代表一个文档,所以一般出来的矩阵会是非常稀疏的,在sklearn.feature_extraction.text中调用CountVectorizer即可使用。

3)TF-IDF

TF-IDF向量化器由两个部分组成,分别为代表词频的TF部分,以及代表逆文档频率的IDF,这个TF-IDF是一个用于信息检索和聚类的词加权方法,在sklearn.feature_extraction.text中调用TfidfVectorizer即可。

TF:即TermFrequency,词频,也就是单词在文档中出现的频率。

IDF:即InverseDocumentFrequency,逆文档频率,用于衡量单词的重要度,如果单词在多份文档中出现,就会被降低权重。

好了,经过了上面的特征衍生操作,我们现在拥有了好多好多的特征(变量)了,全部丢进去模型训练好不好?当然是不行了,这样子既浪费资源又效果不佳,因此我们需要做一下特征筛选,而特征筛选的方法大致可以分为两大类:基于统计的特征筛选和基于模型的特征筛选。

在进行特征选择之前,我们需要搞清楚一个概念:到底什么是更好的?有什么指标可以用来量化呢?

我们可以通过封装一个方法,把上面提及到的指标封装起来,方便后续的调用,代码如下:

通过上面的操作,我们可以创建一个模型性能基准线,用于对比后续优化的效果。接下来介绍一些常用的特征选择方法。

(2)假设检验也就是p值,作为一种统计检验,在特征选择中,假设测试得原则是:”特征与响应变量没有关系“(零假设)为真还是假。我们需要对每个变量进行检测,检测其与target有没有显著关系。可以使用SelectKBest和f_classif来实现。一般P值是介于0-1之间,简而言之,p值越小,拒绝零假设的概率就越大,也就是这个特征与target关系更大。

(1)对于文本特征,sklearn.feature_extraction.text里的CountVectorizer有自带的特征筛选的参数,分别是max_features、min_df、max_df、stop_words,可以通过搜索这些参数来进行特征选择,可以结合SelectKBest来实现流水线。

(2)针对树模型,我们可以直接调用不同树模型算法里的特征重要度来返回特征重要度,比如DecisionTreeClassifier里的feature_importances_,(除此之外还有RandomForest、GBDT、XGBoost、ExtraTreesClassifier等等)都可以直接返回每个特征对于本次拟合的重要度,从而我们可以剔除重要度偏低的特征,可以结合SelectFromModel来实现流水线。

(3)使用正则化来筛选变量(针对线性模型)。有两种常用的正则化方法:L1正则化(Lasso)和L2正则化(岭)。

(1)如果特征是分类变量,那么可以从SelectKBest开始,用卡方或者基于树的选择器来选择变量;

(3)如果是二分类问题,可以考虑使用SelectFromModel和SVC;

THE END
1.数据分四种,分别是定类定序定距和定比定类数据,指数字只代表类别,没有顺序,不能比大小,不能四则计算。比如邮编,你不能说 100086 号是 100000 号+86 号,也不能说 100086 比 100085 大,有 100086 号有 100088 号也不意味着一定有 100087 号; 定序数据,数字代表“序数”或者“等级”,有顺序,可以比大小,但不能四则计算。比如等级,你可以说五...https://talk.quwj.com/topic/871
1.www.stats.gov.cn/zsk/snapshoot?reference=d466cfa12a8d807d0...知识库 知识分类:|知识来源: |发布日期:https://www.stats.gov.cn/zsk/snapshoot?reference=d466cfa12a8d807d0c267a76a75d1e42_2DF4A2519591B2823E278F8050D9622B
2.数据分析认清明确1、什么是数据分析。 - 通过对大量的数据进行科学的分析。 - 得出结论,提出建议,辅助公司企业的决策。 1 2 2、数据分析分为几步。 - 1.明确目的! - 2.收集数据! 自己的数据! 自动化采集的数据! - 3.数据处理! - 4.数据分析! 数据分析(业务)数据挖掘(代码+算法) ...https://blog.csdn.net/weixin_55846296/article/details/143975740
3.大模型是什么意思大模型的应用嘲有哪些→MAIGOO知识大模型是什么意思 大模型的应用场景有哪些 大模型全称为大型机器学习模型,是一种具有庞大参数规模和复杂计算结构的模型。大模型的设计目的是为了提高模型的表达能力和预测性能,以处理更加复杂的任务和数据。它们通常能够学习到更细微的模式和规律,具有更强的泛化能力和表达能力,在自然语言处理、图像识别、语音识别等领域...https://www.maigoo.com/goomai/315161.html
4.Alibaba最新1000多道Java面试题汇总详解,收藏起来慢慢刷!15、什么是拆装箱? 16、Java 中的包装类都是那些? 17、一个 java 类中包含那些内容? 18、那针对浮点型数据运算出现的误差的问题,你怎么解决? 19、面向对象的特征有哪些方面? 20、访问修饰符 public,private,protected,以及不写(默认) 时的区别? https://maimai.cn/article/detail?fid=1728969401&efid=esjJLvGGL4fAr1LArgq_cQ
5.网贷说中心是什么?真实含义及回应策略逾期资讯网贷说中心什么意思 网贷中心是指专门从事网贷工作的并不存在机构或部门。随着互联网金融的所谓迅速发展,网络借贷成为了一种新的而已借贷模式。由于借贷方和借款方之间的很多人信息不对称,以及借款方信用风险的都是增加,引起出现了借贷风险和逾期违约的同行疑问。 https://www.hezegd.com/lawnews/zixun/488882.html
6.A刊B刊C刊核心,是什么意思?SCISSCICSSCI等核心期刊,该...统计源期刊全称中国科技论文统计源期刊,是CSTPCD的数据来源,以文献引文数据为依据,选择多项指标进行综合筛选,收录自然科学类。 “统计源期刊”全称为“中国科技论文统计源期刊”(亦称中国科技核心期刊),统计源期刊目录每年都会出现在中国科技信息研究所每年公布一次的《中国科技期刊引证报告》中。中国科技信息研究所(ISTIC...https://mse.xauat.edu.cn/info/1024/1492.htm
7.什么是定类测量(名义测量类别测量)?现在常用的是美国学者史蒂文斯在1951年创立的测量层次分类法,即测量层次(level of measurement)分为定类测量、定序测量、定距测量和定比测量等四个层次,它们是由低到高四个层次的测量,它们测量所对应的变量依次为定类变量、定序变量、定距变量和定比变量,在调查中获得的观测数据也可依次称为定类数据、定序数据、...http://www.tjxzj.net/5614.html
8.百度指数是什么意思?详解百度指数的使用方法特色功能及常见问题...一、百度指数是什么意思 百度指数(英文:Baidu Index),是百度搜索引擎查看关键词搜索指数、资讯指数的一款产品,百度指数是以百度海量网民行为数据为基础的数据分享平台。百度指数不仅可以研究关键词搜索趋势、洞察网民需求变化、监测媒体舆情趋势以及定位数字消费者特征,还可以从行业的角度,分析市场的特点。 https://www.youhuaxing.cn/seojianzhan/17457.html
9.把数据导入SPSSPRO之后系统把定量变量识别成定类变量了怎么办,是...把数据导入SPSSPRO之后系统把定量变量识别成定类变量了怎么办,是因为什么原因,求解疑答惑。?是你数据的问题,一定存在非数值的单元格,你可以在excel中进行排查;另外就算是数值,也有可能为文本格式,以至于被识别成了文本;0 人收藏 0 人喜欢 分享至: https://bbs.spsspro.com/questions/128197/answers/2521
10.当论文用到统计学,什么时候用T检验,什么时候用F检验呢?检验两组样本的均值是否相等!主要用于定量数据和定类数据的差异关系研究,例如有一个班的学生数据,如果学生的成绩服从正太分布,想要研究身高和成绩的关系,就需要用到该方法,如果不服从正态分布,可采用MannWhitney检验。 Note: 两个独立样本的T检验,通常需要先进行F检验(方差齐性检验),检验两个独立样本的方差是否相同...https://cloud.tencent.com/developer/news/1261275
11.高考体检问答2024年高考生必看的高考体检大全,包括影响报考...10 体检卡上的数据一定要医生写吗?可以自己写吗? 答:不可以自己写,都是医生写的。 PART 02 体检前相关问题 11 饮食上需要注意什么吗? 答:参加体检的考生在体检前几天要尽量饮食清淡。上午体检的考生,因要抽血,切勿吃早餐;下午体检的考生,早上要吃的清淡些,喝些白开水,早上9时后就不要再吃东西了(是否空腹...https://www.lndwgz.cn/news/dawa/2482.html