關於機器學習的面試題,你又瞭解多少呢?

寫在前面: 博主是一名軟件工程系大數據應用開發專業大二的學生,暱稱來源於《愛麗絲夢遊仙境》中的Alice和自己的暱稱。作爲一名互聯網小白,寫博客一方面是爲了記錄自己的學習歷程,一方面是希望能夠幫助到很多和自己一樣處於起步階段的萌新。由於水平有限,博客中難免會有一些錯誤,有紕漏之處懇請各位大佬不吝賜教!個人小站:http://alices.ibilibili.xyz/ , 博客主頁:https://alice.blog.csdn.net/
儘管當前水平可能不及各位大佬,但我還是希望自己能夠做得更好,因爲一天的生活就是一生的縮影。我希望在最美的年華,做最好的自己

        前面已經陸續分享了幾篇關於機器學習的博客,相信剛接觸這個領域的朋友們肯定是比較感興趣的,那麼本篇博客讓博主爲大家介紹一些關於機器學習常見的面試題吧~
在這裏插入圖片描述


1、爲什麼需要對數值類型的特徵做歸一化?

  • 簡單理解

        爲了消除數據特徵之間的量綱影響,我們需要對特徵進行歸一化處理,使得不同指標之間具有可比性。例如,分析一個人的身高和體重對健康的影響,如果使用米(m)和幹克(kg)作爲單位,那麼身高特徵會在1.6-1.8m的數值範圍內,體重特徵會在50~100kg的範圍內,分析出來的結果顯然會傾向於數值差別比較大的體重特徵。想要得到更爲準確的結果,就需要進行特徵歸一化( normalization)處理,使各指標處於同一數值量級,以便進行分析。

        總結:K-Means計算模型需要相同量綱的數據,但業務上提供的數據量綱不同,所以需要統一量綱(歸一化)

  • 有哪些歸一化方式

        對數值類型的特徵做歸一化可以將所有的特徵都統一到一個大致相同的數值區間內。最常用的方法主要有以下兩種。

在這裏插入圖片描述
        我們也可以根據業務特點,自定義歸一化邏輯,就像我們在開發挖掘型標籤時,爲了執行歸一化給RFM打分。

  • 深入理解爲什麼要歸一化
    在這裏插入圖片描述

2、類別型特徵如何處理的?

        類別型特徵( Categorical Feature)主要是指性別(男、女)、血型(A、B、AB、O)等只在有限選項內取值的特徵。類別型特徵原始輸入通常是字符串形式,除了決策樹等少數模型能直接處理字符串形式的輸入,對於邏輯迴歸、支持向量機等模型來說,類別型特徵必須經過處理轉換成數值型特徵才能正確工作。

        總結:由於算法需要的特徵是數值類型(邏輯迴歸,支持向量機,K-Means),但是原始數據上的特徵大部分爲字符串,所以不能直接計算,需要將字符串轉爲數值型。

  • 從字符轉到數值類型轉換有哪些方法?
    在這裏插入圖片描述

3、距離/相似度如何計算?

        在數據分析和數據挖掘以及搜索引擎中,我們經常需要知道個體間差異的大小,進而評價個體的相似性和類別。常見的比如數據分析中比如相關分析,數據挖掘中的分類聚類(K-Means等)算法,搜索引擎進行物品推薦時。

        相似度就是比較兩個事物的相似性。一般通過計算事物的特徵之間的距離,如果距離小,那麼相似度大;如果距離大,那麼相似度小。比如兩種水果,將從顏色,大小,維生素含量等特徵進行比較相似性。

        問題定義:有兩個對象X,Y,都包含N維特徵,X=(x1,x2,x3,………,xn),Y=(y1,y2,y3,………,yn),計算X和Y的相似性。常用的有五種方法,如下。

  • 歐幾里得距離(Eucledian Distance)

        歐氏距離是最常用的距離計算公式,衡量的是多維空間中各個點之間的絕對距離,當數據很稠密並且連續時,這是一種很好的計算方式。

        因爲計算是基於各維度特徵的絕對數值,所以歐氏度量需要保證各維度指標在相同的刻度級別,比如對身高(cm)和體重(kg)兩個單位不同的指標使用歐式距離可能使結果失效。
