個人總結:機器學習與算法工程師方向面試題及答案(持續更新)

1.快速排序

/快速排序
void quick_sort(int s[], int l, int r)
{
    if (l < r)
    {
        //Swap(s[l], s[(l + r) / 2]); //將中間的這個數和第一個數交換
        int i = l, j = r, x = s[l];
        while (i < j)
        {
            while(i < j && s[j] >= x) // 從右向左找第一個小於x的數
                j--;  
            if(i < j) 
                s[i++] = s[j];  //先賦值後++
            
            while(i < j && s[i] < x) // 從左向右找第一個大於等於x的數
                i++;  
            if(i < j) 
                s[j--] = s[i];  //先賦值後--
        }
        s[i] = x;
        //從s[i]劃分兩個子數組重複遞歸
        quick_sort(s, l, i - 1); // 遞歸調用 
        quick_sort(s, i + 1, r);
    }
}

來自:
https://www.runoob.com/w3cnote/quick-sort.html

2.列表中是否有這個數——二分查找

def seek(l, tag):
    n = len(l)
    if n == 1:
        return False
    count = n // 2
    if l[count] == tag:
        return True
    if l[count] > tag:
        return seek(l[:count], tag)
    if l[count] < tag:
        return seek(l[count:], tag)

來自:https://blog.csdn.net/nanyang1024/article/details/80043376

3.拉格朗日對偶性

某些條件下,把原始的約束問題通過拉格朗日函數轉化爲無約束問題,如果原始問題求解棘手,在滿足KKT的條件下用求解對偶問題來代替求解原始問題,使得問題求解更加容易
來自:
https://www.cnblogs.com/90zeng/p/Lagrange_duality.html

4.k-means原理及複雜度

K-means算法是很典型的基於距離的聚類算法,採用距離作爲相似性的評價指標,即認爲兩個對象的距離越近,其相似度就越大。該算法認爲簇是由距離靠近的對象組成的,因此把得到緊湊且獨立的簇作爲最終目標。
  k-means算法特點在於:同一聚類的簇內的對象相似度較高;而不同聚類的簇內的對象相似度較小。
k-means 優缺點:
K-Means聚類算法的優點主要集中在:
(1)算法快速、簡單;
(2)對大數據集有較高的效率並且是可伸縮性的;
(3)時間複雜度近於線性,而且適合挖掘大規模數據集。K-Means聚類算法的時間複雜度是O(n×k×t) ,其中n代表數據集中對象的數量,t代表着算法迭代的次數,k代表着簇的數目

k-means的缺點:
(1)在 K-means 算法中 K 是事先給定的,這個 K 值的選定是非常難以估計的。很多時候,事先並不知道給定的數據集應該分成多少個類別才最合適。
(2)在 K-means 算法中,首先需要根據初始聚類中心來確定一個初始劃分,然後對初始劃分進行優化。這個初始聚類中心的選擇對聚類結果有較大的影響,一旦初始值選擇的不好,可能無法得到有效的聚類結果,這也成爲 K-means算法的一個主要問題。
(3)從 K-means 算法框架可以看出,該算法需要不斷地進行樣本分類調整,不斷地計算調整後的新的聚類中心,因此當數據量非常大時,算法的時間開銷是非常大的。所以需要對算法的時間複雜度進行分析、改進,提高算法應用範圍。

來自:
https://blog.csdn.net/github_39261590/article/details/76910689

5.邏輯迴歸和SVM區別

5.1 LR和SVM有什麼相同點
(1)都是監督分類算法,判別模型;
(2)LR和SVM都可以處理分類問題,且一般都用於處理線性二分類問題(在改進的情況下可以處理多分類問題);
(3)兩個方法都可以增加不同的正則化項,如L1、L2等等。所以在很多實驗中,兩種算法的結果是很接近的。
5.2 LR和SVM有什麼不同點
(1)本質上是其loss function不同;
(2)SVM只考慮分類面上的點,而LR考慮所有點(遠離的點對邊界線的確定也起作用);
(3)在解決非線性問題時,支持向量機採用核函數的機制,而LR通常不採用核函數的方法;
(4)SVM依賴於數據的測度,而LR則不受影響;
(5)SVM自帶結構風險最小化,LR則是經驗風險最小化;
(6)LR和SVM在實際應用的區別。

