zoukankan      html  css  js  c++  java
  • 机器学习模型建立的几点建议

    构建一个垃圾邮件分类器

    ​ 对于垃圾邮件,我们可以人为的挑选若干个关键词作为识别垃圾邮件判断的特征,而在实际应用中,我们应该遍历整个训练集,在训练集中找出出现次数最多的n个单词,n介于10,000和50,000之间,将这些单词作为所选用的特征。根据所找到的特征集合,我们可以为每一个邮件构建一个向量,如果在电子邮件中找到一个字,我们将分配其相应的项1,否则这一项将为0,即向量的每一项表示一个单词。一旦我们准备好所有的x向量,我们就会训练我们的算法,最后, 我们可以使用它来分类邮件是否是垃圾邮件。

    ![1.jpg](http://wx4.sinaimg.cn/mw690/7b8d2108gy1fhaktg3vqlj20ka06xtb8.jpg)
    ​ 为此我们打开脑洞想一下应该花时间在那些措施上以提高分类器的精确度呢?
    1. 收集更多地数据(例如“honepot”项目,但这并不一定有效)
    2. 发现更具有代表性的特征(例如:垃圾邮件发送中的题目-header)
    3. 开发一种算法实现输入的不同方式(垃圾邮件中的拼写错位)

    很难讲,以上的措施哪一个更有效。。。从而引出接下来的error analysis

    误差分析

    ​ 解决一个新的机器学习问题的推荐方法是:

    1. 从一个简单的算法开始,尽快的实现它,并通过交叉验证集测试它
    2. 尝试绘出学习曲线(learning curve)以决定是否更多地特征、数据会对处理有效
    3. 手动检查交叉验证集中的样本误差,并尝试发现大多数误差发生的趋势

    ​ 例如假设我们有500份邮件,我们的模型误分类了其中的100份,我们这是应手动的分析这100份邮件,判断各属于什么类型,然后,我们可以尝试提出新的线索和特征,以帮助我们正确地分类这100封电子邮件。如果大多数错误分类的电子邮件是尝试窃取密码的邮件,那么我们可以找到这些电子邮件特有的功能,并将其添加到我们的模型中。

    数值化模型的误差值

    ​ 将得到误差转化为单个数值是机器学习中的一个窍门。 否则,很难评估学习出的算法的性能。例如,如果我们使用词干截取软件(这是将不同形式的同一个单词(fail/failing/failed)作为一个单词(fail))处理的过程,并且获得3%的错误率而不是5%,那么我们应该增加它到我们的模型。然而,如果我们尝试区分大写字母和小写字母,最终得到3.2%的错误率而不是3%,那么我们应该避免使用这个新功能。总而言之,我们应该尝试方法,并将该方法下的误差率以数值表示,并根据得到的结果决定是否要保留新功能。

    错误指标-偏斜类

    ​ 以癌症的分类为例,训练逻辑回归模型(h_ heta(x)).其中(确诊为癌症时y=1,否则y=0)。当通过训练集样本训练出的模型对诊断的精确度达到99%时,即在测试集上误差律仅为1%,这是是否可以说我们的训练模型已经很优秀了呢?然而癌症患者的患病概率仅为0.5%,若我们进定义如下函数:

    function y = predictCancer(x)
    	y = 0; %ignore x!
    return
    

    ​ 上述函数模型精确度也达到了99.5%,比之前训练的模型看起来更加优秀,事实是这样吗?

    查准率/回收率

    ​ y=1表示我们想检测的真实类,整体分类可能有以下几种:

    ![2.1jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhaktg7t9wj20b809qaa4.jpg)
    ​ 查准率(Precision)和回收率(Recall)的定义如下:
    ![2.2jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhakth1mksj20c602kweg.jpg)
    如何比较查准率/回收率的计算数值:F值(F score)
    ![3.jpg](http://wx1.sinaimg.cn/mw690/7b8d2108gy1fhakthr04pj20l908mgml.jpg)
    **机器学习的数据集更多**

    ​ 设计一种高精度的学习系统:如,对于模糊单词的分类{to,two,too},{then,than}

    尝试使用以下4种算法:1.感知器-Perceptron(Logistic regression)2.Winnow 3.Me,ory-based 4.朴素贝叶斯,随着训练集数目的增多,精确度如下图:

    ![4.jpg](http://wx3.sinaimg.cn/mw690/7b8d2108gy1fhaktib48sj208p07c74q.jpg)
    进而,研究者Banko and Brill谈到“It's not who has the best algorithm that win.It's who has the most data"

    使用包含很多参数的学习算法(如:具有很多特征的逻辑回归/线性回归;具有多个隐藏层的神经网络)有:(J_{train}( heta))将会变小,在没有出现过拟合现象下,增大训练集有:

    (J_{train}( heta) approx J_{test}( heta)),此时(J_{test}( heta))也将会变小。

    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/SrtFrmGNU/p/7129043.html
Copyright © 2011-2022 走看看