数据挖掘常见面试题

1.机器学习方面

1.1 为什么会有过拟合,如何预防或克服过拟合?

过拟合(overfit): 在训练数据集上能获得很好的拟合,但在测试数据集上拟合的很糟糕,这种现象叫过拟合,就是训练的模型过于记住了训练样本的特征,使模型的训练误差很小,泛化误差很大。
过拟合产生的原因:
1.训练集和测试集特征分布不一致
2.数据噪声太大
3.数据量太小
4.特征量太多
5.模型太过复杂
解决方法:
1.减少特征数量(人工定义留多少个feature或算法选取这些feature)
2.正则化(即Regularization,包括L1和L2,效果是减小部分feature的权重)
3.增大样本训练规模
4.简化模型
5.交叉验证(K折交叉验证)
6.dropout
为什么L2正则化项能防止过拟合?
L2正则化就是在损失函数(衡量预测值与真实值之间差异的函数)后面再加上一个正则化项:在这里插入图片描述
C0代表原始的损失函数,后面一项就是L2正则化项,它是所有参数w的平方和除以训练集的样本量n,λ就是正则项系数,权衡正则与C0项的比重。另外还有一个系数1/2,主要是为了后面求导的结果方便,后面那一项求导会产生一个2,与1/2相乘刚好凑整。
数据挖掘常见面试题_第1张图片
在这里插入图片描述可以看作权重w的斜率,η是学习率,每次以η为步长减小权重w。
可以发现L2 正则化项对b没有影响,但是对于w有影响:
数据挖掘常见面试题_第2张图片
在不使用L2正则化时,求导结果中w前系数为1,现在为1−ηλ/n,因为η、λ、n都是正的,所以1−ηλ/n小于1,它的效果是减小w,这也就是权重衰减(weight decay)的由来。当然考虑到后面的导数项,w最终的值可能增大也可能减小。
另外,需要提一下,对于基于mini-batch的随机梯度下降,w和b更新的公式跟上面给出的有点不同:
在这里插入图片描述在这里插入图片描述
对比上面w的更新公式,可以发现后面那一项变了,变成所有导数加和,乘以η再除以m,m是一个mini-batch中样本的个数。
到目前为止,我们只是解释了L2正则化项有让w“变小”的效果,但是还没解释为什么w“变小”可以防止overfitting?一个所谓“显而易见”的解释就是:更小的权值w,从某种意义上说,表示网络的复杂度更低,对数据的拟合刚刚好(这个法则也叫做奥卡姆剃刀),而在实际应用中,也验证了这一点,L2正则化的效果往往好于未经正则化的效果。当然,对于很多人(包括我)来说,这个解释似乎不那么显而易见,所以这里添加一个稍微数学一点的解释(引自知乎):
过拟合的时候,拟合函数的系数往往非常大,为什么?如下图所示,过拟合,就是拟合函数需要顾忌每一个点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。
数据挖掘常见面试题_第3张图片
而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。
L1 regularization
在原始的代价函数后面加上一个L1正则化项,即所有权重w的绝对值的和,乘以λ/n(这里不像L2正则化项那样,需要再乘以1/2,具体原因上面已经说过。)
数据挖掘常见面试题_第4张图片
同样先计算导数:在这里插入图片描述
上式中sgn(w)表示w的符号。那么权重w的更新规则为:
数据挖掘常见面试题_第5张图片
比原始的更新规则多出了η * λ * sgn(w)/n这一项。当w为正时,更新后的w变小。当w为负时,更新后的w变大——因此它的效果就是让w往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。
另外,上面没有提到一个问题,当w为0时怎么办?当w等于0时,|W|是不可导的,所以我们只能按照原始的未经正则化的方法去更新w,这就相当于去掉ηλsgn(w)/n这一项,所以我们可以规定sgn(0)=0,这样就把w=0的情况也统一进来了。(在编程的时候,令sgn(0)=0,sgn(w>0)=1,sgn(w<0)=-1)

1.2 无监督和有监督算法的区别