在這裏插入圖片描述

  • 曼哈頓距離(Manhattan Distance)

        曼哈頓距離也稱出租車幾何,是由十九世紀的赫爾曼·閔可夫斯基所創詞彙,是種使用在幾何度量空間的幾何學用語,用以標明兩個點在標準座標系上的絕對軸距總和

在這裏插入圖片描述

  • 明可夫斯基距離(Minkowski distance)

        明氏距離是歐氏距離的推廣,是對多個距離度量公式的概括性的表述,看看下圖
在這裏插入圖片描述
        公式:
在這裏插入圖片描述
        從公式我們可以看出,

  • 當p==1,“明可夫斯基距離”變成“曼哈頓距離”

  • 當p==2,“明可夫斯基距離”變成“歐幾里得距離”

  • 當p==∞,“明可夫斯基距離”變成“切比雪夫距離”

        

  • 餘弦相似度(Cosine Similarity)

        餘弦相似度用向量空間中兩個向量夾角的餘弦值作爲衡量兩個個體間差異的大小。相比距離度量,餘弦相似度更加註重兩個向量在方向上的差異,而非距離或長度上。

在這裏插入圖片描述

  • 傑卡德相似係數Jaccard Similarity

        Jaccard係數主要用於計算符號度量或布爾值度量的個體間的相似度,因爲個體的特徵屬性都是由符號度量或者布爾值標識,因此無法衡量差異具 體值的大小,只能獲得“是否相同”這個結果,所以Jaccard係數只關心個體間共同具有的特徵是否一致這個問題。

在這裏插入圖片描述
        對於上面兩個對象A和B,我們用Jaccard計算它的相似性,公式如下

在這裏插入圖片描述
        首先計算出A和B的交(A ∩ B),以及A和B的並 (A ∪ B):

在這裏插入圖片描述
        然後利用公式進行計算:
在這裏插入圖片描述

  • 皮爾森相關係數(Pearson Correlation Coefficient)

        又稱相關相似性,通過Peason相關係數來度量兩個用戶的相似性。計算時,首先找到兩個用戶共同評分過的項目集,然後計算這兩個向量的相關係數。

        公式:

在這裏插入圖片描述

4、K-Means算法的缺陷和優點是什麼?

優點:

  1. 解決聚類問題的經典算法,簡單、快速
  2. 當處理大數據集時,該算法保持可伸縮性和高效率
  3. 當簇近似爲高斯分佈時,它的效果較好
  4. 時間複雜度近於線性,適合挖掘大規模數據集

缺點:

  1. 必須事先給出k(一般剛開始難以估計)
  2. 對初值敏感,即對於不同的初值,可能會導致不同結果
  3. 不適合非凸形狀的簇或者大小差別很大的簇
  4. 對噪聲和孤立點敏感

5、K-Means算法的應用場景

在這裏插入圖片描述

  • K-means十大應用案例

        K-means算法通常可以應用於維數、數值都很小且連續的數據集,比如:從隨機分佈的事物集合中將相同事物進行分組。

1.文檔分類器

        根據標籤、主題和文檔內容將文檔分爲多個不同的類別。這是一個非常標準且經典的K-means算法分類問題。首先,需要對文檔進行初始化處理,將每個文檔都用矢量來表示,並使用術語頻率來識別常用術語進行文檔分類,這一步很有必要。然後對文檔向量進行聚類,識別文檔組中的相似性。 這裏是用於文檔分類的K-means算法實現案例。

2.物品傳輸優化

        使用K-means算法的組合找到無人機最佳發射位置和遺傳算法來解決旅行商的行車路線問題,優化無人機物品傳輸過程。這是該項目的白皮書。

3.識別犯罪地點

        使用城市中特定地區的相關犯罪數據,分析犯罪類別、犯罪地點以及兩者之間的關聯,可以對城市或區域中容易犯罪的地區做高質量的勘察。這是基於德里飛行情報區犯罪數據的論文。

4.客戶分類

        聚類能過幫助營銷人員改善他們的客戶羣(在其目標區域內工作),並根據客戶的購買歷史、興趣或活動監控來對客戶類別做進一步細分。這是關於電信運營商如何將預付費客戶分爲充值模式、發送短信和瀏覽網站幾個類別的白皮書。對客戶進行分類有助於公司針對特定客戶羣制定特定的廣告。

