首页 > 面试时关于实现机器学习算法的困惑?

面试时关于实现机器学习算法的困惑?

现在大三,最近再找数据分析相关实习时,每个面试官都会问我有没有实现过机器学习算法。然后我回答我看《机器学习实战》,《机器学习实践指南》里的Python代码,把算法敲出来,运行了。

但是感觉很多面试官不太满意这个回答。困惑是实现的语言问题还是上述不算自己实现。

还有有没有必要看scikit-learn或者caret的源码呢?

多谢回答


不算自己实现
不是看源码的问题,是自己有否做过一些相关工作解决一个不是书本上的问题

吐槽一下:照着书敲代码谁不会啊,难道照着书敲个神经网络算法的代码就说自己会写神经网络算法么?


简单的说, 你敲过 C++Primer 的代码也不算你熟悉 C++吧, 面试官更想听你自己的实践, 比如参加 Kaggle 竞赛.

对于机器学习来说, 敲代码并没有什么用, 因为那些算法都在 python 中有相关包可以直接实现. 重要的是你为啥用 xx 算法而不是 oo 算法, 还有具体排错的过程. 比如发现某个分类器训练错误远小于测试错误,增加训练数据集可以减少测试错误率, 那可能就是模型的 variance太高(overfitting), 如果增加训练数据集没什么用, 那就是 bias 太高(underfitting).

同一个算法, 不同人实现出来效果完全不一样, 这就是经验的差距, 当年Geoff Hinton的两个博士生用卷积神经网络在竞赛上击败了当时 Google 有着 Andrew Ng + Jeff Dean这样的黄金队伍震惊工业界, 要知道后者也用的是深度神经网络, 然后差距却很大, 据说连卷积网络的发明人 Yann lecun 自己也没重现出那两个博士生的效果.

还有最重要的是数学推导, 起码徒手撸一个SVM 和 EM 的简单推导吧? 这样可以理解各种算法的联系, 比如 A算法 的数学表达说明其实 A 就是 B 的一个特例, 比如高斯判别就是逻辑斯谛个一个特例.

然后数据分析现在训练集都很大, 又要求还有分布式的知识, 至少会用MapReduce改写现有算法,而且现在流行的神经网络更是需要很好的并行算法实现能力甚至 GPU 编程.

是的, 这些内容对于大三一般来说比较吃力, 所以一般机器学习方向的不爱招本科生.

源代码我觉得没必要看, 重要的是某个包后面的算法以及使用, python 包的具体代码实现肯定还用了 C 来实现, 没有一定的功力短时间很难看懂.

然后更重要的是: 工业界的数据分析大部分都是在清理数据, 熟练掌握类似于 SQL 或者 Hadoop Hive,Pig 之类的工具非常重要. 具体实现的算法都有现有 API 和代码, 重要的是学会怎么选择算法,特征, 调整参数, 敲敲书上的well-formed 问题没什么卵用....


对于面试官问这个问题,我有以下观点,他问你是否实现过,其实就是确认,第一,你是否自己真正的理解了一些机器学习的核心点,如KNN,SVM等,第二,就是确认你不是为了面试,而专门临时抱佛脚,背了一些。对于是否有必要看源码,如果真的喜欢,那就这样做吧,但是切记,现在机器学习发展十分迅速,你要做到的是理解多个经典算法的思想,在特定的场景下,提出一些特定的约束,改一些可以优化的地方,解决实际的问题,这才是关键,但是如果你觉得拥有阿瑟·塞缪尔这样的超前眼光,那就创造发明吧。


你数学基础好么?建议你先系统的了解一下,边上班边学习

【热门文章】
【热门文章】