监督学习(supervised Learning):通过已有的训练样本(即已知数据以及其对应的输出)来训练,从而得到一个最优模型,再利用这个模型将所有新的数据样本映射为相应的输出结果,对输出结果进行简单的判断从而实现分类的目的,那么这个最优模型也就具有了对未知数据进行分类的能力。包括所有的回归算法分类算法,比如线性回归、决策树、KNN、SVM等
无监督学习(unsupervised learning):我们事先没有任何训练数据样本,需要直接对数据进行建模发现数据的结构。常见的无监督学习算法有聚类和降维:K-Means 聚类,层次聚类(系统聚类),主成分分析(PCA),奇异值分解(SVD)
1.2.1 K-Means聚类
聚类的目标是为数据点分组,使得不同聚类中的数据点是不相似的,同一聚类中的数据点则是类似的。
K 均值聚类的步骤如下:

  • 定义 K 个重心。一开始这些重心是随机的(也有一些更加有效的用于初始化重心的算法)
  • 寻找最近的重心并且更新聚类分配。将每个数据点都分配给这 K 个聚类中的一个。每个数据点都被分配给离它们最近的重心的聚类。这里的「接近程度」的度量是一个超参数——通常是欧几里得距离(Euclidean distance)。
  • 将重心移动到它们的聚类的中心。每个聚类的重心的新位置是通过计算该聚类中所有数据点的平均位置得到的。
  • 重复第 2 和 3 步,直到每次迭代时重心的位置不再显著变化
    1.2.2 主成分分析PCA
    利用降维的思想,在损失很少信息的前提下,把多个指标转化几个综合指标,综合指标称为主成分,每个主成分都是原始变量的线性组合,且各主成分间互不相关。
    1.2.3 奇异值分解(SVD)
    矩阵可以分解成特征值和特征向量,还有另一种分解方法,奇异值分解,将矩阵分解为奇异值和奇异向量。非方阵的矩阵没有特征分解,只能用奇异值分解
    假设我们将我们的数据表示成一个A=m×n的大型矩阵。SVD 让我们可以将这个大型矩阵分解成 3 个较小的矩阵的乘积;这 3 个矩阵分别是U=m x r、对角矩阵Σ=r x r、V=r x n,其中r是一个很小的值。在这个r×r的对角矩阵Σ中的值被称为奇异值。这些值的奇妙之处是可以被用于压缩原来的矩阵,如果你丢弃奇异值中最小的 20% 以及矩阵U和V中相关的列,你就可以节省大量空间,同时仍然能很好地表征原来的矩阵。
    svd 图像压缩:
    用cv2读取图像,彩色图像是一个3通道的矩阵[m,n,k],灰度后的是一个二维矩阵[m,n]
  • Step1:Svd分解后,U,sigma,V
  • Step2: 取前K个最大的奇异值,生成一个k维的奇异对角阵。sigma R=Np.diag(sigma[:k])
  • Step3: 压缩后的图像= np.mat(U[:,:k])sigmaRV[:k,:] #压缩后还是595*446的图片
1.3 什么是数据标准化?为什么要进行数据标准化?

标准化:对数据按照比例进行缩放,使之落入一个特定的区域
为什么标准化:为了消除指标之间的量纲(即数据的单位)和取值范围的差异,将其转为无量纲的数据,便于不同单位或量级的数据能够进行加权。假如你有身高和体重两个个特征。身高的单位是m,它的取值经常是这样的值:1.65,1,70,1.67等,而体重的单都位是kg,它经常取这样的值:53,68,73等,我们可以看到体重的值要远远大于身高的值,它们已经不是一个量级了。进行数据的缩放可以避免我们的结果由取值较大的特征决定。

1.4 降维是什么?在哪里会用到降维?它的好处是什么?

降维是指通过保留一些重要的特征,减少数据特征的维度。
降维的好处:
(1)节省存储空间
(2)加快计算速度(比如机器学习算法中),维度越少,计算量越少,
(3)去除一些冗余的特征
(4)数据可视化,便于观察和挖掘信息

1.5 KNN k近邻分类算法

1. KNN算法的思想
KNN算法用于分类的核心思想是:存在一个样本数据集合,我们知道样本集中每个数据与其所属分类的关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k近邻算法中k的出处(通常k<20)。最后,我们选择k个最相似数据中出现次数最多的分类,作为新数据的分类。
  KNN算法用于回归的核心思想是:跟上面一样,找到近邻的k个样本,然后取平均值作为未知样本的值,对其进行预测
2. 算法步骤:
  1)算距离:给定未知对象,计算它与训练集中的每个对象的距离;
  2)找近邻:圈定距离最近的k个训练对象,作为未知对象的近邻;
  3)做分类:在这k个近邻中出线次数最多的类别就是测试对象的预测类别。
3. 距离或相似度的衡量:
  在KNN算法中常使用欧氏距离、曼哈顿距离和夹角余弦来计算距离从而来衡量各个对象之间的非相似度。在实际中使用哪一种衡量方法需要具体情况具体分析。对于关系型数据,常使用欧氏距离;对于文本分类来说,使用夹角余弦(cosine)来计算相似度就比欧式(Euclidean)距离更合适。
欧式距离:
欧式距离源自N维欧氏空间中两点x1,x2间的距离公式:
在这里插入图片描述
余弦距离:
几何中,夹角余弦可用来衡量两个向量方向的差异
两个n维样本点a(x11,x12,…,x1n)和b(x21,x22,…,x2n)的夹角余弦为:
数据挖掘常见面试题_第6张图片
夹角余弦取值范围为[-1,1]。余弦越大表示两个向量的夹角越小,余弦越小表示两向量的夹角越大。当两个向量的方向重合时余弦取最大值1,当两个向量的方向完全相反余弦取最小值-1。
曼哈顿距离:
n维空间点a(x11,x12,…,x1n)与b(x21,x22,…,x2n)的曼哈顿距离:
在这里插入图片描述

1.6 LR逻辑回归

