一份关于kaggle特征构建技巧和心得

在很长的一段时间里,我们表现出缺乏创造力,所做出的工作被认为是山寨、借鉴,这一点是不可否认,但随着自身的积累,厚积薄发,完成了从借鉴到创造的突破。创造力是我们工作的基本要素之一,这点在各行各业都显得很重要,在机器学习领域也无所例外。

创建特征也需要创造力,因此本文在这里列出了我日常生活中的一些想法,希望对其它人有些启发,以至于能够在此基础上利用创造力在Kaggle排行榜上取得很好的成绩。

这篇文章的灵感来自于 Beluga在Kaggle上分享的文章,本文部分内容是直接摘自该文章中,因此,读者也可以看看这篇文章。以下是分享的正文:

1.当不需要时,不要尝试预测未来:

如果训练/测试都来自同一时间线,那么就可以非常巧妙地使用特性。虽然这只是一个kaggle的案例,但可以利用这个优势。例如:在出租车出行持续时间挑战赛中,从训练数据中随机抽取测试数据。在这种情况下,可以使用不同类别变量的平均目标变量作为特征。在这种情况下, Beluga 实际上使用了不同工作日的平均目标变量。然后,将相同的平均值映射为一个变量,并将其映射到测试数据中。

2. logloss裁剪技术:

这部分内容是在Jeremy Howard的神经网络课程中学到的内容,它基于一个非常简单的想法。如果我们非常自信和不公正的,Logloss会受到很多惩罚。因此,在必须预测概率的分类问题情况下,将概率剪切在0.05-0.95之间会好得多,这样就对自己的预测变得不是十分确定。

3.以gzip格式提交到kaggle:

下面一小段代码可以帮助我们节省无数的上传时间:

df.to_csv('submission.csv.gz', index=False, compression='gzip')

4.如何最好地使用纬度和经度特征——第1部分:

在Beluga写的文章中,我最喜欢的一部分内容之一就是他如何使用经纬度(Lat / Lon)数据,这里创建了以下特征:

A.两个经纬度之间的Haversine距离:

def haversine_array(lat1, lng1, lat2, lng2):lat1, lng1, lat2, lng2 = map(np.radians, (lat1, lng1, lat2, lng2))AVG_EARTH_RADIUS = 6371  # in kmlat = lat2 - lat1lng = lng2 - lng1d = np.sin(lat * 0.5) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(lng * 0.5) ** 2h = 2 * AVG_EARTH_RADIUS * np.arcsin(np.sqrt(d))return h

B.两个经纬度之间的曼哈顿距离:

def dummy_manhattan_distance(lat1, lng1, lat2, lng2):a = haversine_array(lat1, lng1, lat1, lng2)b = haversine_array(lat1, lng1, lat2, lng1)return a + b

C.两个经纬度之间的方位:

def bearing_array(lat1, lng1, lat2, lng2):AVG_EARTH_RADIUS = 6371  # in kmlng_delta_rad = np.radians(lng2 - lng1)lat1, lng1, lat2, lng2 = map(np.radians, (lat1, lng1, lat2, lng2))y = np.sin(lng_delta_rad) * np.cos(lat2)x = np.cos(lat1) * np.sin(lat2) - np.sin(lat1) * np.cos(lat2) * np.cos(lng_delta_rad)return np.degrees(np.arctan2(y, x))

D.取放点之间的中心纬度和经度:

train.loc[:, 'center_latitude'] = (train['pickup_latitude'].values + train['dropoff_latitude'].values) / 2
train.loc[:, 'center_longitude'] = (train['pickup_longitude'].values + train['dropoff_longitude'].values) / 2

5.如何最好地使用经纬度特征——第2部分:

在Beluga写的文章中,他使用经纬度数据的第二种方式是为取放点的经纬度创建集群,它的工作方式是通过设计在数据中创建了一些行政区。