來自:
http://imgtec.eetrend.com/d6-imgtec/blog/2018-11/19119.html

6.過擬合問題怎麼解決

一般提及到過擬合就是說在訓練集上模型表現很好,但是在測試集上效果很差,即模型的泛化能力不行。過擬合是模型訓練過程中參數擬合的問題,由於訓練數據本身有采樣誤差,擬合模型參數時這些採樣誤差都擬合進去就會帶來所謂的過擬合問題。
a.簡化網絡結構,如層數,單層神經元個數
b.early stopping,適當時間內就stopping訓練,每個神經元激活函數在不同數值區間的性能是不同的,值較小時爲線性區,適當增大後爲非線性區,過度增大則爲飽合區(梯度消失)。初始化時,神經元一般工作在線性區(擬合能力有限),訓練時間增大時,部分值會增大進入非線性區(擬合能力提高),但是訓練時間過大時,就會進入飽合區,神經元就“死掉”。所以應該在適當時間內就stopping訓練。
c.限制權值,正則化
d.增加噪聲:在輸入中增加噪聲(效果類似正則化);在權值中加入噪聲(非零初始化);
來自:
https://blog.csdn.net/liubo187/article/details/77092729

7.PCA降維

PCA的原理就是將原來的樣本數據投影到一個新的空間中,相當於我們在矩陣分析裏面學習的將一組矩陣映射到另外的座標系下。通過一個轉換座標,也可以理解成把一組座標轉換到另外一組座標系下,但是在新的座標系下,表示原來的原本不需要那麼多的變量,只需要原來樣本的最大的一個線性無關組的特徵值對應的空間的座標即可。
來自:
https://blog.csdn.net/wangzhiqing3/article/details/12193131

8.特徵工程之特徵選擇、組合、提取、篩選

在這裏插入圖片描述
來自:
https://blog.csdn.net/lilu_leo/article/details/65935048?utm_source=blogxgwz5

9.如何解決數據集數據不平衡問題

(1)採樣,分爲上採樣(小衆重複)和下采樣(大衆部分),大小樣本足夠多時;
(2)數據合成,大小樣本不足時;
(3)加權,設置合理的權重,實際應用中一般讓各個分類間的加權損失值近似相等;
(4)一分類,看做一分類(One Class Learning)或異常檢測(Novelty Detection)問題。
如何選擇:
(1)在正負樣本都非常之少的情況下,應該採用數據合成的方式;
(2)在負樣本足夠多,正樣本非常之少且比例及其懸殊的情況下,應該考慮一分類方法;
(3)在正負樣本都足夠多且比例不是特別懸殊的情況下,應該考慮採樣或者加權的方法。
(4)採樣和加權在數學上是等價的,但實際應用中效果卻有差別。尤其是採樣了諸如Random Forest等分類方法,訓練過程會對訓練集進行隨機採樣。在這種情況下,如果計算資源允許上採樣往往要比加權好一些。
(5)另外,雖然上採樣和下采樣都可以使數據集變得平衡,並且在數據足夠多的情況下等價,但兩者也是有區別的。實際應用中,我的經驗是如果計算資源足夠且小衆類樣本足夠多的情況下使用上採樣,否則使用下采樣,因爲上採樣會增加訓練集的大小進而增加訓練時間,同時小的訓練集非常容易產生過擬合。
(6)對於下采樣,如果計算資源相對較多且有良好的並行環境,應該選擇Ensemble方法。

來自:https://www.jianshu.com/p/be343414dd24

10.深度學習中常見分類模型

