随着我们在机器学习、数据建模、数据挖掘分析这条发展路上越走越远,其实越会感觉到特征工程的重要性,平时我们在很多地方都会看到一些很好的特征工程技巧,但是都会是一个完整项目去阅读,虽然说这样子也可以学习挖掘思路,但有的时候浓缩的技巧总结也是十分重要!

GitHub上有一个专门针对特征工程技巧的“锦囊”,叫做《Tips-of-Feature-engineering》,作者把网路上、书本上的一些特征工程的项目,抽取其中的挖掘技巧,并把这些小技巧打包成一个又一个的小锦囊,供大家去检索并且学习,还蛮不错的!

项目地址为:

https://github.com/Pysamlam/Tips-of-Feature-engineering

大家可以先看看目前更新到的内容明细:

项目目前更新到19节,一般来说是每天一更新,每一节都会有配套的数据集以及代码,下面我们拿几个“锦囊”来看一下!

Tip8:怎么把几个图表一起在同一张图上显示?

这里是使用泰坦尼克号的数据集,前期我们做EDA的时候需要探查数据的分布,从而发现其中的规律,这一节的技巧就是教我们如何画一些常见的图形,同时显示在同一张图上。

关键代码

import matplotlib.pyplot as plt# 设置figure_size尺寸
plt.rcParams['figure.figsize'] = (8.0, 6.0)fig = plt.figure()# 设定图表颜色
fig.set(alpha=0.2)# 第一张小图
plt.subplot2grid((2,3),(0,0))
data_train['Survived'].value_counts().plot(kind='bar')
plt.ylabel(u"人数")
plt.title(u"船员获救情况 (1为获救)")# 第二张小图
plt.subplot2grid((2,3),(0,1))
data_train['Pclass'].value_counts().plot(kind="bar")
plt.ylabel(u"人数")
plt.title(u"乘客等级分布")# 第三张小图
plt.subplot2grid((2,3),(0,2))
plt.scatter(data_train['Survived'], data_train['Age'])
plt.ylabel(u"年龄")
plt.grid(b=True, which='major', axis='y')
plt.title(u"按年龄看获救分布 (1为获救)")# 第四张小图,分布图
plt.subplot2grid((2,3),(1,0), colspan=2)
data_train.Age[data_train.Pclass == 1].plot(kind='kde')
data_train.Age[data_train.Pclass == 2].plot(kind='kde')
data_train.Age[data_train.Pclass == 3].plot(kind='kde')
plt.xlabel(u"年龄")
plt.ylabel(u"密度")
plt.title(u"各等级的乘客年龄分布")
plt.legend((u'头等舱', u'2等舱',u'3等舱'),loc='best')# 第五张小图
plt.subplot2grid((2,3),(1,2))
data_train.Embarked.value_counts().plot(kind='bar')
plt.title(u"各登船口岸上船人数")
plt.ylabel(u"人数")
plt.show()

我们从上面的可视化操作结果可以看出,其实可以看出一些规律,比如说生还的几率比死亡的要大,然后获救的人在年龄上区别不大,然后就是有钱人(坐头等舱的)的年龄会偏大等。

Tip15:如何使用sklearn的多项式来衍生更多的变量?

关于这种衍生变量的方式,理论其实大家应该很早也都听说过了,但是如何在Python里实现,也就是今天在这里分享给大家,其实也很简单,就是调用sklearnPolynomialFeatures方法,具体大家可以看看下面的demo。

这里使用一个人体加速度数据集,也就是记录一个人在做不同动作时候,在不同方向上的加速度,分别有3个方向,命名为x、y、z。

关键代码

# 扩展数值特征
from sklearn.preprocessing import PolynomialFeaturesx = df[['x','y','z']]
y = df['activity']poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=False)x_poly = poly.fit_transform(x)
pd.DataFrame(x_poly, columns=poly.get_feature_names()).head()

就这样子简单的去调用,就可以生成了很多的新变量了。

Tip17:如何把分布修正为类正态分布?

今天我们用的是一个新的数据集,也是在kaggle上的一个比赛,大家可以先去下载一下:

下载地址:

https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data

import pandas as pd
import numpy as np
# Plots
import seaborn as sns
import matplotlib.pyplot as plt# 读取数据集
train = pd.read_csv('./data/house-prices-advanced-regression-techniques/train.csv')
train.head()

首先这个是一个价格预测的题目,在开始前我们需要看看分布情况,可以调用以下的方法来进行绘制:

sns.set_style("white")
sns.set_color_codes(palette='deep')
f, ax = plt.subplots(figsize=(8, 7))
#Check the new distribution
sns.distplot(train['SalePrice'], color="b");
ax.xaxis.grid(False)
ax.set(ylabel="Frequency")
ax.set(xlabel="SalePrice")
ax.set(title="SalePrice distribution")
sns.despine(trim=True, left=True)
plt.show()

我们从结果可以看出,销售价格是右偏,而大多数机器学习模型都不能很好地处理非正态分布数据,所以我们可以应用log(1+x)转换来进行修正。那么具体我们可以怎么用Python代码实现呢?

