算法工程师面试--常见问题及其回答

1.请你介绍一下你熟悉的机器学习模型或算法(以逻辑回归为例)

LR的原理

  逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数, g ( z ) = 1 1 + e − z {\rm{g}}(z) = \frac{1}{{1 + {e^{ - z}}}} g(z)=1+ez1,即:先把特征线性求和 z = w 0 + w 1 ∗ x 1 + . . . , + w n ∗ x n {\rm{z}} = {w_0} + {w_1}*{x_1} + ..., + {w_n}*{x_n} z=w0+w1x1+...,+wnxn,然后使用函数g(z)作为假设函数来预测。
  逻辑回归用来分类0/1问题,也就是预测结果属于0或者属于1的二值分类问题,有模型:
p ( y = 1 ∣ x ) = g ( w T x ) = 1 1 + e − w T x p(y = 1|x) = g({w^T}x) = \frac{1}{{1 + {e^{ - {w^T}x}}}} p(y=1x)=g(wTx)=1+ewTx1
p ( y = 0 ∣ x ) = 1 − g ( w T x ) = e − w T x 1 + e − w T x p(y = 0|x) = 1 - g({w^T}x) = \frac{{{e^{ - {w^T}x}}}}{{1 + {e^{ - {w^T}x}}}} p(y=0x)=1g(wTx)=1+ewTxewTx

损失函数

  对于训练数据集,特征数据 x = { x 1 , x 2 , . . . , x m } x = \{ {x_1},{x_2},...,{x_m}\} x={x1,x2,...,xm}和对应的分类标签 y = { y 1 , . . . , y m } {\rm{y}} = \{ {y_1},...,{y_m}\} y={y1,...,ym}。假设m个样本相互独立,那么它们的联合分布为各边缘分布的乘积,得到似然函数:
L ( w ) = ∏ i = 1 m g ( w T x ) y i ∗ ( 1 − g ( w T x ) ) 1 − y i L(w) = {\prod\limits_{i = 1}^m {g({w^T}x)} ^{{y_i}}}*{(1 - g({w^T}x))^{1 - {y_i}}} L(w)=i=1mg(wTx)yi(1g(wTx))1yi
取对数:
e ( w ) = ln ⁡ L ( w ) = ∑ i = 1 m y i ∗ ln ⁡ g ( w T x ) + ( 1 − y ) ln ⁡ ( 1 − g ( w T x ) ) e(w) = \ln L(w) = \sum\limits_{i = 1}^m {{y_i}*\ln g({w^T}x)} + (1 - y)\ln (1 - g({w^T}x)) e(w)=lnL(w)=i=1myilng(wTx)+(1y)ln(1g(wTx))

求解方法

  与线性回归类似,我们使用梯度上升的方法(类似与梯度下降方法),那么随机梯度上升更新规则为: w : = w + α ∗ ∇ w e ( w ) w: = w + \alpha *{\nabla _w}e(w) w:=w+αwe(w)

∂ ∂ w j e ( w ) = ∂ ∂ w j { ∑ i = 1 m { y i l n    g ( w T x i ) + ( 1 − y i ) l n    ( 1 − g ( w T x i ) ) }                            = ∂ ∂ w j ∑ i = 1 m [ y i g ( w T x i ) − 1 − y i 1 − g ( w T x i ) ] g ( w T x i ) ′                            = ∂ ∂ w j ∑ i = 1 m [ y i − g ( w T x i ) ] ( w T x i ) ′                            = ∑ i = 1 m [ y i − g ( w T x i ) ] w j \begin{array}{l} \frac{\partial }{{\partial {w_j}}}e(w) = \frac{\partial }{{\partial {w_j}}}\{ \sum\limits_{i = 1}^m {\{ {y_i}ln\;g({w^T}{x_i})} + (1 - {y_i})ln\;(1 - g({w^T}{x_i}))\} \\ \;\;\;\;\;\;\;\;\;\;\;\;\; = \frac{\partial }{{\partial {w_j}}}\sum\limits_{i = 1}^m {[\frac{{{y_i}}}{{g({w^T}{x_i})}} - \frac{{1 - {y_i}}}{{1 - g({w^T}{x_i})}}]g({w^T}{x_i})'} \\ \;\;\;\;\;\;\;\;\;\;\;\;\; = \frac{\partial }{{\partial {w_j}}}\sum\limits_{i = 1}^m {[{y_i} - g({w^T}{x_i})]({w^T}{x_i})'} \\ \;\;\;\;\;\;\;\;\;\;\;\;\; = \sum\limits_{i = 1}^m {[{y_i} - g({w^T}{x_i})]{w_j}} \end{array} wje(w)=wj{i=1m{yilng(wTxi)+(1yi)ln(1g(wTxi))}=wji=1m[g(wTxi)yi1g(wTxi)1yi]g(wTxi)=wji=1m[yig(wTxi)](wTxi)=i=1m[yig(wTxi)]wj

2.请你介绍"KNN算法或模型原理"(一般是简历上的)?

KNN概述 (有监督算法,分类算法)

  KNN是通过测量不同特征值之间的距离进行分类,它的思想是:如果一个样本在特征空间中的k个最相似(即:特征空间中最邻近)的样本中大多数属于某个类别,则该样本也属于这个类别。其算法描述为:

  1. 计算测试数据与各个训练数据之间的距离 ;
  2. 按照距离的递增关系进行排序;
  3. 选择距离最小的k个点;
  4. 确定前k个点所在类别的出现频率;
  5. 返回前k个点出现频率最高的类别作为测试数据的预测分类。

KNN优点

 1.理论成熟,思想简单,既可以用来做分类也可以用来做回归。
 2.可用于非线性分类 。
 3.适用于样本容量比较大的类域的自动分类。

KNN缺点

 1.计算量大,分类速度慢
 2.KNN在对属性较多的训练样本进行分类时,由于计算量大而使其效率大大降低效果。
 3.K值难以确定 :目前没有很好的方法,一般采用先定一个初始值,然后根据实验测试的结果调整K值。 
 4.对不平衡样本集比较敏感:当样本不平衡时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。

3.请描述一下KNN算法和K-Means算法有什么区别?

不同点:

KNNK-Means
1)KNN是分类算法1)K-Means是聚类算法
2)监督学习2)非监督学习
3)喂给它的数据是带label的数据,已经是完全正确的数据3)喂给它的数据是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序后有序
K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的k个数据点,这k个数据点,类别c点的个数最多,就把x的label设为ck是人工固定好的数字,假设数据集合可以分为k个簇,由于是依靠人工定好,需要一点为先验知识

相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点,即:二者都用了NN(Near Neighbor)算法,一般KD树来实现NN。

4.KNN与K-Means的应用场景?

  KNN是分类或者回归问题,对于类域的交叉或者重叠较多的待分样本集更适用。
  K-Means是聚类问题,通常用于维数、数值都很小且连续的数据集。
  应用领域:
    KNN:文本分类、模式识别、聚类分析和多分类领域等。
    K-Means:物品传输优化、客户分类和乘车数据分析等。

5.在项目(/将订单分配给车辆的过程)中,你使用什么算法的时候,遇到了哪些问题?最终如何解决的?

  在将订单分配给车辆的应用场景中,我使用了K-Means算法,但是K-Means是以Cluster为中心进行聚类的,不能保证行驶路线最短,最终采用了KNN算法解决的,下一个加入到车辆的订单是距离车辆已分配的客户中心最近的订单。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值