結合面經,收集到的各種信息如下:
算法
- 強行介紹了下正在參加的比賽。問了下lightgbm的參數。
- gbdt,xgb原理,區別,xgb做了哪些優化
GBDT的原理(基本思路):
梯度提升決策樹,是一種迭代的決策樹算法,通過構造多棵決策樹,並將決策樹的結果累加起來作爲最終的預測輸出。每一輪迭代中,構建的新的樹擬合的是損失函數在上一輪預測值的負梯度值。
XGBoost的原理(基本思路):
XGBoost是陳天奇設計的一套基於gbdt的可並行計算的機器學習工具,通過構造多棵決策樹,並將決策樹的結果累加起來作爲最終的預測輸出。在每一輪迭代中,都要最小化目標函數,最小化的過程中藉助目標函數的二階泰勒展開都得到關於樹葉子節點權重的最優值。
XGBoost相比GBDT做的優化點:
1)GBDT以傳統CART作爲基分類器,而XGBoost 支持線性分類器,相當於引入L1和L2正則化項的邏輯迴歸(分類問題)和線性迴歸(迴歸問題);
2)GBDT在優化時只用到一階導數,XGBoost對代價函數做了二階Talor展開,引入了一階導數和二階導數。XGBoost支持自定義的損失函數,只要是能滿足二階連續可導的函數均可以作爲損失函數;
3)XGBoost在損失函數中引入正則化項,用於控制模型的複雜度。正則化項包含全部葉子節點的個數,每個葉子節點輸出的score的L2模的平方和。從Bias-variance tradeoff角度考慮,正則項降低了模型的方差,防止模型過擬合,這也是xgboost優於傳統GBDT的一個特性。
4)當樣本存在缺失值時,xgBoosting能自動學習分裂方向,即XGBoost對樣本缺失值不敏感;
5)XGBoost借鑑RF的做法,支持列抽樣,這樣不僅能防止過擬合,還能降低計算,這也是xgboost異於傳統gbdt的一個特性。
6)XGBoost在每次迭代之後,會將葉子節點的權重乘上一個學習率(相當於XGBoost中的eta,論文中的Shrinkage),主要是爲了削弱每棵樹的影響,讓後面有更大的學習空間。實際應用中,一般把eta設置得小一點,然後迭代次數設置得大一點;
7)XGBoost 工具支持並行,但並行不是tree粒度的並行,XGBoost也是一次迭代完才能進行下一次迭代的(第t次迭代的代價函數裏包含了前面t-1次迭代的預測值),XGBoost的並行是在特徵粒度上的。XGBoost在訓練之前,預先對數據進行了排序,然後保存爲(block)結構,後面的迭代中重複地使用這個結構,大大減小計算量。這個塊結構也使得並行成爲了可能,在進行節點的分裂時,需要計算每個特徵的增益,最終選增益最大的那個特徵去做分裂,那麼各個特徵的增益計算就可以開多線程進行;
8)可並行的近似直方圖算法,樹結點在進行分裂時,需要計算每個節點的增益,若數據量較大,對所有節點的特徵進行排序,遍歷的得到最優分割點,這種貪心法異常耗時,這時引進近似直方圖算法,用於生成高效的分割點,即用分裂後的某種值減去分裂前的某種值,獲得增益,爲了限制樹的增長,引入閾值,當增益大於閾值時,進行分裂;
- XGBoost的原生語言爲C/C++,這是也是它訓練速度快的一個原因。
- RNN lstm原理
- CNN原理
- 神經網絡怎麼補全缺失值的,XGBoost怎麼補全缺失值的,和LGB的區別
XGBoost如何補全缺失值
稀疏感知: 會分別處理將missing該特徵值的樣本分配到左葉子結點和右葉子結點的兩種情形,計算增益後選擇增益大的方向進行分裂即可
LGB如何補全缺失值
類似 - XGB分類和迴歸的樹有什麼不同嗎,介紹一下兩者的決策樹
XGB用於分類的樹
XGB用於迴歸的樹
沒什麼不同,只是損失函數不同 - 小樣本學習麼
- deepfm嗎,知道fm嗎,我說是推薦算法
- NLP啊,知道怎麼處理詞向量嗎,知道WORD2vex嗎,知道怎麼分詞
- 如何防止過擬合,你都採用了哪些方法,還有哪些你沒有用到的方法;
- xgboost原理,怎麼防過擬合
XGB如何防止過擬合
GBDT正則化:
1 設定學習率,構建每一棵新樹時都不是完全擬合殘差
2 對弱學習器CART樹進行剪枝
3 子採樣,每棵樹選擇部分特徵和數組
4 正則化約束 - boosting和bagging在不同情況下的選用
- LSTM原理,與GRU區別
- EM算法推導,jensen不等式確定的下界
- xgboost和lightgbm的區別和適用場景
- LR的推導,損失函數
- gbdt推導和適用場景
GBDT適用場景:所有迴歸問題,設定閾值的二分類問題。 - DNN的梯度更新方式
21.LSTM結構
爲什麼能解決梯度問題
BN是解決梯度消失問題的
梯度消失梯度爆炸分別有哪些方法
例如:殘差連接、梯度截斷
簡單RNN的反向傳播(bptt)
10個step的RNN反向求導有多少梯度(10個)
SoftMax + CrossEntropy的反向梯度求導
FM GBDT XGBoost 能否並行?
特徵選擇能否並行?
機器學習算法中 GBDT 和 XGBOOST 的區別有哪些?
過擬合怎麼處理,處理特徵(L1L2)形象的表示一下L1L2,如果lamd變大,L1的正方形變大還是變小
https://blog.csdn.net/red_stone1/article/details/80755144
- dropout
- batch normalization
- L1正則和L2正則
BN的原理你知道嗎,講一下,樓主blablabla。。。。。
-
BN爲啥可以緩解過擬合,詳細講一下
-
BN有哪些需要學習的參數啊,BN訓練和測試是怎麼做的?
-
除了BN,你還知道那些其他的加速收斂的方法(樓主說到了歸一化),面試官說,和BN差不多的那些你瞭解嗎?(GN, IN, FN)
-
BN一般用在網絡的哪個部分啊?
-
激活函數了解哪些啊?說一下,樓主說了sigmoid,tanh,ReLU, leaky ReLU, PReLU, ELU,random ReLU等
-
ReLU有哪些缺點啊,怎麼解決的?其他的解決方法你知道嗎?
CODING
1 可以解決
- 二叉樹非遞歸前序遍歷,寫完讓說了以下思路
思路:使用棧即可 - 合併兩個排序鏈表並刪除重複值
思路:指針 - 字符串最長不重複子串(leetcode48)
思路:滑動窗口 - 給定整數n,求離根號n最近的整數
思路:二分法 - 構建樹的類,樹遞歸遍歷,樹非遞歸遍歷
- 算法:從右邊看被遮擋的二叉樹,求露出的node(Leetcode 199 二叉樹的右視圖)
思路:類似“之字形遍歷二叉樹”,保留每一層最右邊的節點,可以使用棧存儲(節點、深度)對。 - 無重複的全排列
思路:回溯法 - 有重複的全排列
思路:去重即可 - 最大子序和
思路:動態規劃 - 數組中最長字符串組合(劍指offer 把數組排成最小的數的某種變形)
面試者:這個沒有寫,說出了改寫Arrays comparator接口排序和hashMap查找。
我的思路:比較規則爲字符串a+b和b+a的大小比較,冒泡排序。 - 滿二叉樹第i層有多少個節點,n層的滿二叉樹共有多少個節點
存疑,完全滿二叉樹若有h層,其節點數爲
滿二叉樹第i層的節點個數可以用代碼算出來
共有多少個節點也可以用遍歷程序算出來
完全二叉樹的節點個數(leetcode222)
此題利用完全二叉樹的性質,倒數前兩層可能不填滿,但前面的層一定都是滿的。
如果左子節點層數==右子節點層數,往右邊找;
如果左子節點層數!=右子節點層數,往左邊找; - 反轉鏈表
思路:prev指針指向空節點,cur指針指向當前節點,next指針指向cur.next;循環做 - 堆排序
思路:完全二叉樹,(大頂堆)父節點值>子節點值。
三個函數:heapify(子結構堆化), build_heap(構建堆), 堆排序 - 剪繩子(劍指offer)
思路:貪心法(繩子段數儘量分成長度爲3的,剩下長度爲4的話分成兩個2);動態規劃法(分解考慮) - 移動0(leetcode283)
思路:快排取軸思想,計數思想 - 2sum (leetcode 1)
思路:哈希表 - 快速排序
思路:選擇軸值,排序 - 翻轉二叉樹
思路:遞歸和迭代兩種方式。迭代,使用棧 - 合併兩個有序鏈表?
思路:兩個指針分別指向兩個鏈表,再需要一個輔助指針 - 如果鏈表是無序的怎麼合併成一個有序鏈表?
思路:將單個無序鏈表轉爲單個有序鏈表,再進行合併。 - 接雨水(leetcode 42)
思路:按列求,找左邊最高的和右邊最高的中最矮的,計算。 - 3sum (leetcode 15)
思路:數組排序,固定三個數中最左邊的值,其後面設定頭尾指針,往中間走求和遍歷。注意去重。 - 嵌套數組,展開成一維
思路:判斷每一個元素是不是數組,若是則遞歸;不是,將元素append到結果數組中。
2 需要再看
- 給定一個二叉樹和一個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑(leetcode113)
- 假設按照升序排序的數組在預先未知的某個點上進行了旋轉。
( 例如,數組 [0,1,2,4,5,6,7] 可能變爲 [4,5,6,7,0,1,2] )。
請找出其中最小的元素。
你可以假設數組中不存在重複元素。(leetcode 153) - 找到單鏈表的三等分點,如果單鏈表是有環的呢
思路:用快慢指針,一個走一步,一個走三步。如果有環,先判斷環在哪,找最後一個節點,然後用之前的無環的做法。 - 翻轉中間由各種符號隔開的字符串(劍指offer,翻轉單詞順序列)
3 完全不會
- 給一個字符串能分出哪些IPV4的格式
不太確定對應到哪個題:
https://www.cnblogs.com/insus/archive/2013/06/27/3158345.html
https://blog.csdn.net/yangkunhenry/article/details/81222279 - 求一個字符串的順序子串的個數
工程
- Java collection基類有哪些接口及其實現類
- Java線程六中狀態中的幾個轉換函數
- TCP三次握手
- HashMap 是線程安全的嗎?爲什麼?
- 從10萬個數中找最小的10個,時間複雜度分析(最大堆,考慮內存) 。
- 兩個文件,每個文件中都有若干個url,找出兩個文件中相同的url
-
- hashmap和python列表查詢插入複雜度
項目
- 十個商品,4億個用戶(聽到4億心裏內心慌的要命),每個用戶獲取三個商品。怎麼保證每個商品取到的概率一樣,並且同一個用戶在第二次獲取的時候跟第一次的結果一樣。
內心慌,穩住!概率一樣,那就是隨機,那保證每次取的一樣,種子數,給自己鼓掌… 面試官直接來一句種子數能保證每次取的結果一樣,我記得是這樣的啊!!然後問我種子數的底層,我亂扯一通。面試官讓我再想想,後面就亂說,扯到了哈夫曼樹思想壓縮空間存4億用戶,扯到了用b+樹來存,想不出來了。場景題over - 主要手推了SVM,GBDT公式,問的很細,得對公式非常熟悉
- 項目,抓住一兩個點問的比較深
- 如何來判斷一個骰子是否是均勻的
雜
- 喜歡看書嗎?
- 概率題,抽藍球紅球,藍結束紅放回繼續,平均結束遊戲抽取次數
- 個人愛好
自己突出的優點和缺點(這是個送命題感覺如果答了性格的缺點直接GG,我的回答可以參考一下,缺點說的是
自己雖然功能都能很好完成但在抽象思維以及更高層次看待問題還需要進一步提升,改進是在做任務前從全局的角度思考,工作中積累經驗,努力進步 - 學習方式和途徑
- 你有什麼問題問我的嗎?(公司吸引您的有哪些地方)
一面面試題
- 項目
- 問了項目中的模型集成
- 簡單解釋LR(組織語言)
- 如何評判一個機器學習模型是好還是不好
- 評估指標有哪些
- 什麼是AUC
- 編程:輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S。返回滿足條件的所有下標組成的列表。
7-1. 如果數組中存在重複元素呢?應該如何解決?
思路:可以在指針那裏控制重複。 - 分發糖果(leetcode 135)
思路:從前往後遍歷一次,從後往前再遍歷一次。