常见问题及其回答
1.请你介绍一下你熟悉的机器学习模型或算法(以逻辑回归为例)
LR的原理
逻辑回归本质上是线性回归,只是在特征到结果的映射中加入了一层逻辑函数,
g
(
z
)
=
1
1
+
e
−
z
{\rm{g}}(z) = \frac{1}{{1 + {e^{ - z}}}}
g(z)=1+e−z1,即:先把特征线性求和
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+w1∗x1+...,+wn∗xn,然后使用函数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=1∣x)=g(wTx)=1+e−wTx1
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=0∣x)=1−g(wTx)=1+e−wTxe−wTx
损失函数
对于训练数据集,特征数据
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=1∏mg(wTx)yi∗(1−g(wTx))1−yi
取对数:
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=1∑myi∗lng(wTx)+(1−y)ln(1−g(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} ∂wj∂e(w)=∂wj∂{i=1∑m{yilng(wTxi)+(1−yi)ln(1−g(wTxi))}=∂wj∂i=1∑m[g(wTxi)yi−1−g(wTxi)1−yi]g(wTxi)′=∂wj∂i=1∑m[yi−g(wTxi)](wTxi)′=i=1∑m[yi−g(wTxi)]wj
2.请你介绍"KNN算法或模型原理"(一般是简历上的)?
KNN概述 (有监督算法,分类算法)
KNN是通过测量不同特征值之间的距离进行分类,它的思想是:如果一个样本在特征空间中的k个最相似(即:特征空间中最邻近)的样本中大多数属于某个类别,则该样本也属于这个类别。其算法描述为:
- 计算测试数据与各个训练数据之间的距离 ;
- 按照距离的递增关系进行排序;
- 选择距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前k个点出现频率最高的类别作为测试数据的预测分类。
KNN优点
1.理论成熟,思想简单,既可以用来做分类也可以用来做回归。
2.可用于非线性分类 。
3.适用于样本容量比较大的类域的自动分类。
KNN缺点
1.计算量大,分类速度慢
2.KNN在对属性较多的训练样本进行分类时,由于计算量大而使其效率大大降低效果。
3.K值难以确定 :目前没有很好的方法,一般采用先定一个初始值,然后根据实验测试的结果调整K值。
4.对不平衡样本集比较敏感:当样本不平衡时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。
3.请描述一下KNN算法和K-Means算法有什么区别?
不同点:
KNN | K-Means |
---|---|
1)KNN是分类算法 | 1)K-Means是聚类算法 |
2)监督学习 | 2)非监督学习 |
3)喂给它的数据是带label的数据,已经是完全正确的数据 | 3)喂给它的数据是无label的数据,是杂乱无章的,经过聚类后才变得有点顺序,先无序后有序 |
K的含义:来了一个样本x,要给它分类,即求出它的y,就从数据集中,在x附近找离它最近的k个数据点,这k个数据点,类别c点的个数最多,就把x的label设为c | k是人工固定好的数字,假设数据集合可以分为k个簇,由于是依靠人工定好,需要一点为先验知识 |
相似点:都包含这样的过程,给定一个点,在数据集中找离它最近的点,即:二者都用了NN(Near Neighbor)算法,一般KD树来实现NN。
4.KNN与K-Means的应用场景?
KNN是分类或者回归问题,对于类域的交叉或者重叠较多的待分样本集更适用。
K-Means是聚类问题,通常用于维数、数值都很小且连续的数据集。
应用领域:
KNN:文本分类、模式识别、聚类分析和多分类领域等。
K-Means:物品传输优化、客户分类和乘车数据分析等。
5.在项目(/将订单分配给车辆的过程)中,你使用什么算法的时候,遇到了哪些问题?最终如何解决的?
在将订单分配给车辆的应用场景中,我使用了K-Means算法,但是K-Means是以Cluster为中心进行聚类的,不能保证行驶路线最短,最终采用了KNN算法解决的,下一个加入到车辆的订单是距离车辆已分配的客户中心最近的订单。