機器學習面試

面試的是BAT某家機器學習崗

1.可以用于任務分配的算法

貪心,動態規劃,分支限界法,拍賣算法以及一些人工智能算法(蟻群,遺傳等)

特點是什么?有什么優缺點?

2.回歸分析有哪些?說一下他們的原理以及特點,優缺點。

1, 線性回歸?

線性回歸的因變量是連續變量,自變量可以是連續變量,也可以是分類變量。如果只有一個自變量,且只有兩類,那這個回歸就等同于t檢驗。如果只有一個自變量,且有三類或更多類,那這個回歸就等同于方差分析。如果有2個自變量,一個是連續變量,一個是分類變量,那這個回歸就等同于協方差分析。所以線性回歸一定要認準一點,因變量一定要是連續變量。當然還有其它條件,比如獨立性、線性、等方差性、正態性。。


2, logistic回歸,與線性回歸并成為兩大回歸,應用范圍一點不亞于線性回歸,甚至有青出于藍之勢。因為logistic回歸太好用了,而且太有實際意義了。解釋起來直接就可以說,如果具有某個危險因素,發病風險增加2.3倍,聽起來多么地讓人通俗易懂。線性回歸相比之下其實際意義就弱了。logistic回歸與線性回歸恰好相反,因變量一定要是分類變量,不可能是連續變量。分類變量既可以是二分類,也可以是多分類,多分類中既可以是有序,也可以是無序。二分類logistic回歸有時候根據研究目的又分為條件logistic回歸和非條件logistic回歸。條件logistic回歸用于配對資料的分析,非條件logistic回歸用于非配對資料的分析,也就是直接隨機抽樣的資料。無序多分類logistic回歸有時候也成為多項logit模型,有序logistic回歸有時也稱為累積比數logit模型。?


3, cox回歸,cox回歸的因變量就有些特殊,因為他的因變量必須同時有2個,一個代表狀態,必須是分類變量,一個代表時間,應該是連續變量。只有同時具有這兩個變量,才能用cox回歸分析。cox回歸主要用于生存資料的分析,生存資料至少有兩個結局變量,一是死亡狀態,是活著還是死亡?二是死亡時間,如果死亡,什么時間死亡?如果活著,從開始觀察到結束時有多久了?所以有了這兩個變量,就可以考慮用cox回歸分析。


4, poisson回歸,poisson回歸相比就不如前三個用的廣泛了。但實際上,如果你能用logistic回歸,通常也可以用poission回歸,poisson回歸的因變量是個數,也就是觀察一段時間后,發病了多少人?或者死亡了多少人?等等。其實跟logistic回歸差不多,因為logistic回歸的結局是是否發病,是否死亡,也需要用到發病例數、死亡例數。大家仔細想想,其實跟發病多少人,死亡多少人一個道理。只是poission回歸名氣不如logistic回歸大,所以用的人也不如logistic回歸多。但不要因此就覺得poisson回歸沒有用。


5, probit回歸,在醫學里真的是不大用,最關鍵的問題就是probit這個詞太難理解了,通常翻譯為概率單位。probit函數其實跟logistic函數十分接近,二者分析結果也十分接近。可惜的是,probit回歸的實際含義真的不如logistic回歸容易理解,由此導致了它的默默無名,但據說在社會學領域用的似乎更多一些。


6,負二項回歸。所謂負二項指的是一種分布,其實跟poission回歸、logistic回歸有點類似,poission回歸用于服從poission分布的資料,logistic回歸用于服從二項分布的資料,負二項回歸用于服從負二項分布的資料。說起這些分布,大家就不愿意聽了,多么抽象的名詞,我也很頭疼。如果簡單點理解,二項分布你可以認為就是二分類數據,poission分布你可以認為是計數資料,也就是個數,而不是像身高等可能有小數點,個數是不可能有小數點的。負二項分布呢,也是個數,只不過比poission分布更苛刻,如果你的結局是個數,而且結局可能具有聚集性,那可能就是負二項分布。簡單舉例,如果調查流感的影響因素,結局當然是流感的例數,如果調查的人有的在同一個家庭里,由于流感具有傳染性,那么同一個家里如果一個人得流感,那其他人可能也被傳染,因此也得了流感,那這就是具有聚集性,這樣的數據盡管結果是個數,但由于具有聚集性,因此用poission回歸不一定合適,就可以考慮用負二項回歸。既然提到這個例子,我在上一篇文章說了,用于logistic回歸的數據通常也能用poission回歸,就像上面案例,我們可以把結局作為二分類,每個人都有兩個狀態,得流感或者不得流感,這是個二分類結局,那就可以用logistic回歸。但是這里的數據存在聚集性怎么辦呢,幸虧logistic回歸之外又有了更多的擴展,你可以用多水平logistic回歸模型,也可以考慮廣義估計方程。這兩種方法都可以處理具有層次性或重復測量資料的二分類因變量。