5.球隊狀態分析

        分析球員的狀態一直都是體育界的一個關鍵要素。隨着競爭越來愈激烈,機器學習在這個領域也扮演着至關重要的角色。如果你想創建一個優秀的隊伍並且喜歡根據球員狀態來識別類似的球員,那麼K-means算法是一個很好的選擇。

6.保險欺詐檢測

        機器學習在欺詐檢測中也扮演着一個至關重要的角色,在汽車、醫療保險和保險欺詐檢測領域中廣泛應用。利用以往欺詐性索賠的歷史數據,根據它和欺詐性模式聚類的相似性來識別新的索賠。由於保險欺詐可能會對公司造成數百萬美元的損失,因此欺詐檢測對公司來說至關重要。這是汽車保險中使用聚類來檢測欺詐的白皮書。

7.乘車數據分析

        面向大衆公開的Uber乘車信息的數據集,爲我們提供了大量關於交通、運輸時間、高峯乘車地點等有價值的數據集。分析這些數據不僅對Uber大有好處,而且有助於我們對城市的交通模式進行深入的瞭解,來幫助我們做城市未來規劃。這是一篇使用單個樣本數據集來分析Uber數據過程的文章。

8.網絡分析犯罪分子

        網絡分析是從個人和團體中收集數據來識別二者之間的重要關係的過程。網絡分析源自於犯罪檔案,該檔案提供了調查部門的信息,以對犯罪現場的罪犯進行分類。這是一篇在學術環境中,如何根據用戶數據偏好對網絡用戶進行 cyber-profile的論文。

9.呼叫記錄詳細分析

        通話詳細記錄(CDR)是電信公司在對用戶的通話、短信和網絡活動信息的收集。將通話詳細記錄與客戶個人資料結合在一起,這能夠幫助電信公司對客戶需求做更多的預測。在這篇文章中,你將瞭解如何使用無監督K-Means聚類算法對客戶一天24小時的活動進行聚類,來了解客戶數小時內的使用情況。

10.IT警報的自動化聚類

        大型企業IT基礎架構技術組件(如網絡,存儲或數據庫)會生成大量的警報消息。由於警報消息可以指向具體的操作,因此必須對警報信息進行手動篩選,確保後續過程的優先級。對數據進行聚類可以對警報類別和平均修復時間做深入瞭解,有助於對未來故障進行預測。

6、K-Means算法如何確定K值?

肘部法則
在這裏插入圖片描述

  • SSE

手肘法的核心指標是

集合內誤差平方和:Within Set Sum of Squared Error, WSSSE

或者叫SSE(sum of the squared errors,誤差平方和),公式爲

在這裏插入圖片描述

  • 解釋

Ci是第i個簇

p是Ci中的樣本點

mi是Ci的質心(Ci中所有樣本的均值)

SSE是所有樣本的聚類誤差,代表了聚類效果的好壞。

  • SSE 變化圖

根據 SSE 的變化畫圖, 找到拐點

在這裏插入圖片描述
        隨着聚類數k的增大,樣本劃分會更加精細,每個簇的聚合程度會逐漸提高,那麼誤差平方和SSE自然會逐漸變小。

        當k小於真實聚類數時,由於k的增大會大幅增加每個簇的聚合程度,故SSE的下降幅度會很大,而當k到達真實聚類數時,再增加k所得到的聚合程度回報會迅速變小,所以SSE的下降幅度會驟減,然後隨着k值的繼續增大而趨於平緩,也就是說SSE和k的關係如圖是一個手肘的形狀,而這個肘部對應的k值就是數據的真實聚類數
在這裏插入圖片描述
        顯然,肘部對於的k值爲3(曲率最高),故對於這個數據集的聚類而言,最佳聚類數應該選3。

輪廓係數

