Feature generation。对于这个技术点,其实没有什么诀窍,就是一个,深刻理解咱们的数据的意义再加上一点点创造力。大家是不是很懵逼,哈哈,这就完啦????哈哈当然不是啦,但是这一块缺失没有一个统一的模式,具有一定的随机性。但是通过总结,咱们可以总结一下常用的模式,方便大家在应用的时候参考。                                                                                        2.1 Interaction。这个其实就是相当于交叉的意思,咱们可以将几个features直接的拼接在一起,形成一个“有意思”的新的feature,记住一定要有意义的,否则你不但白搞了,甚至原来好好的数据都被你搞砸了,不要为了装逼而装逼,咱要装逼于无形之中。那么这个有什么意义呢?首先它能将多个columns装换成一个column,方便咱们的数据处理;其次在有些特定的数据中,这种interaction更加能反映出数据的本质。具体怎么操作了,咱们通过一个简单的代码来展示,注意我只截取了我代码的一部分,默认数据都已经加载完毕,所以不要纠结我的代码的变量和数据哈,大家主要看过程和思路

interactions = data_raw["category"]+"_"+data_raw["country"]

baseline_data= baseline_data.assign(category_country = label_encoder.fit_transform(interactions))

上面的第一句代码就是咱们interaction的部分,第二句是讲interaction过后的数据label encoding并且加入到咱们的数据集里面,简单明了。上面是将原始数据中的category 和 country连接在一起从而形成一个新的feature                                       2.2 numerical transforming。这是什么意思呢,对于有些numerical data的columns,他们的数据分布是很不均匀的,或者说他们的数值太大或者太小,有的时候不适合咱们的数据的训练,可能会出现vanishing gradient或者gradient explode的情况。具体啥叫vanishing gradient和gradient exploding,咱们在后面的内容在慢慢解释。暂时只需要知道这是个很麻烦的事情就好了,会导致咱们训练的模型不那么牛逼就行了。那么咱们通过什么方法解决呢?这里主要通过一些常见的数学的方式来解决,例如用log 或者 sqrt等等方式。咱们可以通过下面的代码来简单的展示一下

np.sqrt(baseline_data[‘goal‘])

np.log(baseline_data[‘goal‘])

从上面咱们可以看出,这里咱们主要还是通过numpy里面提供的API进行处理的,非常简单,简单跟1一样,好了这里就说到这了。    对了,忘记一个事儿,就是numerical transforming在tree-based模型中没有什么卵用的,因为tree-based的所有模型都是scale invariant的,就是tree-based模型都是不care数据的大小分布的。                                                                           2.3 rolling。这个就比较高级一点啦(相比前两种方式),首先咱们先要明白rolling的概念,其实rolling就是相当于在咱们的数据(series)上面卡上一个fixed-size的小window,然后对于这个window覆盖的数据进行一些简单的计算,例如:counting,mean,sum等等。如果大家还是觉得不懂,我把它的官方链接贴在这里,大家自己去看看,里面还有很多实例:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.rolling.html#pandas.Series.rolling 。那么我先写一个简单的小例子给大家参考一下哈

launched = pd.Series(data_raw.index,data_raw.launched,name="count_7_days").sort_index()

count_7_days= launched.rolling(‘7d‘).count()

count_7_days.index = launched.values

count_7_days= count_7_days.reindex(data_raw.index)

我先简单解释一下上面代码的意思哈,第一句是让时间作为这个series的index,第二句rolling是计算最近7天的的数量,第三第四句是讲数据还原到之前的index的顺序,房间重新join到原来的数据集中。那么rolling这种方式一般在什么情况下用呢?一般在你的数据有datetime的时候,或者前面数据会影响到后面的结果的时候,大家可以考虑一下下,但是这个是不一定的,还是需要大家有一定的creativity的。例如上面的例子就是统计最近7天一共上传的APP的数量,来判断某一个APP是否被下载的应用场景。一般情况下,最近上传的APP数量太多,被下载的概率就越低,所以他们还是有一定关联关系的。所以我generate一个新的feature还是有一定道理的。                                                                                                                                                       2.4 Time delta。从这个命名中咱们可以知道,这个跟time肯定有关系,这个大家猜的很对。time delta也是有一定随机性的,有时需要有时也不需要,也是要根据实际的数据的特性来决定的,甚至是根据工程师自己来决定的,跟上面的rolling有点相似。为了方便解释这其中的细节,我也是直接来一个例子然后慢慢解释

deftime_since_last_project_same_category(series):return series.diff().dt.total_seconds()/3600df= data_raw[[‘category‘,‘launched‘]].sort_values(‘launched‘)

group_category= df.groupby(‘category‘)

timedeltas=group_category.transform(time_since_last_project_same_category)

timedeltas= timedeltas.fillna(timedeltas.mean()).reindex(baseline_data.index)

上面前两行是一个计算相邻datatime之间的相差多少个小时,第三行创建一个按照排序好的launched time为index的dataframe, 第四行是按照category的条件来group前面创建的df, 第五行是计算group里面相邻数据之间的time delta,并且返回一个series, 第六行是填充这些空数据,并且按照原始数据的方式index重新排序方便加入到原始数据。流程就这样结束了。上面的场景是计算同一个category相邻app上传的时间差,这个其实也是会影响到咱们的APP是否被下载的因素。所以这个也是咱们的一个creativity,实际情况中千变万化,一定要根据实际情况来定,不能为了装逼而装逼,一定要根据实际的业务需要,否则适得其反。 好了,其实关于feature generation还有很多种方式,例如有些事计算两个columns之间的差值,取模等等,这里没有统一的标准,唯一的捷径和key就是咱们一定得理解咱们每一个columns和dataset的实际业务的意思,否则再牛逼的generation也拯救不了你。下面咱们进入到这一章的最后一节feature selection吧。

