机器学习系列二

数据

在应用机器学习模型之前,所有的数据必须转换成表格形式。如下所示,这是最耗死,最费劲的部分。
这里写图片描述
转换成功后便可以将这些表格数据灌入机器学习模型。表格数据是在机器学习或数据挖掘中最常见的数据表示形式。我们有一个数据表,x轴表示样本数据,y轴表示标签。标签可以使单列或者多列,取决于问题的形式。我们会用X表示数据,y表示标签。

标签的种类

标签会定义你要解决的何种问题,有不同的问题类型。例如:

  • 单列,二进制值(分类问题,一个样本仅属于一个类,并且只有两个类)
  • 单列,实数值(回归问题,只预测一个值)
  • 多列,二进制值(分类问题,一个样本属于一个类,但可以有两个以上的类)
  • 多列,实数值(回归问题,多个值得预测)
  • 多个标签(分类问题,一个样本可以属于多个类)

评估指标

对于任何的机器学习问题,我们都一定要知道如何评估结果,或者说评估指标和目的是什么。举例来说,对于不均衡的二进制分类问题,我们通常选择选择受试者工作特征曲线下面积(ROC AUC或简单的AUC);对于多标签或者多类别的分类问题,我们通常选择分类交叉熵或多类对数损失;对于回归问题,则会选择均方差。

  • 查看或执行数据操作:pandas
  • 对于各种机器学习模型:scikit-learning
  • 最好的gradient boosting库:xgboost
  • 对于神经网络:keras(http://keras.io/)
  • 数据绘图:matplotlib(http://matplotlib.org/)
  • 监视进度:tqdm(https://pypi.python.org/pypi/tqdm)

    机器学习框架

    这里写图片描述

    粉色的线代表最常用的路径。结束提取数据并将其转化为表格形式,我们就可以构建机器学习模型。
    第一步是识别(区分)问题。这个可以通过观察标签解决。你一定要知道这个问题是二元分类,换是多种类或者多标签分类,换是一个回归问题。当识别问题之后,就可以把数据分为训练集和测试集两个部分。

这里写图片描述
将数据分成训练集和验证集“必须”根据标签进行。遇到分类问题使用分层分割就对了。在Python中,用scikit-learning很容易做到。
这里写图片描述
遇到回归问题,一个简单的K-Fold分割就可以了。当然,也还有很多复杂的方法能够在维持训练集和验证集原有分布的同时将数据分割开来。

这里写图片描述
在以上的例子中我选择用全部数据的10%作为验证集,当然你也可以根据手中具体的数据决定取样的大小。分好数据之后,就可以把它放到一边不要碰了。任何作用于训练集的运算都必须被完整保存并应用于验证集。验证集无论无何都不可以和训练集混为一谈。因为混在一起虽然回到一个让用户满意的评估指标值,但却会因为模型过拟合不能使用。
下一步是识别数据中不同的变量。通常有三种变量:数值变量,分类变量和文本变量。
泰塔尼克号的数据集为例:
这里写图片描述
在这里,‘survival’(生存)就是标签。在前一个步骤中我们已经把标签从训练集中去掉。接下来,有pclass,sex,embarked变量这些变量有不同的级别,因此是分类变量。像age,sibsp,parch等就是数值变量。Name是一个含有文本的变量,但我不认为它对预测是否生存有作用。
先把数值变量分离出来。这些变量不需要任何形式的处理,所以我们可以开始对其归一并应用机器学习模型。
处理分类变量有两种方法:

  • 把分类变量转化为标签
    这里写图片描述
  • 把标签转化为二进制变量:
    这里写图片描述
    请记住在应用OneHotEncoder之前要用LabelEncoder把分类变量转化为数值变量。
    既然泰坦尼克数据集里面没有好的关于文本变量的例子,我们就自己制定一个处理文本变量的一般规则。我们可以把所有的文本变量整合在一起然后用一些文本分析的算法把他们转化为数字。
    文本变量可以如下面这样整合:
    这里写图片描述
    然后应用CoutVectorizer或者Tfidfvectorizer在上面:
    这里写图片描述
    或者
    这里写图片描述
    TfidfVectorizer大多数时候比单纯计数效果要好。下面的参数设置在大多数时候都有很好的结果。
    这里写图片描述
    如果你在训练集上做了向量化处理(或者其他操作),请确保将其(相应的处理)转存到硬盘上,以便在以后的验证集上应用。
    这里写图片描述
    接下来,就是堆砌器模块。堆叠器不是模型堆叠而是特征堆叠。上述处理步走之后得到不同的特征可以通过堆叠器模块整合在一起。
    这里写图片描述
    你可以水平的堆叠所有的特征,然后通过使用numpy hstack或者sparse hvstack进行进一步处理,具体取决于是否具有密集或者稀疏特征。
    这里写图片描述
    也可以通过FeatureUnion模块实现,以防万一有其他处理步走,如PCA或特征选择(我们将在后面提到分解和特征选择)。
    这里写图片描述
    一旦我们把特征找齐了,就可以开始应用机器学习模型。在这个阶段,你只需要到基于树的模型,包括:
  • 随机森林分类器
  • 随机森林回归器
  • ExtraTrees分类器
  • ExtraTrees回归器
  • XGB分类树
  • XGB回归树
    由于没有归一化,我们不能将线性模型应用到上述特征上。为了能够应用线性模型,可以从scikit-learning中使用Normalizer或者StandardScalar。
    这些归一化的方法仅限于密集特征,对稀疏特征,结果差强人意。当然,也可以在不使用平均值(参数:with-mean=False)的情况下对稀疏矩阵使用StandardScalar。
    如果以上步走得到一个“好的”模型,我们就可以进一步做超参数优化了。得不到的情况下,可以做如下步走以改进模型。
    接下来的步走包括分解模型:
    这里写图片描述
    简介起见,我们跳过LDA和QDA转化。对于高维数据,一般而言,PCA可以用来分解数据。对图片而言,从10-15个组分起始,在结果质量持续改进的前提下,逐渐增加分组数量。对于其它的数据,我们挑选50-60个组分作为起点(对于数字型的数据,只要我们能够处理得了,就不要PCA)。
    这里写图片描述
    对于文本型的数据,把文本转化为稀疏矩阵后,进行奇异值分解(SVD),可以在scikit-learning中找到一个SVD的变异版叫做TruncatedSVD。
    这里写图片描述
    一般对于IF-IDE有效的奇异值分解成分是120-200个。更多的数量可能效果会有所改进但不会很明显,而计算机资源耗费却很多。
    在进一步评价模型的性能后,我们可以再做数据集的缩放这样就可以评价线性模型了。归一化或者缩放后的特征可以用在机器学习模型上或者特征选择模块里。
    这里写图片描述
    特征选择方法很多,最常见的方法之一是贪心算法选择(正向或者反向)。具体而言,选择一个特征,在一个固定的评价体系上训练一个模型,评价一个性能,然后一个一个的往里面增加或者移除特征,记录每一步的模型性能。最后选择性能得分最高的那组特征。贪心算法和其评价矩阵的AUC的一个例子(需根据需求修改)。
    其他更快的特征选择方法包括从一个模型中选取最好的特征。我们可以根据一个逻辑回归模型的系数,或者训练一个随机森林来选择最好的特征,然后把他们应用在其他的机器学习模型里面。
    这里写图片描述
    把估计值或者超参数的数量控制的尽量少,这样才不会过拟合。
    用Grandient Boosting Machine也可以实现特征的选择。如果能用xgboost就不要用GBM,因为前者要快得多,可扩展型更好。
    这里写图片描述
    对于稀疏数据集,也可以用随机森林分类器/随机森林回归器或者xgboost做特征选择。
    从正性数据集里选择特征的其他流行方法还有基于卡方的特征选择,scikit-learnng中即可应用。
    这里写图片描述
    这里我们用卡方联合分布SelectKBest的方法从数据集中选择了20个特征。这个本身也是我们改进机器学习模型的超参数之一。
    需要将任何中间过程产生的转化体保存下来。在验证集中你会用他们来评价性能。

接着的主要任务是模型选择+超参数优化
这里写图片描述
一般说来,我们用下面的算法来选择机器学习模型:

  • 分类
    • 随机森林
    • GBM
    • 逻辑回归
    • 朴素贝叶斯
    • 支持向量机
    • KNN
  • 回归
    • 随机森林
    • 线性回归
    • GBM
    • Rigde
    • Lasso
    • SVR

我需要优化哪个参数?如何选择最好的参数?
这里写图片描述
tips:在这些值里面随机搜索一下。
一定要保存转换体:
这里写图片描述
然后对验证集做相同的操作。
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值