7,weibull回歸,有時中文音譯為威布爾回歸。weibull回歸估計你可能就沒大聽說過了,其實這個名字只不過是個噱頭,嚇唬人而已。上一篇說過了,生存資料的分析常用的是cox回歸,這種回歸幾乎統治了整個生存分析。但其實夾縫中還有幾個方法在頑強生存著,而且其實很有生命力,只是國內大多不愿用而已。weibull回歸就是其中之一。cox回歸為什么受歡迎呢,因為它簡單,用的時候不用考慮條件(除了等比例條件之外),大多數生存數據都可以用。而weibull回歸則有條件限制,用的時候數據必須符合weibull分布。怎么,又是分布?!估計大家頭又大了,是不是想直接不往下看了,還是用cox回歸吧。不過我還是建議看下去。為什么呢?相信大家都知道參數檢驗和非參數檢驗,而且可能更喜歡用參數檢驗,如t檢驗,而不喜歡用非參數檢驗,如秩和檢驗。那這里的weibull回歸和cox回歸基本上可以說是分別對應參數檢驗和非參數檢驗。參數檢驗和非參數檢驗的優缺點我也在前面文章里通俗介紹了,如果數據符合weibull分布,那么直接套用weibull回歸當然是最理想的選擇,他可以給出你最合理的估計。如果數據不符合weibull分布,那如果還用weibull回歸,那就套用錯誤,肯定結果也不會真實到哪兒去。所以說,如果你能判斷出你的數據是否符合weibull分布,那當然最好的使用參數回歸,也就是weibull回歸。但是如果你實在沒什么信心去判斷數據分布,那也可以老老實實地用cox回歸。cox回歸可以看作是非參數的,無論數據什么分布都能用,但正因為它什么數據都能用,所以不可避免地有個缺點,每個數據用的都不是恰到好處。weibull回歸就像是量體裁衣,把體形看做數據,衣服看做模型,weibull回歸就是根據你的體形做衣服,做出來的肯定對你正合身,對別人就不一定合身了。cox回歸呢,就像是到商場去買衣服,衣服對很多人都合適,但是對每個人都不是正合適,只能說是大致合適。至于到底是選擇麻煩的方式量體裁衣,還是圖簡單到商場直接去買現成的,那就根據你的喜好了,也根據你對自己體形的了解程度,如果非常熟悉,當然就量體裁衣了。如果不大了解,那就直接去商場買大眾化衣服吧。


8,主成分回歸。主成分回歸是一種合成的方法,相當于主成分分析與線性回歸的合成。主要用于解決自變量之間存在高度相關的情況。這在現實中不算少見。比如你要分析的自變量中同時有血壓值和血糖值,這兩個指標可能有一定的相關性,如果同時放入模型,會影響模型的穩定,有時也會造成嚴重后果,比如結果跟實際嚴重不符。當然解決方法很多,最簡單的就是剔除掉其中一個,但如果你實在舍不得,畢竟這是辛辛苦苦調查上來的,刪了太可惜了。如果舍不得,那就可以考慮用主成分回歸,相當于把這兩個變量所包含的信息用一個變量來表示,這個變量我們稱它叫主成分,所以就叫主成分回歸。當然,用一個變量代替兩個變量,肯定不可能完全包含他們的信息,能包含80%或90%就不錯了。但有時候我們必須做出抉擇,你是要100%的信息,但是變量非常多的模型?還是要90%的信息,但是只有1個或2個變量的模型?打個比方,你要診斷感冒,是不是必須把所有跟感冒有關的癥狀以及檢查結果都做完?還是簡單根據幾個癥狀就大致判斷呢?我想根據幾個癥狀大致能能確定90%是感冒了。不用非得100%的信息不是嗎?模型也是一樣,模型是用于實際的,不是空中樓閣。既然要用于實際,那就要做到簡單。對于一種疾病,如果30個指標能夠100%確診,而3個指標可以診斷80%,我想大家會選擇3個指標的模型。這就是主成分回歸存在的基礎,用幾個簡單的變量把多個指標的信息綜合一下,這樣幾個簡單的主成分可能就包含了原來很多自變量的大部分信息。這就是主成分回歸的原理。