from sklearn.cluster import MiniBatchKMeans
coords = np.vstack((train[['pickup_latitude', 'pickup_longitude']].values,train[['dropoff_latitude', 'dropoff_longitude']].values,test[['pickup_latitude', 'pickup_longitude']].values,test[['dropoff_latitude', 'dropoff_longitude']].values))sample_ind = np.random.permutation(len(coords))[:500000]
kmeans = MiniBatchKMeans(n_clusters=100, batch_size=10000).fit(coords[sample_ind])train.loc[:, 'pickup_cluster'] = kmeans.predict(train[['pickup_latitude', 'pickup_longitude']])
train.loc[:, 'dropoff_cluster'] = kmeans.predict(train[['dropoff_latitude', 'dropoff_longitude']])
test.loc[:, 'pickup_cluster'] = kmeans.predict(test[['pickup_latitude', 'pickup_longitude']])
test.loc[:, 'dropoff_cluster'] = kmeans.predict(test[['dropoff_latitude', 'dropoff_longitude']])

然后,他使用这些集群创建了一些特征,例如比如计算某一天外出和入境的次数。

6.如何最好地使用纬度和经度特征——第3部分

在Beluga写的文章中,还使用了PCA方法来转换经度和纬度坐标。在这种情况下,它不是进行降维,而是进行了坐标的变换,2D—>2D变换,它实际上做了如下操作。

pca = PCA().fit(coords)
train['pickup_pca0'] = pca.transform(train[['pickup_latitude', 'pickup_longitude']])[:, 0]
train['pickup_pca1'] = pca.transform(train[['pickup_latitude', 'pickup_longitude']])[:, 1]
train['dropoff_pca0'] = pca.transform(train[['dropoff_latitude', 'dropoff_longitude']])[:, 0]
train['dropoff_pca1'] = pca.transform(train[['dropoff_latitude', 'dropoff_longitude']])[:, 1]
test['pickup_pca0'] = pca.transform(test[['pickup_latitude', 'pickup_longitude']])[:, 0]
test['pickup_pca1'] = pca.transform(test[['pickup_latitude', 'pickup_longitude']])[:, 1]
test['dropoff_pca0'] = pca.transform(test[['dropoff_latitude', 'dropoff_longitude']])[:, 0]
test['dropoff_pca1'] = pca.transform(test[['dropoff_latitude', 'dropoff_longitude']])[:, 1]

7.不要忘记可以用特征做的正常事情:

  • 按Max-Min缩放;
  • 使用标准偏差进行标准化;
  • 基于特征/目标的日志:使用基于特征或基于目标特征的日志;
  • 热编码;

8.创建直观的附加特征:

  • A)日期时间特征:基于时间的特征,如“晚上”、“中午”、“夜晚”、“上月购买行为”,“上周购买行为”等;
  • B)思想特征:假设有购物车数据,并且想要对行程进行分类(参阅Walmart Recruiting:Kaggle的行程类型分类);

此外,还可以考虑创建一个像“时尚”这样的特征,可以通过添加属于男装时尚、女装时尚、青少年时尚类别的项目来创建这个变量。

另外,也可以创建一个像“稀有”这样的特征,它是根据我们拥有的数据标记一些稀有物品然后计算购物车中稀有物品的数量而创建的,这些特征可能是有效的或无效的。根据我的观察,它们通常能够提供很多价值。

9.做的不那么正常的事情:

这些特征非常不直观,不应在机器学习模型需要解释的地方创建。

  • A)交互特征:如果有特征A和B,并创建特征A * B、A + B、A / B、AB,这会使得特征空间爆炸。如果你有10个特征,并且要创建两个可变交互特征,这将为模型添加 180个特征。并且,绝大多数时候,都会有超过10个的特征。
  • B)使用散列的存储桶特征:假设你有数千的特征,并按顺序排好,但考虑到算法的训练时间,并不想使用所有的数千千个特征。一般是使用一些哈希算法来实现这一点,最后完成文本分类任务。

