程序员面试之机器学习
Posted 程序员食堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面试之机器学习相关的知识,希望对你有一定的参考价值。
关注程序员食堂更快成为大神噢!
Ro
B
ot
机·器·学·习
本期嘉宾:封帆
物联网14级
滴滴出行-大数据岗
年薪:25.5W
贴士
本篇文章是从数学层面讲解的经典机器学习算法,稍有难度,不适合编程新手学习哦。
在机器学习领域,目前比较流行的语言有R语言、Python、Java、C/C++、Lisp。
小白我决定要从python入手
如果你也想涉猎机器学习,阅读完本文记得给我建议哦,如有错误,望指出,我们一起学习。
机器学习主要是基于目前互联网发展产生的大量数据而进行的价值分析、挖掘,在互联网方面,以零散的用户数据,对用户行为习惯进行分析,从而分析总结出用户的喜好和行为预测。
在目前互联网公司大多都存在机器学习的身影,比如: 今日头条的用户会发现在推荐栏里出现的推荐的内容和用户平时浏览的自媒体内容息息相关,用户在平时浏览中点击了哪些内容,会产生相关的反馈信息:用户点击了被推荐的哪类内容,没有点击被推荐的哪类内容。
根据用户习惯点击的内容对内容进行个体化标签化分类,从而根据机器学习算法推导此用户的浏览内容偏向,根据分类偏向分析结果进而在新的内容被打上内容分类标签被上传至头条后给被标签化的用户推送相应的内容信息,从而使得用户的点击浏览率增高,相信大家也体验过在淘宝上搜索某件商品后,进入头条也会被推荐相应的商品,这也是目前互联网信息共享手段之一,用最近的热播剧<<猎头>>里的理解就是:这是一个信息资源共享的时代,多个服务方获得用户的信息,可以在多方面提供给用户更好的体验
结合我在滴滴接触的业务来为大家做案例分析,滴滴出行是国内目前一站式的打车平台,随着平台和订单的扩大化,乘客和司机之间产生的问题也不计其数,相信大家使用滴滴出行时候也会出现司机取消订单/乘客取消订单/司机绕路等情况的发生,这也是机器学习可以解决的问题
收集司乘的数据,对相应的数据进行建模分析,在司乘出现矛盾时及时对相应收集的GPS、司乘对App的操作来进行相应的责任判定,使得大量的订单出现的复杂问题由人工化处理转向智能化处理
由此可见,机器学习对目前互联网及生活的应用之广泛,很多时候我们一直都在这个数据圈内,既然在这个数据圈内,就需要更加了解这个数据圈,我本人在大二到大三时(目前大四)一直在做Java方面的学习开发,但是对机器学习领域还是小白一枚,若有错误或者不适当地方,还请见谅 。
周志华教授
<<机器学习>>
决策树部分
学习心得
1
为什么用决策树?
决策树是一类常见的机器学习方法,以二分类任务为例,我们希望从给定训练数据集学得一个模型用以对新示例进行分类,这个把样本分类的任务可看作对”当前样本属于正类吗?
“这个问题的”决策“或”判决“过程 决策时牵扯到属性的划分: 信息熵:主要指信息的混乱程度 信息增益:Gain(D,a)为以某一属性对数据集进行划分后,整体数据集混乱程度的降低量,整个决策树的构建过程就是在不断减少信息混乱程度的过程 。增益率:根据信息增益的公式了解到,信息增益在划分属性时候对可取值数目较多的属性有所偏好(由于不太方便,这里就不列出公式了),使用Gain(D,a)/IV(a)对信息增益带来的偏好度进行减弱,属性a的可能取值数目越多,IV(a)的取值通常会越大,但是一般不以增益率做直接的划分原则值 C4.5算法使用信息增益+增益率一起来决定划分的属性:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的,尽力达到对属性划分过程中的平衡 基尼指数:基尼指数Gini(D)反映了从数据集D中随机抽取两个样本,其类别标记不一致的概率,因此Gini(D)值越小,则数据集D的纯度越高,是CART决策树的划分属性方法
根据以上的比较经典的划分属性方式,我们可以在练习(有限少量)时先进行一下计算,当然觉得手工计算麻烦可以写个程序对数据进行计算,这个可以省很多事的(此时庆幸自己还是会写点程序的^_^)
决策树的剪枝处理
1
过拟合
过拟合:训练数据训练出的模型将训练数据“太当回事”了,也就是说,训练出的模型将训练数据集自身的一些特点当作当作所有数据的特点了,比如:假设我们小时候对白马王子的认知:骑白马的一定是王子,实际上还有唐僧不是吗?过拟合,差不多是这个理儿
2
欠拟合
一般我们进行监督学习的时候会将数据集以留出法,n次k折交叉验证法、自助法等划分为训练集和测试集,如果把训练集太当回事,那是“过拟合”,如果把训练数据都不当回事(就是对训练数据的一般性质都没学习好),那就是“欠拟合”了,很明显,“欠拟合”,一般我们需要解决大多是“过拟合”问题,对于决策树来说,“过拟合”可以采用“剪枝”的方法进行降低
2
连续值离散化处理
通常以决策树而进行的分类操作一般是以离散属性(有限个结果取值)进行的分类操作,但是实际操作中我们常常面临的是需要对连续属性进行划分属性操作,这给决策分类思想带来很大的麻烦,需要用到的技术就是“连续属性离散化”,其中最简单的策略是二分法对连续属性进行处理,也是C4.5决策树算法采用的机制:我们认为在连续属性的相邻值[a,a+1)之中取任意值对其划分结果相同,那么我们将数据集进行排序后,取连续两个属性的中间值作为候选划分点集合,然后对此集合进行离散式的属性划分,便可以达到连续属性离散化后对离散属性的划分方式进行划分
3
缺失值处理:
一般学习时不太会遇到缺失值的情况,但是在实际应用过程中经常会出现某样本上缺失属性值的情况,比如:数据传输失败、网络原因、设备原因等都会造成属性上数据值的缺失
对于属性值的缺失会产生两个比较显著的问题:
注
意
问
题
1>对于划分属性时,此属性的却是对划分原则的影响,无论使用信息增益、信息率、基尼指数对属性进行划分,缺失的属性值对其影响
2>当确定好以某属性对样本集进行划分训练时,遇见欲划分样本缺失此项属性值时该怎么解决
4
如何解决
对于问题1:在缺失值不多的情况下,我们可以选择将数据集D中此项属性值未缺失的样本过滤出来为D`,个根据D`上的数据对属性进行划分,同时也需要对每个样本x赋予一定的权重
对于问题2:当对每个样本划分好权重后,欲划分样本此时可以根据此属性在不同类别的占比情况表示为r,让此样本同时划分入所有的子节点,同时将样本本身权值*r进行重新复制,直观来看,就是让同一个样本以不同概率划入到不同的子节点去,以此解决问题2
因为篇幅有限,部分phtyon安装及配置请点击下方查看原文哦~
“呐,写代码呢,
最重要的就是开心啦”
梦想重要,开心也重要
有时呢,我们真的需要一点无厘头的小幽默
谢谢坚持看到结尾的朋友
小伙伴
一起学习机器学习
码农爱好者聚集地
编程学习|原创面经 | 大咖讲座
点击查看原文
以上是关于程序员面试之机器学习的主要内容,如果未能解决你的问题,请参考以下文章