Feature Engineering 特征工程 3. Feature Generation
文章目录
- 1. 组合特征
- 2. 过去7天的数据
- 3. 上一个相同类型的项目的时间
- 4. 转换数值特征
learn from https://www.kaggle.com/learn/feature-engineering
上一篇:Feature Engineering 特征工程 2. Categorical Encodings
下一篇:Feature Engineering 特征工程 4. Feature Selection
从原始数据创建新特征是改进模型的最佳方法之一
例如,数据有很长连续时间的,我们可以把最近一周的提取出来作为一个新的特征
1. 组合特征
最简单方法之一是组合特征
例如,如果一条记录的国家/地区为"CA"
,类别为"Music"
,则可以创建一个新值" CA_Music"
可以从所有分类特征中构建组合特征,也可以使用三个或更多特征进行交互,但是效果往往会变坏
interactions = ks['category']+'_'+ks['country']
,像python一样直接相加interactions.head(10)
0 Poetry_GB
1 Narrative Film_US
2 Narrative Film_US
3 Music_US
4 Film & Video_US
5 Restaurants_US
6 Food_US
7 Drinks_US
8 Product Design_US
9 Documentary_US
dtype: object
- 将新特征
assign
进数据
label_enc = LabelEncoder()
data_interaction = X.assign(category_country=label_enc.fit_transform(interactions))
data_interaction.head()
2. 过去7天的数据
launched = pd.Series(ks.index, index=ks.launched, name="count_7_days").sort_index()
# 数据值为索引, 新的索引为建立的时间,新特征名称, 按索引(时间)排序
launched.head(20)
launched
1970-01-01 01:00:00 94579
1970-01-01 01:00:00 319002
1970-01-01 01:00:00 247913
1970-01-01 01:00:00 48147
1970-01-01 01:00:00 75397
1970-01-01 01:00:00 2842
1970-01-01 01:00:00 273779
2009-04-21 21:02:48 169268
2009-04-23 00:07:53 322000
2009-04-24 21:52:03 138572
2009-04-25 17:36:21 325391
2009-04-27 14:10:39 122662
2009-04-28 13:55:41 213711
2009-04-29 02:04:21 345606
2009-04-29 02:58:50 235255
2009-04-29 04:37:37 98954
2009-04-29 05:26:32 342226
2009-04-29 06:43:44 275091
2009-04-29 13:52:03 284115
2009-04-29 22:08:13 32898
Name: count_7_days, dtype: int64
发现最顶上的7个数据是错误的(时间一样),本节里暂时不去考虑
.rolling('7d')
,设置一个窗口
count_7_days = launched.rolling('7d').count()-1 # -1表示不包含当前日期
print(count_7_days.head(20))
launched
1970-01-01 01:00:00 0.0
1970-01-01 01:00:00 1.0
1970-01-01 01:00:00 2.0
1970-01-01 01:00:00 3.0
1970-01-01 01:00:00 4.0
1970-01-01 01:00:00 5.0
1970-01-01 01:00:00 6.0
2009-04-21 21:02:48 0.0
2009-04-23 00:07:53 1.0
2009-04-24 21:52:03 2.0
2009-04-25 17:36:21 3.0
2009-04-27 14:10:39 4.0
2009-04-28 13:55:41 5.0
2009-04-29 02:04:21 5.0
2009-04-29 02:58:50 6.0
2009-04-29 04:37:37 7.0
2009-04-29 05:26:32 8.0
2009-04-29 06:43:44 9.0
2009-04-29 13:52:03 10.0
2009-04-29 22:08:13 11.0
Name: count_7_days, dtype: float64
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.plot(count_7_days[7:]);
plt.title("最近7天的数据")
plt.show()
- 把新特征数据,
reindex
后,跟原数据合并
count_7_days.index = launched.values
count_7_days = count_7_days.reindex(ks.index)
count_7_days.head(10)
0 1487.0
1 2020.0
2 279.0
3 984.0
4 752.0
5 522.0
6 708.0
7 1566.0
8 1048.0
9 975.0
Name: count_7_days, dtype: float64
X.join(count_7_days).head(10)
,join
合并
3. 上一个相同类型的项目的时间
比如,电影之类的上映,如果同类型的扎堆了,可能被对手抢占了份额
def time_since_last_project(series):return series.diff().dt.total_seconds()/3600
df = ks[['category','launched']].sort_values('launched')
# 按时间排序
timedeltas = df.groupby('category').transform(time_since_last_project)
# 按分类分组,然后调用函数进行转换,算得上一个同类的时间跟自己的间隔是多少小时
timedeltas.head(20)
- NaN 表示该类型是第一次出现,填上均值或者中位数
- 然后跟其他数据合并之前需要把index调整成一致
timedeltas = timedeltas.fillna(timedeltas.median()).reindex(X.index)
timedeltas.head(20)
4. 转换数值特征
Transforming numerical features,一些模型在数据分布是正态分布的时候,工作的很好,所以可以对数据进行开方、取对数转换
plt.hist(ks.goal, range=(0, 100000), bins=50);
plt.title('Goal');
plt.hist(np.sqrt(ks.goal), range=(0, 400), bins=50);
plt.title('Sqrt(Goal)');
plt.hist(np.log(ks.goal), range=(0, 25), bins=50);
plt.title('Log(Goal)');
- log 转换对基于树的模型没有什么用,但是对线性模型或者神经网络有用
- 我们需要转成新的特征,然后做一些测试,选择效果最好的转换方法。
上一篇:Feature Engineering 特征工程 2. Categorical Encodings
下一篇:Feature Engineering 特征工程 4. Feature Selection
Feature Engineering 特征工程 3. Feature Generation相关推荐
- Feature Engineering 特征工程 4. Feature Selection
文章目录 1. Univariate Feature Selection 单变量特征选择 2. L1 regularization L1正则 learn from https://www.kaggle ...
- Feature Engineering 特征工程 2. Categorical Encodings
文章目录 1. Count Encoding 计数编码 2. Target Encoding 目标编码 3. CatBoost Encoding learn from https://www.kagg ...
- Feature Engineering 特征工程 1. Baseline Model
文章目录 1. 读取数据 2. 处理label 3. 添加特征 4. 数据集切片 5. 训练 6. 预测 learn from https://www.kaggle.com/learn/feature ...
- ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架
ML之FE:结合Kaggle比赛的某一案例细究特征工程(Feature Engineering)思路框架 目录 Feature Engineering思路框架 1.结合Kaggle比赛的某一案例细究F ...
- 「特征工程」之零基础入门数据挖掘
Datawhale 作者:吴忠强,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习应该从哪些角度做特征工程?从哪些角度做数据清洗,如何对特征进行增删,如何使用PCA降维技术等. 特征工 ...
- 常用特征工程方法总结
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 摘要:对于数据挖掘项目,本文将学习应该从哪些角度做特征工程?从哪些 ...
- 【数据竞赛】Kaggle实战之特征工程篇-20大文本特征(下)
作者:尘沙杰少.樱落.新峰.DOTA.谢嘉嘉 特征工程--文本特征下半篇! 前 言 这是一个系列篇,后续我们会按照我们第一章中的框架进行更新,因为大家平时都较忙,不会定期更新,如有兴趣欢迎长期关注我们 ...
- 【零基础入门数据挖掘】-特征工程
Datawhale 作者:吴忠强,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习应该从哪些角度做特征工程?从哪些角度做数据清洗,如何对特征进行增删,如何使用PCA降维技术等. 特征工 ...
- [机器学习]总结特征工程干货
万字长文总结特征工程干货-云社区-华为云万字长文总结特征工程干货 1. 简介( Feature Engineering) 1.1问题定义"Feature engineering is the ...
最新文章
- iOS开发之 - 好玩的富文本
- 正式开课!如何学习相机模型与标定?(单目+双目+鱼眼+深度相机)
- elementUI+vue-cli el-table=》excel
- vue网址路由的实时检测
- java限流器_Smaphor(信号量)实现限流器
- redis和mecache和ehcache的特点
- C语言宏的特殊用法和几个坑
- 动易模板——制作前的准备工作
- 管家婆财贸双全 凭证记账 Date exceeds maximum of 19-12-31 报错解决办法
- 单片机C语言入门自学指南(前期准备)
- matlab画中国地图深浅,科学网—MATLAB绘制中国地图 - 栾威的博文
- BUG的跟踪管理、定位BUG
- 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)
- Altium Designer绘制电路原理图——PCB图
- 网上书城项目的需求分析、数据库表设计及前端界面的编写(项目进度一)
- HbuilderX中的MuMu模拟器调试
- 应聘时要问HR的7个问题
- springside4配置环境时无法下载到两个核心包
- 利用系统自带命令杀毒
- raid0,raid1,raid5