9,嶺回歸。嶺回歸的名稱由來我也沒有查過,可能是因為它的圖形有點像嶺。不要糾結于名稱。嶺回歸也是用于處理自變量之間高度相關的情形。只是跟主成分回歸的具體估計方法不同。線性回歸的計算用的是最小二乘估計法,當自變量之間高度相關時,最小二乘回歸估計的參數估計值會不穩定,這時如果在公式里加點東西,讓它變得穩定,那就解決了這一問題了。嶺回歸就是這個思想,把最小二乘估計里加個k,改變它的估計值,使估計結果變穩定。至于k應該多大呢?可以根據嶺跡圖來判斷,估計這就是嶺回歸名稱的由來。你可以選非常多的k值,可以做出一個嶺跡圖,看看這個圖在取哪個值的時候變穩定了,那就確定k值了,然后整個參數估計不穩定的問題就解決了。


10,偏最小二乘回歸。偏最小二乘回歸也可以用于解決自變量之間高度相關的問題。但比主成分回歸和嶺回歸更好的一個優點是,偏最小二乘回歸可以用于例數很少的情形,甚至例數比自變量個數還少的情形。聽起來有點不可思議,不是說例數最好是自變量個數的10倍以上嗎?怎么可能例數比自變量還少,這還怎么計算?可惜的是,偏最小二乘回歸真的就有這么令人發指的優點。所以,如果你的自變量之間高度相關、例數又特別少、而自變量又很多(這么多無奈的毛病),那就現在不用發愁了,用偏最小二乘回歸就可以了。它的原理其實跟主成分回歸有點像,也是提取自變量的部分信息,損失一定的精度,但保證模型更符合實際。因此這種方法不是直接用因變量和自變量分析,而是用反映因變量和自變量部分信息的新的綜合變量來分析,所以它不需要例數一定比自變量多。偏最小二乘回歸還有一個很大的優點,那就是可以用于多個因變量的情形,普通的線性回歸都是只有一個因變量,而偏最小二乘回歸可用于多個因變量和多個自變量之間的分析。因為它的原理就是同時提取多個因變量和多個自變量的信息重新組成新的變量重新分析,所以多個因變量對它來說無所謂。

3.介紹SVM原理,核函數等

SVM方法是通過一個非線性映射p,把樣本空間映射到一個高維乃至無窮維的特征空間中(Hilbert空間),使得在原來的樣本空間中非線性可分的問題轉化為在特征空間中的線性可分的問題.簡單地說,就是升維和線性化.升維,就是把樣本向高維空間做映射,一般情況下這會增加計算的復雜性,甚至會引起“維數災難”,因而人們很少問津.但是作為分類、回歸等問題來說,很可能在低維樣本空間無法線性處理的樣本集,在高維特征空間中卻可以通過一個線性超平面實現線性劃分(或回歸).一般的升維都會帶來計算的復雜化,SVM方法巧妙地解決了這個難題:應用核函數的展開定理,就不需要知道非線性映射的顯式表達式;由于是在高維特征空間中建立線性學習機,所以與線性模型相比,不但幾乎不增加計算的復雜性,而且在某種程度上避免了“維數災難”.這一切要歸功于核函數的展開和計算理論.

選擇不同的核函數,可以生成不同的SVM,常用的核函數有以下4種:

⑴線性核函數K(x,y)=x·y;

⑵多項式核函數K(x,y)=[(x·y)+1]^d;

⑶徑向基函數K(x,y)=exp(-|x-y|^2/d^2)

⑷二層神經網絡核函數K(x,y)=tanh(a(x·y)+b).



4.說一下貝葉斯原理,貝葉斯分類過程和貝葉斯局限性

原理的話自己解釋,看肯定就是基于貝葉斯公式,

1.貝葉斯決策的優點

(1)貝葉斯決策能對信息的價值或是否需要采集新的信息做出科學的判斷.(2)它能對調查結果的可能性加以數量化的評價,而不是像一般的決策方法那樣,對調查結果或者是完全相信,或者是完全不相信.

(3)如果說任何調查結果都不可能完全準確,先驗知識或主觀概率也不是完全可以相信的,那么貝葉斯決策則巧妙地將這兩種信息有機地結合起來了.

(4)它可以在決策過程中根據具體情況下不斷地使用,使決策逐步完善和更加科學.

2.貝葉斯決策的局限性:

(1)它需要的數據多,分析計算比較復雜,特別在解決復雜問題時,這個矛盾就更為突出.

(2)有些數據必須使用主觀概率,有些人不太相信,這也妨礙了貝葉斯決策方法的推廣使用.

5.Java多態,Map,和垃圾回收