LeNet、AlexNet、VGG、GoogleNet、ResNet 是屬於圖像分類的CNN
(1)LeNet,1998,最早用於數字識別,輸入圖片爲32321,卷積核大小爲55,下采樣步長爲2,卷積時對原圖像無填充;在這裏插入圖片描述(2)AlexNet,2012,多層小卷積層疊加替換單層大卷積層,輸入圖片爲227227*3,使用了約6千萬個參數,AlexNet使用了ReLU激活函數,訓練時使用Dropout隨機忽略一部分神經元,以避免模型過擬合,Alexnet有一個特殊的計算層,LRN層,做的事是對當前層的輸出結果做平滑處理。
在這裏插入圖片描述
(3)VGGNet,2014,模型結構提升網絡性能,用的參數更是多達1億八千萬個(當然其中主要是因爲後兩者使用了較大的FC層),圖像轉化學習問題上效果好。
爲了減少信息的過度丟失,在加入Pool層減少feature maps size的同時同比例擴大它的channels數目。VGG網絡達到一定深度後就陷入了性能飽和的困境,即網絡越深,越容易出現梯度消失,導致模型訓練難度變大,出現“退化”現象(退化:當模型的深度增加時,輸出的錯誤率反而提高)。
在這裏插入圖片描述
(4)GoogleNet,2014,殘差網絡和GoogleNet網絡是解決網絡深度增加的同時能使得模型的分類性能隨着增加的網絡,模型的默認輸入尺寸時299x299,Google家的Inception系列模型提出的初衷主要爲了解決CNN分類模型的兩個問題,其一是如何使得網絡深度增加的同時能使得模型的分類性能隨着增加,而非像簡單的VGG網絡那樣達到一定深度後就陷入了性能飽和的困境(Resnet針對的也是此一問題);其二則是如何在保證分類網絡分類準確率提升或保持不降的同時使得模型的計算開銷與內存開銷充分地降低。在這裏插入圖片描述
(5)ResNet,2015,殘差網絡,爲了解決訓練“退化”問題,殘差模塊在輸入和輸出之間建立了一個直接連接,這樣新增的層僅僅需要在原來的輸入層基礎上學習新的特徵,即學習殘差,會比較容易。
在這裏插入圖片描述
來自:
https://blog.csdn.net/qq_34590704/article/details/89601008

11.卷積是什麼,卷積的原理,卷積核怎麼設定

(1)卷積的定義及原理
簡單定義:卷積是分析數學中一種重要的運算。
設:f(x),g(x)是R1上的兩個可積函數,作積分:
在這裏插入圖片描述
可以證明,關於幾乎所有的實數x,上述積分是存在的。這樣,隨着x的不同取值,這個積分就定義了一個新函數h(x),稱爲函數f與g的卷積,記爲h(x)=(fg)(x)。
定義:
卷積是兩個變量在某範圍內相乘後求和的結果。如果卷積的變量是序列x(n)和h(n),則卷積的結果
在這裏插入圖片描述
其中星號
表示卷積。當時序n=0時,序列h(-i)是h(i)的時序i取反的結果;時序取反使得h(i)以縱軸爲中心翻轉180度,所以這種相乘後求和的計算法稱爲卷積和,簡稱卷積。另外,n是使h(-i)位移的量,不同的n對應不同的卷積結果。
如果卷積的變量是函數x(t)和h(t),則卷積的計算變爲
,
其中p是積分變量,積分也是求和,t是使函數h(-p)位移的量,星號*表示卷積。
來自:
https://baike.baidu.com/item/%E5%8D%B7%E7%A7%AF/9411006?fr=kg_qa
通俗理解卷積:https://www.matongxue.com/madocs/32.html

(2)卷積核的設定
在達到相同感受野的情況下,卷積核越小,所需要的參數和計算量越小。
具體來說。卷積核大小必須大於1纔有提升感受野的作用,1排除了。而大小爲偶數的卷積核即使對稱地加padding也不能保證輸入feature map尺寸和輸出feature map尺寸不變(畫個圖算一下就可以發現),2排除了。所以一般都用3作爲卷積核大小。
來自:
https://www.sohu.com/a/241208957_787107

12.如何理解svm

支持向量機(Support Vector Machine, SVM)是一類按監督學習(supervised learning)方式對數據進行二元分類的廣義線性分類器(generalized linear classifier),也就是一種解決分類問題的線性可分性原理或方法
來自:
https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA/9683835?fromtitle=SVM&fromid=4385807&fr=aladdin