例如:

假设有6个特征A、B、C、D、E、F:
并且数据行是:

A:1、B:1、C:1、D:0、E:1、F:0 

可能决定使用散列函数,以便这6个特征对应于3个桶并创建使用此特征的数据哈希矢量。

处理完后,数据可能如下所示:

Bucket1:2、Bucket2:2、Bucket3:0

A:1、B:1、C:1、D:0、E:1、F:0 之所以发生这种情况是因为A和B掉落在桶1中、C和E落在桶2中、D和F落在桶3中。这里只是总结了上述的观察结果,你也可以用你想要的任何数学函数替换掉上述的加法操作。
之后,将使用Bucket1、Bucket2、Bucket3作为机器学习的变量。

A:1、B:1、C:1、D:0、E:1、F:0 以上是本文的全部内容,后续将持续更新,如果读者有比较好的处理方法,请在下面留言给出。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/520088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter 生成HTML性能测试报告

文章目录一、生成HTML测试报告的两种方式1.1. 利用已有.jtl文件生成报告1.2. 无.jtl文件生成测试报告二、图表信息详解2.1. Dashboard(概览仪表盘)2.2. Charts(详细信息图表)2.3. Over Time2.4. Throughput2.5. Response Times一、…

分区裁剪 oracle,[讨论]分区表并行和剪裁的困惑

d_fct是分区表,设了并行,字段time_day 按天分区。下列语句执行计划上看,确实走了并行,INDEX FAST FULL SCAN,这个是全扫了整个表呢?还是一个分区呢? Pstart和Pstop都是2711,是说第27…

阿里云再发两款混合云一体机 ,企业全面上云就像上车一样简单

12月3日,广州云峰会上,阿里云宣布推出面向混合云场景的CPFS一体机和视觉AI一体机,两款新品具备超高性能、开箱即用等特性,极大降低企业上云的周期和门槛。加上此前推出的POLARDB数据库一体机和蚂蚁mPaaS一体机,阿里云已…

专访阿里云MVP王俊杰:开发者的超能力是用技术让世界更美好

【王俊杰:阿里云MVP,陕西创博网络科技有限公司总经理。大数据与物联网的爱好者与实践者。 8年以上互联网从业经验,曾从事军工相关仿真分析软件研发与集成、4年以上大数据系统开发经验。目前正与天水市秦州区政府配合建设智慧安监、智慧环保、…

阿里云护航罗振宇2018“时间的朋友”跨年演讲,与千万观众一起跨年

2018年12月31日20:30分,以“时间的朋友”为主题的罗振宇2018跨年演讲在深圳正式召开,同时通过深圳卫视、优酷等平台进行全球直播。作为年度总结式演讲开创者,2018年跨年演讲与以往跨年演讲一样,依旧保持着超高的人气,据…

jmeter常用插件介绍

https://www.codercto.com/a/67098.html

oracle us7ascii 中文,US7ASCII字符集中汉字显示问题

前几天遇到一个US7ASCII字符集的数据库,无论在客户端如何设置字符集都无法通过程序正确读出数据库中的中文汉字,辛苦地查了很多资料,都说是ORACLE的一大BUG,如何解决这一问题呢?在不断的试验中发现,采用OLEDB方式设置…

广东农信迁移上阿里云:系统建设从按月缩短至按天

12月3日,广东省农村信用社联合社银信中心副总裁周丹在2019年阿里云广东峰会上透露,通过携手阿里云,广东农信实现了从传统架构向云化的转型升级,金融业务系统的搭建工期从按月计算缩短至按天计算,效率大幅提升。 周丹在…

阿里云容器服务DaemonSet实践

DaemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。下面以日志收集 fluentd 为例,看下如何使用阿里云容器服务控制台创建DaemonSet。 准备Kubernetes环境 在阿里云容器服务控制台中创建Kubernetes…

GIF动画解析RNN,LSTM,GRU

