机器学习|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 种可能取值的 Weekdays 变量转换成 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(alg-channel)

原文发表时间:2018-01-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

为什么ResNet和DenseNet可以这么深?一文详解残差块为何有助于解决梯度弥散问题

传统的“提拉米苏”式卷积神经网络模型,都以层叠卷积层的方式提高网络深度,从而提高识别精度。但层叠过多的卷积层会出现一个问题,就是梯度弥散(Vanishing),...

3515
来自专栏AI科技大本营的专栏

硬货 | 一文了解深度学习在NLP中的最佳实践经验和技巧

编译 | AI科技大本营(rgznai100) 参与 | JeyZhang,鸽子 在NLP社区中曾流行着这样一个玩笑,说是一个带注意力机制的LSTM模型在任何的...

3074
来自专栏新智元

100页的机器学习入门书:只要有基础数学知识就能看懂!(免费下载)

书名The Hundred-Page Machine Learning Book,作者Andriy Burkov是Gartner的机器学习团队leader,人工...

2692
来自专栏新智元

【中秋赏阅】美丽的神经网络:13种细胞构筑的深度学习世界

【新智元导读】人是视觉动物,因此要了解神经网络,没有什么比用图将它们的形象画出来更加简单易懂了。本文囊括 26 种架构,虽然不都是神经网络,但却覆盖了几乎所有常...

3516
来自专栏张俊红

最懒惰的算法—KNN

总第77篇 本篇介绍机器学习众多算法里面最基础也是最“懒惰”的算法——KNN(k-nearest neighbor)。你知道为什么是最懒的吗? 01|算法简介:...

3115
来自专栏新智元

【邓侃】DeepMind 机器理解文本 NLP 技术复现与解析

【新智元导读】 本文对 DeepMind 的让计算机读懂文本、回答问题的深度学习技术进行复现与解析。文章对DeepMind的整个技术思路进行了清晰的重构:从问...

3136
来自专栏CDA数据分析师

R语言的kmeans客户细分模型聚类

前言 kmeans是最简单的聚类算法之一,但是运用十分广泛。最近在工作中也经常遇到这个算法。kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后...

3548
来自专栏人工智能LeadAI

为什么ResNet和DenseNet可以这么深? | 一文详解残差块为何能解决梯度弥散问题

传统的“提拉米苏”式卷积神经网络模型,都以层叠卷积层的方式提高网络深度,从而提高识别精度。但层叠过多的卷积层会出现一个问题,就是梯度弥散(Vanishing),...

3607
来自专栏大数据挖掘DT机器学习

kmeans聚类理论篇K的选择(轮廓系数)

kmeans是最简单的聚类算法之一,但是运用十分广泛。最近在工作中也经常遇到这个算法。kmeans一般在数据分析前期使用,选取适当的k,将数据分类后,然后分类...

6145
来自专栏机器学习和数学

[机智的机器在学习] 常用网络层总结之CNN篇

卷积神经网络(CNN)由输入(Inputs)、卷积层(Convolutions layer)、激活层(Activation)、池化层(Pooling layer...

3735

扫码关注云+社区

领取腾讯云代金券