13.池化的原理,Maxpooling、Averagepooling原理

通過池化對特徵進行提取並且縮小數據
下圖是maxpooling 也就是最大池化,舉例以一個22的卷積核,步長爲2,來遍歷整個矩陣,每經過一個22的區域就將這塊區域中的最大值提取出來存放。具體如下圖所示
在這裏插入圖片描述
同理avgpooling也就是平均池化層就是將2*2的區域的所有值加起來取得均值存放。

來自:
https://www.cnblogs.com/DOMLX/p/9579108.html

14.dropout原理

訓練深度神經網絡的時候,總是會遇到兩大缺點:(1)容易過擬合;(2)費時。Dropout可以比較有效的緩解過擬合的發生,在一定程度上達到正則化(約束規範,使得模型有更好的泛化能力)的效果。
簡單理解:神經元在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止工作,這樣可以使模型泛化性更強,因爲它不會太依賴某些局部的特徵,如下圖所示
在這裏插入圖片描述
來自:
https://blog.csdn.net/program_developer/article/details/80737724

15.什麼是範數,泛函分析

範數,是具有“長度”概念的函數。在線性代數、泛函分析及相關的數學領域,範數是一個函數,是矢量空間內的所有矢量賦予非零的正長度或大小。在泛函分析中,它定義在賦範線性空間中,並滿足一定的條件,即①非負性;②齊次性;③三角不等式。它常常被用來度量某個向量空間(或矩陣)中的每個向量的長度或大小。
泛函分析(Functional Analysis)是現代數學的一個分支,隸屬於分析學,其研究的主要對象是函數構成的空間。泛函分析是由對函數的變換(如傅立葉變換等)的性質的研究和對微分方程以及積分方程的研究發展而來的。使用泛函作爲表述源自變分法,代表作用於函數的函數。它綜合運用函數論,幾何學,現代數學的觀點來研究無限維向量空間上的泛函,算子和極限理論。它可以看作無限維向量空間的解析幾何及數學分析。泛函分析在數學物理方程,概率論,計算數學等分科中都有應用,也是研究具有無限個自由度的物理系統的數學工具。
來自:
https://baike.baidu.com/item/%E8%8C%83%E6%95%B0/10856788
https://baike.baidu.com/item/%E6%B3%9B%E5%87%BD%E5%88%86%E6%9E%90/4151

16.什麼是決策樹

(decision tree) 是一種分類與迴歸方法,主要用於分類,決策樹模型呈現樹形結構,是基於輸入特徵對實例進行分類的模型。我認爲決策樹其實是定義在特徵空間與類空間上的條件概率分佈!

使用決策樹算法的主要步驟又是什麼呢? 可以分爲三部分: 1特徵的選取 2 決策樹的生成 3 決策樹的修剪

當前決策樹的主要流行的三個算法是 ID3算法 C4.5算法和 CART算法(classification and regression tree)分類與迴歸樹
來自:
https://blog.csdn.net/moxiaoxuan123/article/details/81411396

17.什麼是集成學習

在機器學習的有監督學習算法中,我們的目標是學習出一個穩定的且在各個方面表現都較好的模型,但實際情況往往不這麼理想,有時我們只能得到多個有偏好的模型(弱監督模型,在某些方面表現的比較好)。集成學習就是組合這裏的多個弱監督模型以期得到一個更好更全面的強監督模型,集成學習潛在的思想是即便某一個弱分類器得到了錯誤的預測,其他的弱分類器也可以將錯誤糾正回來。
集成方法是將幾種機器學習技術組合成一個預測模型的元算法,以達到減小方差(bagging)、偏差(boosting)或改進預測(stacking)的效果。
集成學習在各個規模的數據集上都有很好的策略。
數據集大:劃分成多個小數據集,學習多個模型進行組合
數據集小:利用Bootstrap方法進行抽樣,得到多個數據集,分別訓練多個模型再進行組合
來自:
https://www.cnblogs.com/zongfa/p/9304353.html

