首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

kaggle数据挖掘和求解的基本步骤

01

数据探索(Exploratory Data Analysis)

对数据进行探索性的分析,通常会用 pandas 来载入数据,并做一些简单的可视化来理解数据。

import pandas as pd

df = pd.DataFrame([[1, 1.5],[2.0,2.8]], columns=['int', 'float'])

df

iterrows,按行迭代

02

可视化

matplotlib 和 seaborn 提供的绘图功能可以方便的展示。

比较常用的图表有:

查看目标变量的分布。当数据分布不平衡时,根据评分标准和具体模型的使用不同,可能会严重影响性能。

对 Numerical Variable,可以用Box Plot来直观地查看它的分布。

对于坐标类数据,可以用Scatter Plot来查看它们的分布趋势和是否有离群点的存在。

对于分类问题,将数据根据Label的不同着不同的颜色绘制出来,这对 Feature 的构造很有帮助。

绘制变量之间两两的分布和相关度图表。

seaborn热点图

多变量图

散点图

03

数据不均衡问题及部分措施

需要考虑数据不均衡问题

上图是数据不均衡问题的一个典型例子,可以看到大部分微博的总互动数(被转发、评论与点赞数量)在0-5之间,交互数多的微博(多于100)非常之少。如果我们去预测一条微博交互数所在档位,预测器只需要把所有微博预测为第一档(0-5)就能获得非常高的准确率,而这样的预测器没有任何价值。那如何来解决机器学习中数据不平衡问题呢?通常处理数据的难度如下所示:

大数据+分布均衡 < 大数据+分布不均衡 < 小数据+数据均衡 < 小数据+数据不均衡

1)上采样和生成新数据点时添加轻微的随机扰动,经验表明这种做法非常有效。

2)多次有放回的下采样,得到多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果,这种方法称为EasyEnsemble。第二种BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。

3)数据合成方法是利用已有样本生成更多样本,这类方法在小数据场景下有很多成功案例,比如医学图像分析等。

04

数据预处理(Data Preprocessing)

在构造 Feature 之前,需要对数据集进行一些处理。通常的步骤有:

有时数据会分散在几个不同的文件中,需要 Join 起来。

处理Missing Data

处理Outlier

必要时转换某些Categorical Variable的表示方式。

对于 Categorical Variable,常用的做法就是One-hot encoding。

说到outlier,不得不提下,bias 和 variance概念上区别,bias是偏差(与预测值之间的偏离程度),variance是误差(代表点的离散程度,散不散的衡量),最直观的如下图所示,相对于第二行,第一行的bias都很小;相对于第二列,第一列的variance都很小。

然后,说下最后一条,即对这一变量创建一组新的伪变量,变量对应的取值为 1,其他都为 0。如下,将原本有 7 种可能取值的变量转换成 7 个Dummy Variables。为什么要这样做,本来周日和周一日期是挨着的,但是转化为1,和7后,如果画在x轴上,它们就会离得很远,这样给算法一个错觉,这个日期的变化会对目标值一个错误的影响。

05

特征选取(Feature Selection)

先做一遍 Feature Selection 能带来一些好处:

Feature 少,训练快。

有些 Feature 之间可能存在线性关系,影响 Model 的性能。

通过挑选出最重要的 Feature,可以将它们之间进行各种运算和操作的结果作为新的 Feature,可能带来意外的提高。

特征选取比较实用的方法是Random Forest训练完以后得到的特征的重要性,比如下图所示:title特征对泰坦尼克号船员幸运获救起到最重要的作用。

这里用一个例子来说明在一些情况下 Raw Feature 可能需要经过一些转换才能起到比较好的效果。假设有一个 Categorical Variable 一共有几万个取值可能,那么创建 Dummy Variables 的方法就不可行了。

这时一个比较好的方法是根据 Feature Importance 或是这些取值本身在数据中的出现频率,为最重要(比如说前 95% 的 Importance)那些取值(有很大可能只有几个或是十几个)创建 Dummy Variables,而所有其他取值都归到一个“其他”类里面。这也是经常用到的一个技术。

06

模型选取(Model Selection)

准备好以上的特征后,就可以开始选用一些常见的模型进行训练了,一般从BaseLine开始,比如以下基本模型:

SVM

Logistic Regression

Neural Networks

以上这些模型在sklearn中都可以直接调包使用。然后,讲这些模型,作为集成模型的Base model,那么常用的集成模型有哪些,最常用的模型基本都是基于决策树的模型:

Random Forest

Gradient Boosting

GBDT

当然还有业界优秀的 Xgboost 。

07

参数调优(Tuning)

在训练时,我们主要希望通过调整参数来得到一个性能不错的模型,一个模型往往会有很多可调节的超参数,比如对 sklearn 的RandomForestClassifier来说,比较重要的就是随机森林中树的数量 (n_estimators)以及在训练每棵树时最多选择的特征数量(max_features)

通常我们会通过一个叫做Grid Search的过程来确定一组最佳的参数,这是一个暴力搜索的过程。

一般的调参步骤是:将训练数据的一部分划出来作为验证集,通常先将学习率设得比较高(比如 0.1),用 Grid Search 对其他参数进行搜索,逐步将 学习率降低,找到最佳值。以验证集为监视表,找到的最佳参数组合。

08

总结

总结了数据探索,数据可视化,数据不平衡问题的部分解决措施,数据预处理,数据特征选取,模型选择,参数调优的基本过程。

算法channel会有系统地,认真地推送:机器学习(包含深度学习,强化学习等)的理论,算法,实践,源码实现。期待您的参与!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180110G104UT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券