循环神经网络是一类常用在序列数据上的人工神经网络。三种最常见的循环神经网络分别是: 1.维尼拉循环神经网络(vanilla RNN) 2.长短期记忆网络(LSTM),由Hochreiter和Schmidhuber于1997年提出 3.门控循环…

oracle检查外键依赖,Oracle中检查外键是否有索引的SQL脚本分享

COLUMN COLUMNS format a30 word_wrappedCOLUMN tablename format a15 word_wrappedCOLUMN constraint_name format a15 word_wrappedSELECT TABLE_NAME,CONSTRAINT_NAME,CNAME1 || NVL2(CNAME2, ‘,‘ || CNAME2, NULL) ||NVL2(CNAME3, ‘,‘ || CNAME3, NULL) ||NVL2(CNAME4,…

2018最有用的六个机器学习项目

2018年又是人工智能和机器学习快速发展的一年。许多新的机器学习的项目正在以非常高的影响力影响着诸多领域,特别是医疗保健、金融、语音识别、增强现实和更复杂3D视频渲染。 这一年,我们看到了更多的应用驱动研究,而不是理论研究。虽然这可…

雅士利牵手阿里云实现新零售改造,双11全渠道成交金额同比增长超过200%

12月3日在阿里云峰会广州站上,雅士利分享了与阿里云的合作,借助数据中台实现新零售改造。在刚刚结束的天猫双11中,雅士利旗舰店整体线上交易同比增长超3倍,旗下羊奶粉品牌“朵拉小羊”50秒成交额超越618全天成交总额,朵…

安装Vuecli新版本正常,但是显示版本是低版本

安装最新版Vuecli: npm install -g vue/cli查看版本 vue --version如果出现bash: vue: command not found 请参考:https://blog.csdn.net/weixin_40816738/article/details/106151054 如果版本显示是低版本的 找到本地仓库,进入到这个目录下面执行命令…

到底什么成就了今天的人工智能?(上)

维基百科对智能有如下定义: 智能是一种能够感知或推断信息,并将其作为知识留存下来,自适应地用于某种环境或上下文的能力。 人工智能(Artificial Intelligence) 虽然我们很难对人工智能做一个确切的解释,但…

平板电脑可以开发php吗,PHP代码判断设备是手机还是平板电脑(两种方法)

现在移动互联网越来越发达,很多的网站都普及了手机端浏览,为了更好的让网页在手机端显示,我们都选择了使用CSS媒体查询制作响应式模版,但这也有弊端,例如某些网站的结构是CMS类型的,太多的内容要显示&#…

华为美国研发中心将迁至加拿大;高通CEO否认中国5G超美国:技术上还没有,顶多算并驾齐驱;亚马逊宣布进军量子界……...

关注并标星星CSDN云计算极客头条:速递、最新、绝对有料。这里有企业新动、这里有业界要闻,打起十二分精神,紧跟fashion你可以的!每周三次,打卡即read更快、更全了解泛云圈精彩newsgo go go 每周三次,打卡即…

阿里巴巴,果然开始拥有“预测未来”的能力了

顶灯闪烁,笛声响彻。 救护车载着病人,冲向茫茫车海,在时间的赛道上狂奔。 高德地图、GPS 卫星导航、路面磁感线圈、1300 个路口摄像头同时开动,为这辆救护车勘探最快路线; GPS 传回实时数据,后台根据辅助数…

sonarqube 启动不了,异常提示:远程主机强迫关闭了一个现有的连接

启动sonarqube 6.7.1 报下面的错误: 2018.01.24 10:10:56 WARN app[][o.e.t.n.Netty4Transport] exception caught on transport layer [[id: 0x146de8cb, L:/127.0.0.1:57099 – R:/127.0.0.1:9001]], closing connectionjava.io.IOException: 远程主机强迫关闭了…

性能诊断利器 JProfiler 快速入门和最佳实践

背景 性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因…