以下为我的个人经验,主要用于分享和讨论,未关注内容的严谨性,仅供讨论和互相学习。

什么是机器学习

我的理解:机器学习是用于预测和分类的模型。
这个模型是一个总称,其中包括监督学习的K近邻、线性回归、逻辑回归、SVN等,无监督学习的K平均、分层聚类、最大期望等。
相较于传统的多因素分析而言,机器学习的这些算法对变量分布和特性(线性、独立不相关等)基本无要求,不需要前提假设,而传统多因素分析中则建立在强假设下,要求变量符合正态分布、线性独立等。因此,机器学习的算法要比传统多因素分析算法适应性更广,应用性更广,所以也就不难理解机器学习成为科研的热点。

机器学习步骤

不同的书籍对必须步骤总结有不同,但是总体上大概分为以下几步:
1.数据清洗及预处理
2.特征选择(有的没有这一步)
3.选择合适的模型,进行初步预测
4.使用交叉验证调整超参数,使模型达到最优
5.保存模型
其中第2步是不一定有的,如果需要对特征进行筛选,则可以进行,如果特征不太多,主要用于预测,则可以不选择(PS:若要纳入所有特征进行预测,其实还不如使用深度学习,而不是机器学习,前者的性能更为优越)

每一个步骤的常见问题

数据清洗及预处理

(1)样本量太少或者质量太差
样本量太少和质量太差实际是2个问题,但是最终都会导致模型预测性能不佳。
样本量太少,会使得采样时噪声比例变大,即非代表性数据、异常值的比例增大,使得模型在学习的时候吸收到错误知识。举例来说,假如只有10个样本,来通过病人所有的基础资料预测他的高血压分级,而有一个病人因为当天吃多了咸味食物或者劳累或者测压仪器错误,导致他被标级为高血压二级(其实他在静息状态下只有一级),那么机器预测的预测准确率不会超过80%(机器会把相似的一例也错误标记)。这种标级错误在临床很常见,而这一个错误使机器直接丧失20%的性能,因此样本量太少是要主要规避的问题。
样本质量不行,即使用的样本不具有代表性,决定性特征未纳入进来。举例来说,假如样本中含有舒张压、收缩压,那么预测高血压等级比较准;假如样本中只有体温、呼吸频率,那么预测高血压等级基本靠机器去猜,当然就不准了。——这一点也可以倒推,假如你的数据经过努力调参,仍旧准确率不高,你需要考虑你的样本纳入的特征的质量问题。
(2)缺失值处理
缺失值可以放弃或者填充,根据实际情况决定。
(3)避免使用文本字符
机器学习算法只适用于数字,因此要考虑将文本编码成数字,例如将性别中的男用1代替,女用2代替,随后用[1,0]代替1,用[0,1]代替2。
解释:用1和2代替男女,是统计中常用的方式,例如SPSS的值标签,这种1和2其实是分类变量(分类因子),他们是没有大小的概念,例如虽然2>1,但是女不会大于男,它只是用于分类而已。但是用1和2会产生一个问题,就是在机器学习算法中,会默认2>1,因此赋予2更大的权重。为了缓解这一现象,我们需要用独热编码来映射,即用[1,0]代替1,[0,1]代替2,这样就不会出现大小现象。
(4)数据缩放
有的模型对数据大小很敏感,如SVM,有的则不,如决策树。但是从普适性来说,一般缩放后的效果要好于缩放前,所以一般都会考虑常规进行数据缩放操作。缩放包括2种,归一化标准化。归一化是将值减去最小值除以最大最小值距离,标准化是值减去平均值除以方差。
两者差别:归一化后,数据处于[0,1]区间,且不影响异常值分布(有的时候异常值非常有意义);标准化后,数据处于[-∞, +∞],且极端值的距离会缩小。一般来说,建议使用标准化,除非你认为归一化在你的数据会有更换的表现。

特征选择

(1)特征选择不是必须,可以跳过,取决于你的目的
在一些情况下,特征选择步骤是被跳过的,例如你主要关注预测性能,对于特征值多少不在乎。
在一些情况下,特征选择步骤是必须的,例如你想去掉无关变量,找出数据内潜在特殊结构。
特征选择的方法有太多了,例如基于方差值,基于相关性系数,基于模型,基于信息熵等等,需要自行探索。
(2)特征选择其实包含两个部分,即特征提取(有时也称为过滤)和特征选择,前者是features extraction, 后者是features selection。
区别在于:提取过程是发生在数据预处理后和模型调参前,而选择过程是最佳模型和最佳预测性能达到后,对特征值进行排序,找到每个特征值贡献度,从而选择重要特征。举例说明:我有1000个样本,每个样本有10000个特征,我在数据预处理以后,先通过基于方差值、基于相关值等方式,先从10000个特征中初步提取出5000个,然后我用这5000个进行机器学习,然后调参,等机器模型达到最佳,我用这个最佳机器模型对每个特征进行排序,输出每个特征值的贡献度,然后我发现有1000个特征值贡献了模型99%的重要性,因此我就选择这1000个特征值。在这个过程中,10000到5000是特征提取,5000到1000是特征选择。

