艾勇sjtu的blog 2019-07-01
今晚做完了网易互娱数据挖掘实习生的笔试题,虽然大部分的题目都不太记得了。但是还是有一些印象比较深的坑需要填一下。比起腾讯和字条跳动难度适中,不算很大,字节的笔试挂了。其实这次感觉自己做的也不是挺好哈哈哈。
上采样会把小众样本复制多份,一个点会在高维空间中反复出现,这会导致一个问题,那就是运气好就能分对很多点,否则分错很多点。为了解决这一问题,可以在每次生成新数据点时加入轻微的随机扰动,经验表明这种做法非常有效。
因为下采样会丢失信息,如何减少信息的损失呢?
第一种方法叫做EasyEnsemble,利用模型融合的方法(Ensemble):多次下采样(放回采样,这样产生的训练集才相互独立)产生多个不同的训练集,进而训练多个不同的分类器,通过组合多个分类器的结果得到最终的结果。
第二种方法叫做BalanceCascade,利用增量训练的思想(Boosting):先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。
第三种方法是利用KNN试图挑选那些最具代表性的大众样本,叫做NearMiss。
数据挖掘考的大题是编程题,同学数据分析考的是sql题。还好看了点往年的题型最近练习的侧重点是编程,虽然说sql语句以后也会考到,找个时间猛补吧。
1、排序题
题目描述不大记得了,主要是:给出一组数字,让你从这组数中找出最长的递增数列长度。
比如:
我的第一时间想法就是先去重排序(去重是因为相同的数字不算递增,所以重复的数字不影响),然后就得到了已经排序号的数列,但是这些数列是在原数列有排序的,所以只要判断去重排序中的元素在原数列中的索引是否递增就能找出答案。但是在实际通过样例只有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))
第二题稍微忘了题目了,等拿到真题再完整的更新一次吧。
把每一次笔试都当作查漏补缺,加油。