在這裏插入圖片描述
        a表示C1簇中的某一個樣本點Xi到自身簇中其他樣本點的距離總和的平均值。

        bC2表示樣本點Xi 到C2簇中所有樣本點的距離總和的平均值。

        bC3表示樣本點Xi 到C3簇中所有樣本點的距離總和的平均值。

        定義b = min(bC2 ,bC3)

  • 簇內不相似度:樣本和簇內其它樣本之間的平均距離

        樣本i的簇內不相似度a(i)表示C中樣本和簇內其它樣本之間的平均距離。

        a(i)越小,說明樣本i越應該被聚類到該簇

  • 簇外不相似度:樣本和簇外其它樣本之間的平均距離最小值

        樣本i的簇外不相似度:b(i) = min { bi1, bi2, bi3 }

        bi越大,說明樣本i越不屬於其他簇

  • 計算公式
    在這裏插入圖片描述
  • 解釋

a:樣本Xi到同一簇內其他點不相似程度的平均值

b:樣本Xi到其他簇的平均不相似程度的最小值

■ S範圍在[-1,1]之間。該值越大,越合理
■ S(i) 接近 1, 說明樣本 i 聚類合理
■ S(i) 接近 -1, 則說明樣本 i 更應該分類到另外的簇
■ 若 s(i) 近似爲 0, 則說明樣本 i 在兩個簇的邊界上

  • 輪廓係數

        所有樣本的s(i)的均值稱爲聚類結果的輪廓係數,是該聚類是否合理的有效度量。

        使用輪廓係數(silhouette coefficient)來確定k,即選擇使係數較大所對應的k值。

7、K-Means算法實現-僞代碼

        出處:https://blog.csdn.net/fox_wayen/article/details/80467233

在這裏插入圖片描述

8、還有哪些其他的聚類算法?

        除了k-means 算法以外,聚類算法還有很多,其中“層次聚類算法”較爲有名。與k-means 算法不同,層次聚類算法不需要事先設定K簇的數量。

        在層次聚類算法中,一開始每個數據都自成一類。也就是說,有n 個數據就會形成n 個簇。然後重複執行“將距離最近的兩個簇合併爲一個”的操作n -1 次。每執行1 次,簇就會減少1 個。執行n -1 次後,所有數據就都被分到了一個簇中。在這個過程中,每個階段的簇的數量都不同,對應的聚類結果也不同。只要選擇其中最爲合理的1 個結果就好。

        合併簇的時候,爲了找出“距離最近的兩個簇”,需要先對簇之間的距離進行定義。根據定義方法不同,會有“最短距離法”“最長距離法”“中間距離法”等多種算法。

9、K近鄰法(Knn)與k-Means的區別?

        初學者會很容易就把K-Means和KNN搞混,其實兩者的差別還是很大的。

KNN K-Means
目的是爲了確定一個點的分類 目的是爲了將一系列點集分成k類
KNN是分類算法 K-Means是聚類算法
監督學習,分類目標事先已知 非監督學習,將相似數據歸到一起從而得到分類,沒有外部分類
訓練數據集有label,已經是完全正確的數據 訓練數據集無label,是雜亂無章的,經過聚類後才變得有點順序,先無序,後有序
沒有明顯的前期訓練過程,屬於memory-based learning 有明顯的前期訓練過程
K的含義:“k”是用來計算的相鄰數據數。來了一個樣本x,要給它分類,即求出它的y,就從數據集中,在x附近找離它最近的K個數據點,這K個數據點,類別c佔的個數最多,就把x的label設爲c K的含義:“k”是類的數目。K是人工固定好的數字,假設數據集合可以分爲K個簇,由於是依靠人工定好,需要一點先驗知識
K值確定後每次結果固定 K值確定後每次結果可能不同,從 n個數據對象任意選擇 k 個對象作爲初始聚類中心,隨機性對結果影響較大
時間複雜度:O(n) 時間複雜度:O(n*k*t),t爲迭代次數
相似點:都包含這樣的過程,給定一個點,在數據集中找離它最近的點。即二者都用到了NN(Nears Neighbor)算法,一般用KD樹來實現NN。

        爲了讓大家對K最近鄰算法(KNN)也有一個瞭解,這裏貼張圖大家感受下~

在這裏插入圖片描述


結語

        如果以上過程中出現了任何的紕漏錯誤,煩請大佬們指正😅

        受益的朋友或對大數據技術感興趣的夥伴記得點贊關注支持一波🙏

        希望我們都能在學習數據結構和算法的道路上越走越遠😉
在這裏插入圖片描述

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