选择合适模型,进行初步预测

没有一个模型适用于所有场景,所以有很多模型供我们选择使用。一般经历了上面过程,可以直接在sklearn中调用模型,然后用fit()函数进行拟合,并查看预测准确率。根据我的个人经验,一般能在60%以上的模型,还算可以,可以通过后续调参优化,如果初始的太低,那基本调参后提升也很有限,这个时候需要回头审视之前的过程以及查看样本质量和数量。
对于不知道选择何种模型,有一种方法是全部使用,然后对比;还有一种方法是,使用领域内最常用和多用的模型,因为别人之前肯定有比较过,然后觉得这个模型比较好,所以后来这个模型使用比较多。从我个人而言,我喜欢使用随机森林算法,性能在大多数情况下都还不错。
(1)支持向量机:SVC和SVM
支持向量机是比较常用的机器学习模型,而且其效果非常不错,并且需要调整的参数很少,仅有C,因此适用于中小型复杂数据集。对于有超平面的线性可分数据可以使用线性核,对于无超平面的数据可以使用高斯核(RBF)。C越大则约束越宽松,容易过拟合,C越小则约束越严格,容易欠拟合。大多数情况是选择一个核,然后调整C值,达到最佳性能。RBF的SVM还会多一个gamma参数来调整,所以其拟合性能也更强大。
(2)决策树
决策树也是很常用的机器学习模型。该模型多数情况使用gini不纯度,其他参数也很好调整。
决策树的一个缺点在于其性能多取决于其数据分类的边界清晰度,因此对于数据的旋转比较敏感,可以尝试使用PCA+决策树来解决这一问题。
(3)集成学习和随机森林
集成学习就是模型的集合,使用多个模型来共同预测,听取大多数的意见。其中包括多个不同模型和多个相同模型。
多个不同模型:例如对于分类问题,使用SVC,logistic regression,贝叶斯分类器等,大家一起来预测,然后根据大家投票的多少或者概率高低来输出最终预测。举例:使用5个不同模型,有3个模型的输出是TRUE,2个是FALSE,那么最终voting classifier输出TRUE,这是硬投票;有3个模型输出是TRUE,概率为51%,52%,53%,而另外2个输出FALSE是68%,69%,那么模型根据最高概率69%,输出FALSE,这是软投票。
多个相同模型:包括bagging和pasting,在sklearn中是bagging classifier。就是把样本分为多份,然后每一份使用相同的模型(例如SVM),bagging是说在样本分成多份的时候,是放回式的,pasting是不放回式的。一般情况bagging模式效果更好。当然,在抽样的时候,没被抽到的数据其实可以用来进行验证过程,即包外评估,在sklearn中就是设置oob_score = True。
随机森林:是一个很强大的机器学习模型,推荐使用,简单易用。
(4)集成学习的boosting法
boosting提升法:这个跟深度学习有点相似了,是在机器学习模型中加入了权重更新过程(不同于deep learning的反向传播,而是deep learning中的weight update)。在sklearn中是AdaBoost classifier。
梯度提升法:sklearn中的GradientBoostingRegressor(GBRT)梯度提升回归树,同boosting差不多,但是是对残差进行拟合和更新,而boosting是对参数权重进行更新。
堆叠法stacking:用几个不同的机器学习模型,在模型的输出后,将这些模型输出作为输入,加一个函数,来输出最终结果,就是堆叠法。
除了随机森林,集成学习的这些方法我用的少,研究也少,所以没有啥特别想说的。其实书上都有很详细的说明,包括其原理,感兴趣的想研究的可以去看一看,不想深究的就用随机森林就可以了。

调整超参数

调整模型超参数是机器学习的重要部分,也是机器学习领域被称为炼丹的由来。
超参数是每个模型自带的函数细节定义,每个模型都有初始超参数,通过调节这个超参数,可以让模型更适合我们的数据,从而大大提升模型预测的准确率。
当然,如何调整超参数,也是考验机器学习运用能力的一个重要方面,这里面涉及的内容比较深,包括在调整超参数的时候经常会面临的梯度爆炸和梯度不收敛,以及与其附带的学习率大小的设置等等相关问题。这里面要讲的比较多,甚至都可以单列一章。
(明天继续补充)

降维

降维只要有三种技术:PCA, Kernal PCA, LLE。
PCA:主成分分析;Kernal PCA:核主成分分析;LLE:局部线性嵌入。
PCA是大家最常用的一种降维方法,它不改变数据,只是改变数据的模式,主要功能是在高维度下表示我们的数据集。PCA使用的方法是奇异值分解法(SVD)。适用于寻找线性数据的决策边界。
Kernal PCA:适用于寻找非线性数据的决策边界。
LLE:非线性数据降维方法,它适合于流行数据,就是数据集是卷在一起的,俗称“瑞士卷”。
这个部分我用的不多,简单介绍。

