机器学习|kaggle数据挖掘和求解的基本步骤

时间:2022-05-06
本文章向大家介绍机器学习|kaggle数据挖掘和求解的基本步骤,主要内容包括对数据进行探索性的分析,通常会用 pandas 来载入数据,并做一些简单的可视化来理解数据。、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

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

总结

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