kaggle的提高得分技巧

交流才是提高的真正trick。

这个trick简单来说就是融合不同模型的得分。这个trick在深度学习中其实也有体现,那就是双流网络。将不同模型的输出(得分)融合,最终的结果考虑了多种输出。这里主要记录一下实现(融合得分)的过程。

1.读取两个要融合的提交文件。这里v3是课程中提供的baseline,v1是M5的notebook中得分较高的kernel,两者的得分都在0.47左右。通过融合,得分可以提高到0.465。

1
2
3
4
import pandas as pd
import numpy as np
v3 = pd.read_csv('submissionV3.csv')
v1 = pd.read_csv('submission_V1.csv')

2.由于两个文件的id索引的顺序不同,要排序其中一个文件。这里cat.reorder_categories是临时设置的排序规则,相当于自定义排序。

1
2
3
4
5
6
7
8
# 设置成“category”数据类型
v3['id'] = v3['id'].astype('category')
list_custom = list(v1['id'])
# inplace = True,使 recorder_categories生效
v3['id'].cat.reorder_categories(list_custom, inplace=True)
# inplace = True,使 df生效
v3.sort_values('id', inplace=True)
v3.index = list(range(0,60980))

pandas 中 inplace 参数在很多函数中都会有,它的作用是:是否在原对象基础上进行修改

inplace = True:不创建新的对象,直接对原始对象进行修改;

inplace = False:对数据进行修改,创建并返回新的对象承载其修改结果。

默认是False,即创建新的对象进行修改,原对象不变,和深复制和浅复制有些类似。

注意这里index要重新修改,否则后面进行加法操作的时候,它按照index进行相加,如果没改的话就直接乱套了

3.新建一个新的DataFrame,并执行均值输出。

1
2
3
4
v2 = pd.DataFrame(np.random.randn(60980,29),columns=v1.columns)
v2['id'] = v1['id']
for i in range(1,29):
v2[f"F{i}"] = (v1[f"F{i}"]+v3[f"F{i}"])/2

4.最后将得到的结果保存

1
v2.to_csv('submissionv2.csv')
请作者喝杯咖啡吧!