机器学习介绍——个人经验相关推荐

  1. 最通俗的机器学习介绍

    最通俗的机器学习介绍 https://www.cnblogs.com/DicksonJYL/p/9592014.html 摘要:在本文中,我将描述数据分析是如何与机器学习相关的,还将揭开机器学习中的一 ...

  2. 麦子学院学习视频之机器学习(1):1.1 机器学习介绍

    今天开始学习机器学习,在网上找了很多视频还有书籍.由于本人不是计算机专业的学生,基础知识还是比较薄弱,但我非常想学习机器学习以及深度学习.最后还是选择了麦子学院的彭亮老师的<机器学习基础介绍&g ...

  3. Azure机器学习——Azure机器学习介绍

    Azure机器学习介绍 一.什么是Azure机器学习? 二.Azure 机器学习的几个重要概念 工作区(Workspace) 数据存储(Datastore) 计算目标(Compute Targets) ...

  4. SLS机器学习介绍(01):时序统计建模

    文章系列链接 SLS机器学习介绍(01):时序统计建模 SLS机器学习介绍(02):时序聚类建模 SLS机器学习介绍(03):时序异常检测建模 SLS机器学习介绍(04):规则模式挖掘 SLS机器学习 ...

  5. P1 机器学习介绍 p2 为什么要机器学习

    机器学习介绍 这门课,我们预期可以学到什么呢?我想多数同学的心理预期就是你可以学到一个很潮的人工智慧.我们知道,从今年开始,人工智慧这个词突然变得非常非常非常的热门,讲大家.政府通都在讲人工智慧这个词 ...

  6. SLS机器学习介绍(02):时序聚类建模

    文章系列链接 SLS机器学习介绍(01):时序统计建模 SLS机器学习介绍(02):时序聚类建模 SLS机器学习介绍(03):时序异常检测建模 SLS机器学习介绍(04):规则模式挖掘 前言 第一篇文 ...

  7. SLS机器学习介绍(05):时间序列预测

    00系列文章目录 0.1 算法原理目录 SLS机器学习介绍(01):时序统计建模 SLS机器学习介绍(02):时序聚类建模 SLS机器学习介绍(03):时序异常检测建模 SLS机器学习介绍(04):规 ...

  8. 《深度学习》李宏毅 -- task1机器学习介绍

    机器学习介绍    机器学习(Machine Learning),就是让机器自动找函数.如语音识别,就是让机器找一个函数,输入是声音信号,输出是对应的文字.如下棋,就是让机器找一个函数,输入是当前棋盘 ...

  9. 成功转型机器学习,多年的经验分享

    原址 这个年代,不怕你是大牛,就怕大牛还会写文章. 作为AI100智库专家,智亮总是能在口若悬河中,让人深入浅出地学到一堆堆干货,掏心窝子的干货. 多年的实战经验,让智亮无论是在知乎解答,还是各路博客 ...

最新文章

  1. 【MFC】MFC对话框类
  2. android listview中item通过viewpager实现
  3. so easy(2019徐州icpc网络赛B)
  4. iOS8 【xcode6中添加pch全局引用文件】
  5. java实现人脸识别源码【含测试效果图】——Dao层(IBaseDaoUtil)
  6. 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
  7. IDEA 配置Tomcat
  8. 修改oracle的表空间文件scn,分享:bbed修改数据文件头推进scn与其他数据文件相同...
  9. c语言oj平台作业,OJ平台C语言习题答案.pdf
  10. 上位机与下位机的通讯
  11. 【华为2019年校园招聘】2019-5-8 软件题
  12. php把数据存到cookie,php – 在cookie中存储数组
  13. php 发邮件 上传附件,PHPMailer实现PHP的邮件发送,附带附件
  14. 文件系统模拟程序python_树莓派开发实战(第2版)
  15. 路由器,交换机的存储介质的区别
  16. SpringCloud(三 Eureka集群配置)
  17. 【论文 | 复现】YOLO-landmark detection
  18. 嵌入式系统 操作系统 uC/OS uClinux
  19. C语言用两个for循环轻松实现九九乘法表(99乘法表)
  20. 如何拍摄自媒体?这些技巧可以帮到你

热门文章

  1. 学好Python一定要会的turtle库,turtle绘制太极☯
  2. 论文盘点:人脸表情识别解析
  3. Java项目:JSP教务处学生成绩管理系统
  4. 所有程序员都是自学成才的
  5. 下面个人免费版的xshell
  6. python headr方法_对Python发送带header的http请求方法详解
  7. 供应链管理数据驾驶舱
  8. 数据结构与算法——时间复杂度的粗略计算
  9. 解决IDEA不识别Java文件:文件变橙色显示后缀名.java
  10. ITK学习笔记(八) ITK高斯混合模型 GMM EM