zoukankan      html  css  js  c++  java
  • ML_01

    1

    在机器学习问题中,我们通过训练数据集学习得到的其实就是一组模型的参数,然后通过学习得到的参数确定模型的表示,最后用这个模型再去进行我们后续的预测分类等工作。在模型训练过程中,我们会对训练数据集进行抽象、抽取大量特征,这些特征中有离散型特征也有连续型特征。若此时你使用的模型是简单模型(如LR),那么通常我们会对连续型特征进行离散化操作,然后再对离散的特征,进行one-hot编码或哑变量编码。这样的操作通常会使得我们模型具有较强的非线性能力。那么这两种编码方式是如何进行的呢?它们之间是否有联系?又有什么样的区别?是如何提升模型的非线性能力的呢?
    one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“激活态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。举个例子,假设我们以学历为例,我们想要研究的类别为小学、中学、大学、硕士、博士五种类别,我们使用one-hot对其编码就会得到:位数为5的二进制向量
    dummy encoding

      哑变量编码直观的解释就是任意的将一个状态位去除。还是拿上面的例子来说,我们用4个状态位就足够反应上述5个类别的信息,也就是我们仅仅使用前四个状态位 [0,0,0,0] 就可以表达博士了。只是因为对于一个我们研究的样本,他已不是小学生、也不是中学生、也不是大学生、又不是研究生,那么我们就可以默认他是博士,是不是。(额,当然他现实生活也可能上幼儿园,但是我们统计的样本中他并不是, (-))。所以,我们用哑变量编码可以将上述5类表示成:5个四位的二进制向量。虽然哑变量可以去除one-hot编码的冗余信息,但是因为每个离散型特征各个取值的地位都是对等的,随意取舍未免来的太随意。

    2

    连续值的离散化为什么会提升模型的非线性能力?

     简单的说,使用连续变量的LR模型,模型表示为公式(1),而使用了one-hot或哑变量编码后的模型表示为公式(2
    散化后在使用one-hot或哑变量编码后的若干个特征表示。这时我们发现使用连续值的LR模型用一个权值去管理该特征,而one-hot后有三个权值管理了这个特征,这样使得参数管理的更加精细,所以这样拓展了LR模型的非线性能力。

    这样做除了增强了模型的非线性能力外,还有什么好处呢?这样做了我们至少不用再去对变量进行归一化,也可以加速参数的更新速度;再者使得一个很大权值管理一个特征,拆分成了许多小的权值管理这个特征多个表示,这样做降低了特征值扰动对模型为稳定性影响,也降低了异常数据对模型的影响,进而使得模型具有更好的鲁棒性。

    3

    基于 ROC 曲线,我们可以构建另一个更容易使用的指标来评估模型:AUROC(Area Under the ROC),即ROC 曲线下面积。可以看出,AUROC 在最佳情况下将趋近于 1.0,而在最坏情况下降趋向于 0.5。同样,一个好的 AUROC 分数意味着我们评估的模型并没有为获得某个类(通常是少数类)的高召回率而牺牲很多精度。

    4

    4、重新采集数据样本

    修复不平衡数据集另外一种简单方法就是通过对少数类的实例进行过采样或对多数类的实例进行欠采样来平衡它们。

    ·过采样:从代表性不足的类中添加实例的副本或更正式的替换采样

    ·欠采样:从过度表示的类中删除实例

    这允许我们创建一个简单的平衡的数据集,理论上不应该导致分类器偏向于一个类或另一个类。

    然而,在实践中,这些简单的抽样方法存在缺陷。
    过度采样少数可能导致模型过度拟合,因为它将引入重复实例,从已经很小的实例池中提取。

    同样,对大多数数据进行欠采样最终会遗漏出两个类之间存在重要差异的重要实例。

    因此,在实例运用中,你可以在不平衡的数据集上尝试这两种方法,以确定哪种方法的选择能够提高你的精确度。

    一些经验法则:

    ·拥有大量数据时,采用欠采样进行测试;

    ·拥有数据量较少,考虑过采样进行测试;

    ·考虑测试随机和非随机抽样方案;

    ·考虑测试不同的重采样比率。
    5、合成样本

    当数据稀缺时,可以从原始数据样本种人工合成样本。通过这种方式,它减少了少数样本中的偏差,并有助于将决策边界转向不易分类的少数样本。

    最常用的合成数据的算法时SMOTE 和ADASYN 。

    SMOTE算法仅从少数样本生成合成数据,了解有关SMOTE的更多信息,请参阅论文“ SMOTE:Synthetic Minority Over-sampling Technique ”。

    ADASYN算法使用少数样本的加权分布,这些样本与大多数样本没有很好地分离。

    生成合成样本的一种简单方法是从少数类中的实例中随机采样属性。

    你可以凭经验对数据集进行采样,也可以使用Naive Bayes等方法在反向运行时独立地对每个属性采样。但可能引发的问题是你无法保留属性之间的非线性关系。

    您可以使用系统算法生成合成样本。最流行的此类算法称为SMOTE或合成少数过采样技术。

    在大多数情况下,SMOTE和MSMOTE等合成技术的性能将优于传统的过采样和欠采样方法。

    SMOTE工作原理是从次要类创建合成样本,而不是创建副本。该算法选择两个或更多个类似的实例(使用距离测量)并且通过差异内的相邻实例的随机量一次扰动实例一个属性。

    它实际上通过形成相邻实例的凸组合来创建少数类的新实例。

    如下图所示,它有效地在要素空间中的少数点之间绘制线条,并沿着这些线条绘制样本。

    这使得我们可以平衡我们的数据集而不会过度拟合,因为我们创建新的合成示例而不是使用重复。

    然而,这并不能防止所有过度拟合,因为这些仍然是从现有数据点创建的。
    6、 异常检测

    在更极端的情况下,最好在异常检测的背景下考虑分类。

    在异常检测中,我们假设存在数据点的“正常”分布,并且任何与该分布充分偏离的异常都是异常的。

    当我们将分类问题重构为异常检测问题时,我们将多数类视为点的“正态”分布,将少数类视为异常。

    有许多异常检测算法,如聚类方法,单类SVM和隔离森林。

  • 相关阅读:
    go 注释/说明/文档 标注
    go stack object escape
    ubuntu virtualBox windows10 CPU占用100%
    git 团队合作
    git 修改远程pull和push地址
    go 项目编译失败
    fork函数 linux创建子进程
    51nod1183 编辑距离
    各种平衡树
    redis 配置多个ip 解决方案
  • 原文地址:https://www.cnblogs.com/xiaofeisnote/p/14607808.html
Copyright © 2011-2022 走看看