1.应用:
一、 寻找危险因素,如寻找某一疾病的危险因素等
二、 预测,如果建立了logistic回归模型,则可以根据模型,预测不同的自变量情况下,发生某病或某种情况的概率有多大。
三、 判别, 实际上跟预测有些类似,判断某个人属于某病或某种情况的概率有多大。
2. 思想及原理:
逻辑回归可以看做是两步,第一步是线性回归,第二步通过逻辑函数,即sigmoid函数,将线性函数转换为非线性函数。
线性回归的公式:在这里插入图片描述
线性回归模型进行的是回归学习,也就是输出值的是实数,如果要做分类尼?需要找到一个单调可微的函数将分类标记与线性回归的预测值联系起来。因此逻辑回归是一个分类算法。将线性回归预测的值Z转换为0或1,在逻辑回归中用sigmod函数,当z大于0时y趋近于1,小于0时趋近于0。逻辑回归模型的表达式如下:
在这里插入图片描述
其中 在这里插入图片描述被称作sigmoid函数,我们可以看到,Logistics回归算法是将线性的函数结果映射到sigmoid函数中。

3. 逻辑回归为什么用sigmoid函数:
一、标签量y有0和1,在给定特征x的情况下,我们假设y是一个服从伯努利的二值随机变量,即寻找一个模型,输入x后,可以知道y所服从的随机分布的参数,知道参数后,就可以计算y的期望作为预测。具体思路:

  1. 对每一个确定的x,y仍是一个随机变量
  2. 该随机变量服从某个随机分布
  3. 求出这个随机分布的参数
  4. 求出该随机分布的期望
  5. 将期望作为预测值
    二、从更高层看待伯努利分布
    伯努利分布:在这里插入图片描述
    指数分布族:在这里插入图片描述 此时将 η作为实数处理应变量y本身只取0,1 两个值,不适于直接做回归中的应变量,所以用y=1的概率代替y本身,则 表示结果取1的概率,因此对于x有:
    在这里插入图片描述

在已得到实验结果的前提下,当样本值(x1,x2,…,xn)给定时,可以看做θ的函数,寻找使结果出现的可能性最大的那个θ作为真的θ估计,记作:
在这里插入图片描述

为似然函数,似然函数的大小表示该样本值出出现的可能性大小,既然样本值已存在,那它出现的可能性是大的。
Logistic的概率函数为:在这里插入图片描述

则似然函数为:在这里插入图片描述
取对数求最大估计

1.7 逻辑回归于SVM的区别

1. 损失函数不同
逻辑回归的损失函数:Loss(z)=log⁡( 1+exp⁡(-z))
SVM的损失函数:Loss(z)=log⁡( 1+exp⁡(-z))
损失函数的目的都是增加对分类影响较大的数据点的权重,减少与分类关系较小的数据点的权重。SVM的处理方法是考虑支持向量(距离超平面最近的这几个满足 的样本点),逻辑回归通过非线性映射,减小了离分类平面较远的点的权重,相对增加与分类最相关的数据点的权重。两者目的一样。SVM考虑局部(支持向量),而logistic回归考虑全局。

1.8 数据挖掘得完整流程

1.业务理解
2.数据抽取与清洗(缺失值处理,异常值处理等等)
3. 数据集成(不同类型的数据融合)
4.数据变换(函数变换,取对数,差分等,归一化,标准化,离散化或连续化)
5.数据规约(属性规约,常用方法包括决策树和主成分分析,通过组合属性创建新的属性维度,删除不想关属性来减少数据维度。数值规约:通过选择替代的,较小的数据来减少数据量)

2 数据库方面和数据结构

2.1 sql调优有哪些方法

1.在where和order by涉及的列上建立索引,避免全表扫描
2.尽量避免在where语句中对字段进行null值过滤,!=或<>,in,not in等操作符,or条件连接,否则会导致引擎放弃使用索引会进行全表扫描
3.连续的数值用between and,
4.where子句的解析顺序是自下而上的,根据这个原理,将那些条件过滤大的放在前面
5.使用like时,"a%“将会使用索引,而"a%c” 和 “%c” 则会使用全表扫描,
sql:多个班级,取不同班级的每个班级的前3名(3次)
select * from
(select row_number() over (partition by class order by score desc) 排名,* from sc) t
where 排名<=3 order by class asc,score desc

2.2 索引为什么能加快查询速度?

索引的原理:通过不断的缩小想要获得数据的范围来筛选最终想要的结果,同时把随机的事件变成顺序事件,也就是我们总是通过同一种查找方式来锁定数据。
索引的数据结构:B+树
目前大部分数据库系统及文件系统都采用B-Tree和B+Tree作为索引结构。B+树提高了磁盘IO性能和遍历元素的效率

2.3 当出现数据重复时,用最简单的方法查询出哪些数据重复

数据量小时:select * from t group by * having count(1)>1
数据量大时:

Reference:
L2正则化为什么防止过拟合:https://www.cnblogs.com/alexanderkun/p/6922428.html

你可能感兴趣的:(机器学习)