# log(1+x) 转换
train["SalePrice_log"] = np.log1p(train["SalePrice"])sns.set_style("white")
sns.set_color_codes(palette='deep')
f, ax = plt.subplots(figsize=(8, 7))sns.distplot(train['SalePrice_log'] , fit=norm, color="b");# 得到正态分布的参数
(mu, sigma) = norm.fit(train['SalePrice_log'])plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],loc='best')
ax.xaxis.grid(False)
ax.set(ylabel="Frequency")
ax.set(xlabel="SalePrice")
ax.set(title="SalePrice distribution")
sns.despine(trim=True, left=True)plt.show()

目前这个项目更新到了19节,但是会持续不断更新“锦囊”,欢迎大家来进行star哦!

项目地址为:

https://github.com/Pysamlam/Tips-of-Feature-engineering

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(第一部分)备注:加入本站微信群或者qq群,请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”

喜欢文章,点个在看

强烈推荐!分享一个持续连载的《特征工程小锦囊》项目,代码已开源!相关推荐

  1. 分享一个python采集中国福利彩票的小代码

    分享一个python采集中国福利彩票的小代码 分享一个python采集中国福利彩票的小代码 能采集双色球,七乐彩,3D彩票任意一段时间的开奖号码,根据需求取消请求头注释,就能采集数据.(初学者请勿评价 ...

  2. 机器学习和特征工程理论与python代码实现 晓物智联

    文章来源于:http://www.52phm.cn/blog/detail/23 最初来源于本人的kesci专栏 课题:特征工程理论及代码实现 日期:2019.9.21 作者:小知同学 描述:本篇比较 ...

  3. ECCV2022 | 人大提出轻量级基于注意力的特征融合机制,在多个公开数据集上有效!代码已开源!

    ECCV2022 | 人大提出轻量级基于注意力的特征融合机制,在多个公开数据集上有效!代码已开源! [写在前面] 本文在文本到视频检索的新背景下,作者重新探讨了特征融合这一古老的课题.与以往的研究只考 ...

  4. python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源)

    python+opencv别踩白块儿游戏辅助,一天一个opencv小项目(已开源) 见链接

  5. 推荐分享一个自定义绑定控件(附源码)

    在asp.net中,对于一个以数据处理为主的UI层,我们往往需要写很多的代码去实现数据的绑定,当然我们也需要费一点心思从控件上去收集数据. 下面,我分享一个自定义控件来实现双向绑定. 一.基于控件ID ...

  6. 【华为云技术分享】如何用交互式特征工程工具进行数据分析处理

    [摘要] 根据业界知名分析机构的调查发现,在机器学习日常开发工作中,数据预处理和特征工程(涉及数据的分析和处理)约占工作量的60%以上,对于机器学习来说至关重要. 数据分析和处理的问题与挑战 近年来, ...

  7. 分享一个SpringBoot+Vue豆宝社区手把手免费项目实战视频教程

    豆宝社区项目实战视频教程简介 本项目实战视频教程全部免费,配套代码完全开源.手把手从零开始搭建一个目前应用最广泛的Springboot+Vue前后端分离多用户社区项目.本项目难度适中,为便于大家学习, ...

  8. [星系漫游指南]分享一个查看近期火星天气的小程序

    首先证件照: Github 地址:https://github.com/dongsuo/marsWeather 线上小程序: 1. 介绍 本指南目前可以查看近日火星的天气,包括气温.风速.风向.气压等 ...

  9. 分享一个刷网页PV的python小脚本

    学习Python之余,分享一个用来刷网页PV的Python小脚本..... [root@huanqiu ~]# cat www.py #!/usr/bin/python # coding: UTF-8 ...

最新文章

  1. jittor和pytorch生成网络对比之unit
  2. 对数据库进行黑盒测试操作?
  3. 在SQL Server中判断一个作业是否正在运行
  4. 在一表中设置组合主键(两个字段组合成一个主键)
  5. java网格式布局登录界面_Java学习笔记------自己书写的登录界面实例
  6. 基于用户的协同过滤(余弦相似度)
  7. MySQL 优化实战记录 1
  8. oracle instr函数 收藏
  9. Java之品优购部署_day03(6)
  10. 一键移植工具_让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)
  11. Activity的四种加载模式(转载)
  12. TextRank算法原理和提取关键词的主要过程详解 计算句子相似度 计算句子重要性公式
  13. app底部导航栏的设计模板素材
  14. python 希尔伯特变换_信号处理——Hilbert变换及谱分析
  15. 电容或电感的电压_如何通俗的理解电流,电压,电阻,电容和电感?
  16. 读《从优秀到卓越》乱摘
  17. Unity机器学习库ml-agents新版本的环境搭建
  18. 某享瘦app登录逆向
  19. 高清卫星影像DEM各个遥感卫星数据免费下载,3款软件4个网站推荐给你,从此不再为数据发愁
  20. 2021-10-16windows系统还原点创建/查看/配置/删除

热门文章

  1. JVM-运行时数据区
  2. 动态代理案例1:运用Proxy动态代理来增强方法
  3. Android Cursor类的概念和用法
  4. 每天看一片代码系列(二):WebSocket-Node
  5. eclipse log4j 日志直接定位到source
  6. winform之窗体固定
  7. circRNA研究相关数据库,riboCIRC使用指南
  8. Spring Boot + JSP 创建web项目
  9. ADS2017打开出现cannot create the directory,解决办法。
  10. SLAM | 使用三维位姿图优化减少单目视觉里程计(3D Visual Odometry)定位轨迹的漂移(附源代码)