转载:https://www.toutiao.com/i6642477603657613831/

1

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

2 logloss裁剪技术

  在必须预测概率的分类问题情况下,将概率剪切在0.05-0.95之间会好得多,这样就对自己的预测变得不是十分确定。

3.以gzip格式提交到kaggle

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

4.如何最好地使用纬度和经度特征

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 km
lat = lat2 - lat1
lng = lng2 - lng1
d = np.sin(lat * 0.5) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(lng * 0.5) ** 2
h = 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 km
lng_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

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

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']])

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

在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]

5.创建直观的附加特征

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

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

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

6. 

  • 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作为机器学习的变量。

转载一份kaggle的特征工程:经纬度、特征构造、转化率的更多相关文章

  1. Alink漫谈(十) :特征工程 之 特征哈希/标准化缩放

    Alink漫谈(十) :特征工程之特征哈希/标准化缩放 目录 Alink漫谈(十) :特征工程之特征哈希/标准化缩放 0x00 摘要 0x01 相关概念 1.1 特征工程 1.2 特征缩放(Scali ...

  2. 《转发》特征工程——categorical特征 和 continuous特征

    from http://breezedeus.github.io/2014/11/15/breezedeus-feature-processing.html 请您移步原文观看,本文只供自己学习使用 连 ...

  3. 什么是机器学习的特征工程?【数据集特征抽取(字典,文本TF-Idf)、特征预处理(标准化,归一化)、特征降维(低方差,相关系数,PCA)】

    2.特征工程 2.1 数据集 2.1.1 可用数据集 Kaggle网址:https://www.kaggle.com/datasets UCI数据集网址: http://archive.ics.uci ...

  4. 想搞机器学习,不会特征工程?你TM逗我那!

    原文:http://dataunion.org/20276.html 作者:JasonDing1354 引言 在之前学习机器学习技术中,很少关注特征工程(Feature Engineering),然而 ...

  5. 如何用Python做自动化特征工程

    机器学习的模型训练越来越自动化,但特征工程还是一个漫长的手动过程,依赖于专业的领域知识,直觉和数据处理.而特征选取恰恰是机器学习重要的先期步骤,虽然不如模型训练那样能产生直接可用的结果.本文作者将使用 ...

  6. 手把手教你用Python实现自动特征工程

    任何参与过机器学习比赛的人,都能深深体会特征工程在构建机器学习模型中的重要性,它决定了你在比赛排行榜中的位置. 特征工程具有强大的潜力,但是手动操作是个缓慢且艰巨的过程.Prateek Joshi,是 ...

  7. 2022年Python顶级自动化特征工程框架⛵

    作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...

  8. Sklearn与特征工程

    Scikit-learn与特征工程 “数据决定了机器学习的上限,而算法只是尽可能逼近这个上限”,这句话很好的阐述了数据在机器学习中的重要性.大部分直接拿过来的数据都是特征不明显的.没有经过处理的或者说 ...

  9. 特征工程(Feature Engineering)

    一.什么是特征工程? "Feature engineering is the process of transforming raw data into features that bett ...

随机推荐

  1. RN集成echarts4图表组件react-native-secharts(转载)

    一个webview封装的图表组件.基于百度echarts4,相比native-echarts有echarts自带对象支持,例如渐变色等,用法与官网相同用法. echarts version 4.2.0 ...

  2. phoneshop cs6破解

    一.以“试用”方式安装photoshop: 二.下载amtlib.dll破解文件,密码:ubx2: 三.备份photoshop目录下的amtlib.dll文件,将下载的amtlib.dll文件拷贝到p ...

  3. 两款不错的Linux密码生成工具

    先介绍最简单的方法,Linux自带的 $ strings /dev/urandom | | ; echo whucNWhr35W6ZP0MxrLQ $ /dev/random | base64 | t ...

  4. UVA - 558 Wormholes (SPEA算法模板题)

    先给出题面:https://vjudge.net/problem/UVA-558 题意描述:给你含n个点以及m条边的图,让你判断在这个图中是否存在负权回路. 首先,我们来介绍什么是SPEA算法 SPF ...

  5. windows下用XShell远程控制ubuntu时连接失败

    主机和Ubuntu可以相互Ping通,但是XShell远程控制失败. 查看Ip地址方法:ifconfig 解决方案: 1.查看,关闭防火墙状态:sudo ufw disable 2.开放22端口:su ...

  6. qt+opencv LNK4272:library machine type 'x64' conflicts with target mathine type 'x86'

    运行时报错如上图所示,原因是你使用的opencv库是64位的,qt里面使用的编译器MSVC是32位的,解决方法如下: 将构建套件修改位64bit:

  7. 科学计算和可视化(numpy及matplotlib学习笔记)

    网上学习资料:https://2d.hep.com.cn/1865445/9 numpy库内容: 函数 描述 np.array([x,y,z],dtype=int) 从Python列表和元组创造数组 ...

  8. 2018-2019-2 20165313 Exp2 后门原理与实践

    实践基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 应用程序设定后门,用户安装后,后门就可以进入.例如课堂上讲到的百度. (2)例举你知道的后门如何启动起来(win及linux) ...

  9. 学习笔记CB002:词干提取、词性标注、中文切词、文档分类

    英文词干提取器,import nltk,porter = nltk.PorterStemmer(),porter.stem('lying') . 词性标注器,pos_tag处理词序列,根据句子动态判断 ...

  10. C 函数传参问题

    1. 传指针 传入指针时会改变指针指向的内容 2. 传变量 传入变量,不会改变变量的内容,只是使用变量的数据