特征工程用java或python,机器学习-特征工程-Feature generation 和 Feature selection(示例代码)...相关推荐

  1. Java EasyExcel在Web网站中读写Excel的方法及示例代码

    使用EasyExcel可以更容易简单在Web网站中读写Excel,本文主要介绍在Java Web网站中读写Excel方法及示例代码. 原文地址:Java EasyExcel在Web网站中读写Excel ...

  2. Python机器学习—特征工程

    文章目录 1.数据集 1.1 可用数据集 1.2 scikit-learn数据集 sklearn小数据集 sklearn大数据集 1.3 数据集的划分 数据集划分API 2.特征工程 2.1特征工程包 ...

  3. python 机器学习——特征筛选实现

    特征筛选实现 1.特征筛选 2.特征筛选具体案例操作 参考文献: 1.特征筛选 (1)含义 特征筛选/选择( Feature Selection )也称特征子集选择( Feature Subset S ...

  4. python机器学习-建立随机森林预测模型并特征分析(完整代码+实现效果)

    实现功能: python机器学习-建立随机森林预测模型并特征分析. 实现效果: # 导入需要的库 from warnings import simplefilter simplefilter(acti ...

  5. python 算法教程 pdf 英文_上手实践《Python机器学习第2版》PDF中文+PDF英文+代码+Sebastian...

    学习机器学习,推荐学习<Python机器学习(第二版)>. <Python机器学习(第2版)>,图文并茂,代码详实,原理清晰,覆盖面适度,侧重算法实现和应用,作为入门级学习还是 ...

  6. 利用机器学习分析脑电数据(原理分析+示例代码+快速上手)

    由于本人对于脑机接口以及脑电技术的极度爱好(其实目的是:是把U盘插到大脑里,然后就不用学习了哈哈哈哈),近几月看了较多这方面的内容,变打算写下博客总结分析一下. 目录 一.  机器学习分析简介 二.机 ...

  7. java实时汇率的接口_eoLinker-API_Shop_汇率查询_API接口_Java调用示例代码

    eoLinker-API Shop 汇率查询 Java调用示例代码 汇率查询 提供汇率转换.单个货币对应的热门货币汇率行情,包括人民币.美元.欧元.英镑等100多种货币的实时汇率查询. 该产品拥有以下 ...

  8. java 添加一个线程、创建响应的用户界面 。 演示示例代码

    javajava 添加一个线程.创建响应的用户界面 . 演示示例代码 来自thinking in java 4 21章  部分的代码  夹21.2.11 thinking in java 4免费下载: ...

  9. java 如何导出json文件_java导出json格式文件的示例代码

    本文介绍了java导出json格式文件的示例代码,分享给大家,具体如下: import java.io.File; import java.io.FileWriter; import java.io. ...

最新文章

  1. plt保存图片_人工智能Keras CNN卷积神经网络的图片识别模型训练
  2. 【Java基础总结】IO流
  3. String(字符串) 比较大小 如果有A+BB+A 则AB
  4. P4396 [AHOI2013]作业
  5. Android 记住账号密码+自动登录
  6. K8s(二):130 道 K8s/Docker 配套练习题,学+练结合,一次吃透
  7. rocketmq的有序消费模式和并发消费模式的区别
  8. Atitit.判断汉字的编码 regedit 注册表里面的reg_sz
  9. c xaml语言教程,Xamarin XAML语言教程基础语法篇大学霸
  10. 将系统临时文件夹恢复到原来默认的目录
  11. STM8S003国产替代 DP32G003 32 位微控制器芯片
  12. 细数N个获取天气信息的免费 API ,附超多免费可用API 推荐(三)
  13. 用C语言编写一个电话簿管理系统
  14. 聊一聊推荐系统中ExploitExplore算法
  15. 非计算机专业学生计算机基础知识和应用能力,全国高校非计算机专业学生计算机基础知识和应用能力等级考试大纲...
  16. 离散数学知识点【复试】
  17. linux超神之旅二
  18. 基于微信小程序+SSM学生社团管理系统设计
  19. Bugtags 移动时代bug管理系统利器
  20. 硬件追捕 v1.3 官网

热门文章

  1. sklearn自学指南(part8)--普通最小二乘法
  2. 20应用统计考研复试要点(part25)--简答题
  3. 利用python爬虫(part4)--requests模块之requests.get方法
  4. 零基础学习爬虫并实战
  5. 为什么 SAP 电商云 Spartacus UI SSR 模式下的客户端应用,不会发起 product 请求
  6. Windows 环境下 git 客户端中的 git-bash 和 MINGW64
  7. SAP Spartacus index.html 里的 occ-backend-base-url 如何被解析的?
  8. SAP Fiori Elements 公开课第二单元学习笔记:Fiori Elements 架构
  9. 通过一个简单的例子,了解如何单步调试 Cypress 代码
  10. 如何在 SAP Spartacus 里添加自定义页面 - Custom Page