人工智能开篇-普通程序员如何向人工智能靠拢?

1、普通程序员如何向人工智能靠拢?知乎原文

原文

谢邀,我曾经也只是一个只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后才开始系统地了解机器学习相关的知识,如今已经基本走上了正轨,开始了走向 Data Scientist 的征途。但是最高赞的一篇回答居然是关于 Deep Learning 的,这感觉就想是有人问我这山地车好高级,能不能教我怎么换挡,我告诉他说,这车太low了,我教你开飞机吧。我想即使目前开飞机(Deep Learning)的门槛一再降低,如果你没有一个优秀的基础,即使是老司机也是容易翻车的。

所以我给 @子实的回答点了赞:普通程序员如何向人工智能靠拢? - 子实的回答 - 知乎简单认真回答一下,首先作为一个普通程序员,C++ / Java / Python 这样的语言技能栈应该是必不可少的,其中 Python 需要重点关注爬虫、数值计算、数据可视化方面的应用,主要是:可以参考:可以参考:怎么用最短时间高效而踏实地学习 Python?

如果日常只编写增删改查的代码的话,那可能数学已经忘得差不多了,需要重温线性代数和微积分的基础知识,这会为之后的学习立下汗马功劳。再然后就是统计学相关基础,我在知乎专栏——BI学习大纲中写过,贴过来仅供参考:

相关性分析(相关系数r、皮尔逊相关系数、余弦相似度、互信息)

  • 回归分析(线性回归、L1/L2正则、PCA/LDA降维)
  • 聚类分析(K-Means)
  • 分布(正态分布、t分布、密度函数)
  • 指标(协方差、ROC曲线、AUC、变异系数、F1-Score)
  • 显著性检验(t检验、z检验、卡方检验)
  • A/B测试

推荐阅读:李航 —《统计学习方法》

如果以上知识都具备了,再往后的路就可以开得很快了,可以一直冲刺到 Deep Learning。但在这之前我们还是需要了解不少机器学习的基础:

  • 关联规则(Apriori、FP-Growth)
  • 回归(Linear Regression、Logistics Regression)
  • 决策树(ID3、C4.5、CART、GBDT、RandomForest)
  • SVM(各种核函数)
  • 推荐(User-CF、Item-CF)

推荐阅读:《集体智慧编程》、Andrew Ng — Machine Learning Coursera from Stanford