態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量倒底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在由程序運行期間才能決定。因為在程序運行時才確定具體的類,這樣,不用修改源程序代碼,就可以讓引用變量綁定到各種不同的類實現上,從而導致該引用調用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態,這就是多態性。

多態的好處

多態的出現大大的提高程序的擴展性。

Map:

將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口。

Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關系集的形式查看某個映射的內容。映射順序 定義為迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實現可明確保證其順序,如 TreeMap 類;另一些映射實現則不保證順序,如HashMap 類。

垃圾回收:

ava ?語言中一個顯著的特點就是引入了java回收機制,是c++程序員最頭疼的內存管理的問題迎刃而解,它使得java程序員在編寫程序的時候不在考慮內存管理。由于有個垃圾回收機制,java中的額對象不在有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內存泄露,有效的使用空閑的內存;

內存泄露:指該內存空間使用完畢后未回收,在不涉及復雜數據結構的一般情況下,java的內存泄露表現為一個內存對象的生命周期超出了程序需要它的時間長度,我們有是也將其稱為“對象游離”;

垃圾回收機制的算法

java語言規范沒有明確的說明JVM 使用哪種垃圾回收算法,但是任何一種垃圾回收算法一般要做兩件基本事情:(1)發現無用的信息對象;(2)回收將無用對象占用的內存空間。使該空間可被程序再次使用。

1。引用計數法(Reference Counting Collector)

引用計數算法是垃圾回收器中的早起策略,在這種方法中,堆中的每個對象實例都有一個引用計數器,點一個對象被創建時,且該對象實例分配給一個變量,該變量計數設置為1 ,當任何其他變量賦值為這個對象的引用時,計數加1 ,(a=b ,則b引用的對象實例計數器+1)但當一個對象實例的某個引用超過了生命周期或者被設置為一個新值時,對象實例的引用計數器減1,任何引用計數器為0 的對象實例可以當做垃圾收集。 當一個對象的實例被垃圾收集是,它引用的任何對象實例的引用計數器減1.

6.堆排序:

1.堆

堆實際上是一棵完全二叉樹,其任何一非葉節點滿足性質:

Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]或者Key[i]>=Key[2i+1]&&key>=key[2i+2]

即任何一非葉節點的關鍵字不大于或者不小于其左右孩子節點的關鍵字。

堆分為大頂堆和小頂堆,滿足Key[i]>=Key[2i+1]&&key>=key[2i+2]稱為大頂堆,滿足 Key[i]<=key[2i+1]&&Key[i]<=key[2i+2]稱為小頂堆。由上述性質可知大頂堆的堆頂的關鍵字肯定是所有關鍵字中最大的,小頂堆的堆頂的關鍵字是所有關鍵字中最小的。

2.堆排序的思想

利用大頂堆(小頂堆)堆頂記錄的是最大關鍵字(最小關鍵字)這一特性,使得每次從無序中選擇最大記錄(最小記錄)變得簡單。

其基本思想為(大頂堆):

1)將初始待排序關鍵字序列(R1,R2….Rn)構建成大頂堆,此堆為初始的無須區;

2)將堆頂元素R[1]與最后一個元素R[n]交換,此時得到新的無序區(R1,R2,……Rn-1)和新的有序區(Rn),且滿足R[1,2…n-1]<=R[n];

3)由于交換后新的堆頂R[1]可能違反堆的性質,因此需要對當前無序區(R1,R2,……Rn-1)調整為新堆,然后再次將R[1]與無序區最后一個元素交換,得到新的無序區(R1,R2….Rn-2)和新的有序區(Rn-1,Rn)。不斷重復此過程直到有序區的元素個數為n-1,則整個排序過程完成。

操作過程如下:

1)初始化堆:將R[1..n]構造為堆;

2)將當前無序區的堆頂元素R[1]同該區間的最后一個記錄交換,然后將新的無序區調整為新的堆。

因此對于堆排序,最重要的兩個操作就是構造初始堆和調整堆,其實構造初始堆事實上也是調整堆的過程,只不過構造初始堆是對所有的非葉節點都進行調整。

7.TCP三次握手:

(1)第一次握手:Client將標志位SYN置為1,隨機產生一個值seq=J,并將該數據包發送給Server,Client進入SYN_SENT狀態,等待Server確認。

(2)第二次握手:Server收到數據包后由標志位SYN=1知道Client請求建立連接,Server將標志位SYN和ACK都置為1,ack=J+1,隨機產生一個值seq=K,并將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。

(3)第三次握手:Client收到確認后,檢查ack是否為J+1,ACK是否為1,如果正確則將標志位ACK置為1,ack=K+1,并將該數據包發送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨后Client與Server之間可以開始傳輸數據了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容