新手kaggle比赛总结之一

这是参加的第二个kaggle的比赛:facebook V:Predicting Check ins,其与前一阵子Expedia比赛很相似,其预测目标集合都是非常大的。这是比赛入口:https://www.kaggle.com/c/facebook-v-predicting-check-ins。本文可以当做一个简单粗糙的数据挖掘tutorial。


1、关于赛题


比赛题目要求是预测登入用户的地点id,数据集是10km * 10km的方形区域(facebook团队创造的虚拟人工世界)中100,000个地点id的用户相关信息,其中的数据带有程度不定的噪声。提交的文件要求预测test.csv中每一个row_id(8,607,230 个)对应的地点id预测,选手可为每个row_id提供三个预测地点。结果的评估公式如下:

这里写图片描述

如上所示,评估的公式采用MAP公式,即要求推荐的三个place_id 中没有一个预测正确则不得分。在三个place_id中,有次序关系,若预测正确的place_id次序越前,则得分越高。


2、数据探索


2.1 数据概况:

在对于该数据挖掘问题的方案制定前,需要先对数据进行探索。数据探索有助于对数据有个初步的了解。其中训练数据为1.24G、测试数据为0.27G。机器为8G RAM。故将训练数据数据抽取10,000,000个样本读入内存,了解其概况信息。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df_train = pd.read_csv('../train_sample_10000000.csv')
    # 读入文件

## 画分布图
statis_values = df_train['place_id'].value_counts().values
    # 统计地点id
place_statis = Series(statis_values, index = range(len(statis_values)))
    # 为地点id重新编号
place_statis.plot()
    # 绘图
plt.show()
    # 显示

## 数据统计描述
print(descirbe(df_train))

以下是抽样数据大致的概貌情况:
这里写图片描述
图1:100,000个地点的频数分布

这里写图片描述
图2:特征的统计特性

如上图所示:由于需要预测的类别集合元素有100,000个,故这种情况不适合使用回归、SVM、神经网络以及决策树等算法直接构建分类器。因为这些算法仅仅在类别数目比较少时才能有效工作。


2.2 问题分解


2.2.1 抽样问题:

由以上观察的数据结果,我们可以对训练数据进行抽样。鉴于训练样本集有大致2千多万条条目,故抽样数据不能够太少,否则会使得抽样后的样本分布对比原分布改变太多。
以下是抽样函数的实现代码:

## 抽样数据集
def pickSample(filename, nSample = 1000000):    
    df = pd.read_csv(filename)
    len_df = len(df.index)
    samp_id = sorted(random.sample(range(len_df), nSample))
        # 得到随机的抽样id
    outputFilename = filename[len(PATH_SAVE) : -4] + '_' + 'sample' + '_' + str(nSample) + '.csv'
        # 生成样本数据的文件名
    samps_train = df[df.row_id.isin(samp_id)]
    samps_train.to_csv(PATH_SAVE + outputFilename, index = False, mode = 'w')   
pickSample('../train.csv', 1000000)
    # 抽取1000000个训练样本

2.2.2 地理坐标网格化:

由于训练数据与预测数据的条目非常多,对于任何一个机器学习算法都是一个不小的负担。特别对于在这个地方,尝试通过将x,y地点切分为40*40网格的方型区域,随机其中选取中一个网格进行数据探索。

## 将数据分到相应的网格中去
    n_cell_x = 40
    n_cell_Y = 40

    # x, y尺度归一
    size_x = 10. 
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值