此时的你或许已经有一块可以用的敲门砖了,但离工业界实际应用还有比较大的距离,主要差距就在于 Feature Engineering,这也是我在面试考察有经验的人面前比较注重的点。这一块中有一些比较基础的知识点,简单罗列如下:

  • 可用性评估:获取难度、覆盖率、准确率
  • 特征清洗:清洗异常样本
  • 采样:数据不均衡、样本权重
  • 单个特征:无量纲化(标准化、归一化)、二值化、离散化、缺失值(均值)、哑编码(一个定性特征扩展为N个定量特征)
  • 数据变换:log、指数、Box-Cox
  • 降维:主成分分析PCA、线性判别分析LDA、SVD分解
  • 特征选择:Filter(相关系数、卡方检验)、Wrapper(AUC、设计评价函数A*、Embedded(L1-Lasso、L2-Ridge、决策树、DL)
  • 衍生变量:组合特征
  • 特征监控:监控重要特征,fa特征质量下降

我放一张公司内部算法培训关于特征工程的 PPT,仅供学习参考:

再往后你就可以在技能树上点几个酷炫的了:

  • 提升
    • Adaboost
    • 加法模型
    • xgboost
  • SVM
    • 软间隔
    • 损失函数
    • 核函数
    • SMO算法
    • libSVM
  • 聚类
    • K-Means
    • 并查集
    • K-Medoids
    • 聚谱类SC
  • EM算法
    • Jensen不等式
    • 混合高斯分布
    • pLSA
  • 主题模型
    • 共轭先验分布
    • 贝叶斯
    • 停止词和高频词
    • TF-IDF
  • 词向量
    • word2vec
    • n-gram
  • HMM
    • 前向/后向算法
    • Baum-Welch
    • Viterbi
    • 中文分词
  • 数据计算平台
    • Spark
    • CaffeTe
    • nsorflow

推荐阅读:周志华——《机器学习》

可以看到,不管你是用 TensorFlow 还是用 Caffe 还是用 MXNET 等等一系列平台来做高大上的 Deep Learning,在我看来都是次要的。想要在这个行业长久地活下去,内功的修炼要比外功重要得多,不然会活得很累,也很难获得一个优秀的晋升空间。

最后,关注你所在行业的最新 paper,对最近的算法理论体系发展有一个大致印象,譬如计算广告领域的几大经典问题:

相关 paper 的 gitlist 仅供参考:wnzhang/rtb-papers

最最后,也要时刻关注能帮你偷懒的工具,它将让你拥有更多的时间去调参:

Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - Python - 伯乐在线

------------------------------------------------------------------------------------------------------------------------------------------------------------

广告时间:如果你对以上学习路径有什么困惑,或者你对以下问题感兴趣:* 怎么定义一个算法工程师?它与其它传统研发岗位的区别是什么?

* 算法工程师所需的内功和外功是什么?

* 算法工程师拥有怎样的不可替代性及成长性?

* 如何才能最快速度成长为一名合格的算法工程师?

* 如何才能通过国内大厂的算法岗面试?

欢迎来我的知乎 Live  (????)??

SimonS 的知乎 Live - 如何成为当下合格的算法工程师

SimonS 的知乎 Live - 如何快速攻克传统算法和数据结构

SimonS 的知乎 Live - 机器学习入门需要哪些数学基础

时间: 2024-10-27 02:54:43

人工智能开篇-普通程序员如何向人工智能靠拢?的相关文章

《死磕 Elasticsearch 方法论》:普通程序员高效精进的 10 大狠招!(完整版)

原文:<死磕 Elasticsearch 方法论>:普通程序员高效精进的 10 大狠招!(完整版) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/wojiushiwo987/article/details/79293493 人工智能.大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需.Elasticsearch 作为开源领域的后起之秀,从2010年至今得到飞跃

普通程序员的基本功

作一名真正合格的程序员,或者说真正合格完成一些代码工作的程序员,应该具有下列基本素质: 一.团队精神和协作能力  把此作为基本素质,并不是不重要,恰恰相反,这是程序员应该具备的最基本的,也是最重要的安身立命之本.把高水平程序员说成独行侠的都是在呓语,任何个人的力量都是有限的.即便如linus这样的天才,也需要通过组织强大的团队来创造奇迹,那些遍布全球的为linux写核心的高手们,没有协作精神是不可想象的.独行侠可以作一些赚钱的小软件发点小财,但是一旦进入大系统的研发团队,进入商业化和产品化的开发

如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数.如

CTO 比普通程序员强在哪?

互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己变得更优秀更有竞争力,一定是一线城市的大部分 IT 人内心的追求. 诚然,并不是所有程序员都会变成 CTO,程序员——>CTO 的路径像是一个漏斗,极少数人沉淀下来,在业界掀起一阵阵飓风.这些 CTO 比起普通的程序员,强在哪?丰富的技术知识只是基础,更重要的是战略眼光,管理把控能力.那么 CTO

你是普通程序员、文艺程序员还是2B程序员?

求2的32次方 普通程序员 Java code ? 1System.out.println(Math.pow(2, 32)); 文艺程序员 Java code ? 1System.out.println(1L<<32); 2B程序员 Java code ? 1System.out.println(2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2*2); 交换两个数 普通程序员 Java code ? 1 2 3 4 5 6

高级程序员和普通程序员在代码写法上的差别

普通程序员和高级程序员的区别是:普通程序员用复杂的代码解决简单的问题:而高级程序员能把复杂的问题简单化并用简洁的代码去实现.下面就列举一些普通程序员和高级程序员的一些常见的代码写法的区别:1.声明变量的习惯用法普通程序员: String str = ""; String src = ""; int count = 0; int total = 0; 高级程序员: String str = org.apache.commons.lang3.StringUtils.EM

首席技术官 (CTO) 比普通程序员强在哪

互联网的蓬勃发展,让无数的程序员身价水涨船高,都变成了「香饽饽」,更有了不少「创业」,「当上 CTO,迎娶白富美的传说」.都说不想当元帅的士兵不是好士兵,我觉得这件事见仁见智,但提升自己的价值,让自己变得更优秀更有竞争力,一定是一线城市的大部分 IT 人内心的追求. 诚然,并不是所有程序员都会变成 CTO,程序员——>CTO 的路径像是一个漏斗,极少数人沉淀下来,在业界掀起一阵阵飓风.这些 CTO 比起普通的程序员,强在哪?丰富的技术知识只是基础,更重要的是战略眼光,管理把控能力.那么 CTO

豆瓣app严重bug修复 给一个普通程序员带来的启发!

整个事情让人觉得不可思议! 之前写过一个帖子<牛逼哄哄的豆瓣公司的程序员!佩服!>地址 http://blog.csdn.net/default7/article/details/38597687,里面提到了豆瓣FM ios版本的一个严重级别的bug,锁屏就无法播放!豆瓣fm 肯定是锁屏可以播放的,但是8月12日更新的app会导致锁屏无法播放. 这个问题一直到8月21日才修复更新!(我相信之间有无数的人在反馈这个bug,看我在CSDN博客上的另外那一篇帖子里面的截图就知道!) 豆瓣FM修复严重

普通程序员,三年成为年薪70w架构师,只因做到了这些

每个程序员.或者说每个工作者都应该有自己的职业规划,如果你不是富二代,不是官二代,也没有职业规划,希望你可以思考一下自己的将来.今天给大家分享的是一篇来自阿里Java架构师对普通程序员的职业建议,希望对你有启发. 程序员的三个阶段 第一阶段---三年 我认为三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适合写代码的人.这一阶段,我们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发.我们知道如何团队协作.如何使用项目管理工具.项目版本如何控制.我们写的代码如何测