今晚作完了網易互娛數據挖掘實習生的筆試題,雖然大部分的題目都不太記得了。可是仍是有一些印象比較深的坑須要填一下。比起騰訊和字條跳動難度適中,不算很大,字節的筆試掛了。其實此次感受本身作的也不是挺好哈哈哈。算法
筆試分爲三部分:20道單選題 + 10道不定項選擇 + 2道編程題
1. one-vs-rest
題目是讓選擇對用one-vs-rest思想進行n分類,須要幾個分類器。
一開始還不知道原來one-vs-rest就是one-vs-all,可是後來排除了就剩下n個分類器這個答案了。
one-vs-all(one-vs-rest):利用n個二分類器完成n分類的任務。
2.sigmoid、TaNh、ReLU
題目是選擇哪一個函數有多是輸出爲-0.01的神經網絡的激勵函數。
其實題目很簡單利用函數的值域就能解出來,可是利用這個機會去理一理這三個函數的區別吧。
神經網絡中的激活函數
三、bootstrap原理
題目是選擇boostrap的原理。主要是要學會區別與其餘集成學習算法的原理。
bootstrap: 集成學習中的一個算法,是一種估計統計量的重採樣方法,從大小爲n的原始訓練數據集D中隨機選擇n個樣本點組成一個新的訓練集,這個選擇過程獨立重複B次,而後用這B個數據集對模型統計量進行估計(如均值、方差等)。因爲原始數據集的大小就是n,因此這B個新的訓練集中不可避免的會存在重複的樣本。
四、正負樣本不均衡的解決辦法
題目是用採樣方法去緩解正負樣本不均衡的解決辦法。
採樣分爲 上採樣(Oversampling)和 下采樣(Undersampling)。
上採樣是把小衆類複製多份;下采樣是從大衆類中剔除一些樣本,或者說只從大衆類中選取部分樣本。
上採樣會把小衆樣本複製多份,一個點會在高維空間中反覆出現,這會致使一個問題,那就是運氣好就能分對不少點,不然分錯不少點。爲了解決這一問題,能夠在每次生成新數據點時加入輕微的隨機擾動,經驗代表這種作法很是有效。
由於下采樣會丟失信息,如何減小信息的損失呢?
第一種方法叫作EasyEnsemble,利用模型融合的方法(Ensemble):屢次下采樣(放回採樣,這樣產生的訓練集才相互獨立)產生多個不一樣的訓練集,進而訓練多個不一樣的分類器,經過組合多個分類器的結果獲得最終的結果。
第二種方法叫作BalanceCascade,利用增量訓練的思想(Boosting):先經過一次下采樣產生訓練集,訓練一個分類器,對於那些分類正確的大衆樣本不放回,而後對這個更小的大衆樣本下采樣產生訓練集,訓練第二個分類器,以此類推,最終組合全部分類器的結果獲得最終結果。
第三種方法是利用KNN試圖挑選那些最具表明性的大衆樣本,叫作NearMiss。sql
五、至於剩下的題目也不太記得了,主要是一些關於p值還有零假設檢驗的合理性。看來仍是須要補一補統計學的知識。
數據挖掘考的大題是編程題,同窗數據分析考的是sql題。還好看了點往年的題型最近練習的側重點是編程,雖說sql語句之後也會考到,找個時間猛補吧。編程
一、排序題
題目描述不大記得了,主要是:給出一組數字,讓你從這組數中找出最長的遞增數列長度。
好比:bootstrap
輸入:
10, 9, 2, 5, 3, 6, 7, 4, 9, 8, 101, 18
輸出:
6
提示:
一、該遞增數列是 2, 3, 6, 7, 9, 101
二、該遞增數列在原數列中不必定是連續的。
個人第一時間想法就是先去重排序(去重是由於相同的數字不算遞增,因此重複的數字不影響),而後就獲得了已經排序號的數列,可是這些數列是在原數列有排序的,因此只要判斷去重排序中的元素在原數列中的索引是否遞增就能找出答案。可是在實際經過樣例只有83.3%,搞不懂是否是漏了一些條件,明天去班裏問問ACM大神吧。網絡
data = [10, 9, 2, 5, 3, 6, 7, 4, 9, 8, 101, 18] sortData = sorted(list(set(data))) count = 0 for i in range(1, len(sortData)): if data.index(sortData[i]) > data.index(sortData[i-1]): count += 1 print(count)
上課的時候問了一下學過算法的同窗,說我寫的代碼不對,只是湊巧達到了一些案例的標準。
這題用的方法是靜態規劃,目的是用dp[n]:以第n個數字結尾的上升序列的長度。函數
data = [10, 9, 2, 5, 3, 6, 7, 4, 9, 8, 101, 18] dp = [1 for i in data] for i in range(1,len(data)): for j in range(i): if data[i] > data[j]: dp[i] = max(dp[i], dp[j]+1) dp[i] = max(dp[i], 1) print(max(dp))
第二題稍微忘了題目了,等拿到真題再完整的更新一次吧。
把每一次筆試都看成查漏補缺,加油。學習