1.什么是机器学习?
套用一下大神们对机器学习的定义,机器学习研究的是计算机怎样模拟人类的学习行为,以获取新的知识或技能,并重新组织已有的知识结构使之不断改善自身。简单一点说,就是计算机从数据中学习出规律和模式,以应用在新数据上做预测的任务。近年来互联网数据大爆炸,数据的丰富度和覆盖面远远超出人工可以观察和总结的范畴,而机器学习的算法能指引计算机在海量数据中,挖掘出有用的价值,也使得无数学习者为之着迷。
2.机器学习关注问题
并非所有的问题都适合用机器学习解决(很多逻辑清晰的问题用规则能很高效和准确地处理),也没有一个机器学习算法可以通用于所有问题。咱们先来了解了解,机器学习,到底关心和解决什么样的问题。
从功能的角度分类,机器学习在一定量级的数据上,可以解决下列问题:
1.分类问题
根据数据样本上抽取出的特征,判定其属于有限个类别中的哪一个。比如:
垃圾邮件识别(结果类别:1、垃圾邮件 2、正常邮件)
文本情感褒贬分析(结果类别:1、褒 2、贬)
图像内容识别识别(结果类别:1、喵星人 2、汪星人 3、人类 4、草泥马 5、都不是)。
2.回归问题
根据数据样本上抽取出的特征,预测一个连续值的结果。比如:
预测《战狼》票房
魔都2个月后的房价
3.聚类等问题
根据数据样本上抽取出的特征,让样本抱抱团(相近/相关的样本在一团内)。比如:
google的新闻分类
用户群体划分
我们再把上述常见问题划到机器学习最典型的2个分类上。
分类与回归问题需要用已知结果的数据做训练,属于“监督学习”
聚类的问题不需要已知标签,属于“非监督学习”。
如果在IT行业(尤其是互联网)里溜达一圈,你会发现机器学习在以下热点问题中有广泛应用:
1.计算机视觉
典型的应用包括:人脸识别、车牌识别、扫描文字识别、图片内容识别、图片搜索等等。
2.自然语言处理
典型的应用包括:搜索引擎智能匹配、文本内容理解、文本情绪判断,语音识别、输入法、机器翻译等等。
3.社会网络分析
典型的应用包括:用户画像、网络关联分析、欺诈作弊发现、热点发现等等。
4.推荐
典型的应用包括:虾米音乐的“歌曲推荐”,某宝的“猜你喜欢”等等。
3.基本工作流程
其工作流程如下:
3.1.1抽象成数学问题
对问题进行抽象和建模,转换成适合机器学习进行处理的数据
3.1.2获取数据
获取数据集,有两点需要考虑,一是数据正负例是否不平衡,二是要考虑数据量过大或特征过多是否能在单服务器上跑完(考虑降维)
3.1.3特征预处理与特征选择
良好的数据要能够提取出良好的特征才能真正发挥效力。
考虑归一化、离散化、因子化、缺失值处理、去除共线性等,数据挖掘过程中很多时间就花在它们上面。
3.1.4训练模型与调优
使用算法进行模型训练和参数调优
3.1.5模型诊断
如何确定模型调优的方向与思路呢?这就需要对模型进行诊断的技术。
过拟合、欠拟合判断,误差分析也是机器学习至关重要的步骤。这是一个反复迭代不断逼近的过程,需要不断地尝试,进而达到最优状态。
3.1.6模型融合
一般来说,模型融合后都能使得效果有一定提升。而且效果很好。
3.1.7上线运行
这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。
这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。
4.学习线路
数学基础
微积分,线性代数,概率统计,(还有很多,列太多就不想学了有木有。。。)
典型算法
绝大多数问题用典型机器学习的算法都能解决,粗略地列举一下这些方法如下:
处理分类问题的常用算法包括:逻辑回归(工业界最常用),支持向量机,随机森林,朴素贝叶斯(NLP中常用),深度神经网络(视频、图片、语音等多媒体数据中使用)。
处理回归问题的常用算法包括:线性回归,普通最小二乘回归(Ordinary Least Squares Regression),逐步回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)
处理聚类问题的常用算法包括:K均值(K-means),基于密度聚类,LDA等等。
降维的常用算法包括:主成分分析(PCA),奇异值分解(SVD)等。
推荐系统的常用算法:协同过滤算法
模型融合(model ensemble)和提升(boosting)的算法包括:bagging,adaboost,GBDT,GBRT
其他很重要的算法包括:EM算法等等。
编程语言、工具和环境
1.python
数据挖掘:
pandas:模拟R,进行数据浏览与预处理。
numpy:数组运算。
scipy:高效的科学计算。
matplotlib:非常方便的数据可视化工具。
机器学习:
scikit-learn:远近闻名的机器学习package。未必是最高效的,但是接口真心封装得好,几乎所有的机器学习算法输入输出部分格式都一致。而它的支持文档甚至可以直接当做教程来学习,非常用心。对于不是非常高纬度、高量级的数据,scikit-learn胜任得非常好
libsvm:高效率的svm模型实现(了解一下很有好处,libsvm的系数数据输入格式,在各处都非常常见)
keras/TensorFlow:对深度学习感兴趣的同学,也能很方便地搭建自己的神经网络了。
自然语言处理:
nltk:自然语言处理的相关功能做得非常全面,有典型语料库,而且上手也非常容易。
交互式环境:
ipython notebook:能直接打通数据到结果的通道,方便至极。强力推荐。
2.R
R最大的优势是开源社区,聚集了非常多功能强大可直接使用的包,绝大多数的机器学习算法在R中都有完善的包可直接使用,同时文档也非常齐全。常见的package包括:RGtk2, pmml, colorspace, ada, amap, arules, biclust, cba, descr, doBy, e1071, ellipse等等。另外,值得一提的是R的可视化效果做得非常不错,而这对于机器学习是非常有帮助的。
3.Java系列
WEKA Machine Learning Workbench 相当于java中的scikit-learn
大数据相关
Hadoop:基本上是工业界的标配了。一般用来做特征清洗、特征处理的相关工作。
spark:提供了MLlib这样的大数据机器学习平台,实现了很多常用算法。但可靠性、稳定性上有待提高。
基本介绍就到这里,欢迎入坑。。。
参考学习资料:
机器学习实战
周志华的西瓜书《机器学习》
吴恩达的机器学习coursera视频课程