18.GAN模型

Generative Adversarial Network,生成式對抗網絡,模型通過學習一些數據,然後生成類似的數據。
GAN 有兩個網絡,一個是 generator,一個是 discriminator,從二人零和博弈中受啓發,通過兩個網絡互相對抗來達到最好的生成效果。流程如下
在這裏插入圖片描述

19.什麼是張量

張量概念是矢量概念的推廣,矢量是一階張量。張量是一個可用來表示在一些矢量、標量和其他張量之間的線性關係的多線性函數。
張量(Tensor)是一個定義在一些向量空間和一些對偶空間的笛卡兒積上的多重線性映射,其座標是|n|維空間內,有|n|個分量的一種量, 其中每個分量都是座標的函數, 而在座標變換時,這些分量也依照某些規則作線性變換。
在同構的意義下,第零階張量 (r = 0) 爲標量 (Scalar),第一階張量 (r = 1) 爲向量 (Vector), 第二階張量 (r = 2) 則成爲矩陣 (Matrix)。

20.介紹一下Python的淺拷貝和深拷貝

淺拷貝,copy只拷貝原始對象,沒有拷貝對象的子對象,如果子對象變化,拷貝後的對象也變化
深拷貝,deepcopy完全拷貝對象,包括其子對象,生成完全獨立於原始對象的對象,子對象變化對深拷貝後的對象無影響。
可參考:
https://blog.csdn.net/zhubaoJay/article/details/90897028

21.常見目標檢測的深度學習模型

目標檢測常見算法主要分爲兩類:
One stage: SSD, YOLO V1, YOLO V2, YOLO V3; (精度較低,速度較快)
Two stage: Fast RCNN, Faster RCNN;(精度較高,速度較慢)
Multi stage:RCNN;(精度較低,速度極慢)
來自:
https://blog.csdn.net/u012797056/article/details/84895884

22.什麼是牛頓法

牛頓迭代法(Newton’s method)又稱爲牛頓-拉夫遜(拉弗森)方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。

來自:
https://baike.baidu.com/item/%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95/10887580?fromtitle=%E7%89%9B%E9%A1%BF%E6%B3%95&fromid=1384129&fr=aladdin

23.FFM和FM的區別

商用推薦場景中的CTR預估工作易面臨大規模稀疏數據的挑戰。因子分解機( Factorization Machine, 簡稱FM )模型的引入正對於此,其通過對參數矩陣的低秩分解,來解決高維訓練的低效問題。這裏,首先示例性地介紹數據稀疏和特徵組合的相關內容,然後引出FM模型及其拓展形式FFM。
FFM模型在FM模型的基礎上引入了場(field)的概念,即:具有相同性質或類型的特徵屬於同一個場。一般地,由同一個categorical特徵經過One-hot編碼所生成的特徵都可被視爲屬於同一個field。

來自:
https://www.e-learn.cn/content/qita/780562

24.如何判斷兩個鏈表是否有交叉

應該分兩種情況考慮,第一:這兩個鏈表本身都沒有環。 第二:這兩個鏈表本身都有環,詳情查看地址。
來自:
https://blog.csdn.net/seanyxie/article/details/6247071

25.邏輯迴歸推導

參考:
https://zhuanlan.zhihu.com/p/44591359

26.Linux 定時任務 執行sh文件

參考:
https://www.cnblogs.com/zhangwufei/p/8982224.html

27.批量梯度下降與隨機梯度下降

批量梯度下降法是最原始的形式,它是指在每一次迭代時使用所有樣本來進行梯度的更新。
隨機梯度下降法不同於批量梯度下降,隨機梯度下降是每次迭代使用一個樣本來對參數進行更新。使得訓練速度加快。
小批量梯度下降,是對批量梯度下降以及隨機梯度下降的一個折中辦法。其思想是:每次迭代 使用 ** batch_size** 個樣本來對參數進行更新。

來自:
https://www.cnblogs.com/bnuvincent/p/11183206.html

28.扔硬幣,先扔先贏的概率

參考:
https://blog.csdn.net/openfun/article/details/102777663

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章