Interview——IT 行业应试学知识库
一个人可以走的很快,但是一群人却可以走的更远。 ——那一抹微笑
- 在线阅读
- ApacheCN 中文翻译组 713436582
- ApacheCN 组织资源
- 注: 广告位合作(物美价廉),请联系 apachecn@163.com 【QQ/微信: 529815144】
学习建议
编程入门
具体的做法:
1、选择一个方向:产品、实施、测试、运维、编程、架构、算法、人工智能。
2、选择一门编程语言:Shell、JAVA、Python、C、C++、C#、PHP、GO
3、然后计算机基础:可以看看《计算机导论》和《计算机操作系统》,《计算机网络》《XXX编程语言教学指南》
4、然后开始着手你想要做的项目:Web前端? Web前端?自动化运维?数据分析?数据挖掘?
5、然后就开始去横冲直撞的找工作和选择Offer
说完这些干货后,我作为过来人想告诉你:
书还是别看了,网上去搜索《某某技术》的视频教程??
视频网站:百度搜索?网易云课堂?淘宝?慕课网?51CTO?哔哩哔哩?传智播客?
最后送你一句话:加油!! 路可远可近,但愿遇见都是好人一枚!
项目开发流程
1.理解实际问题,抽象为机器学习能处理的数学问题
理解实际业务场景问题是机器学习的第一步,机器学习中特征工程和模型训练都是非常费时的,深入理解要处理的问题,能避免走很多弯路。理解问题,包括明确可以获得的数据,机器学习的目标是分类、回归还是聚类。如果都不是的话,考虑将它们转变为机器学习问题。参考[机器学习分类](http://www.cnblogs.com/wxquare/p/5281753.html)能帮助从问题提炼出一个合适的机器学习方法。
2.获取数据
获取数据包括获取原始数据以及从原始数据中经过特征工程从原始数据中提取训练、测试数据。机器学习比赛中原始数据都是直接提供的,但是实际问题需要自己获得原始数据。“ 数据决定机器学习结果的上限,而算法只是尽可能的逼近这个上限”,可见数据在机器学习中的作用。总的来说数据要有具有“代表性”,对于分类问题,数据偏斜不能过于严重,不同类别的数据数量不要有数个数量级的差距。不仅如此还要对评估数据的量级,样本数量、特征数量,估算训练模型对内存的消耗。如果数据量太大可以考虑减少训练样本、降维或者使用分布式机器学习系统。
3.特征工程
特征工程是非常能体现一个机器学习者的功底的。特征工程包括从原始数据中特征构建、特征提取、特征选择,非常有讲究。深入理解实际业务场景下的问题,丰富的机器学习经验能帮助我们更好的处理特征工程。特征工程做的好能发挥原始数据的最大效力,往往能够使得算法的效果和性能得到显著的提升,有时能使简单的模型的效果比复杂的模型效果好。数据挖掘的大部分时间就花在特征工程上面,是机器学习非常基础而又必备的步骤。数据预处理、数据清洗、筛选显著特征、摒弃非显著特征等等都非常重要,建议深入学习。
4.模型训练、诊断、调优
现在有很多的机器学习算法的工具包,例如sklearn,使用非常方便,真正考验水平的根据对算法的理解调节参数,使模型达到最优。当然,能自己实现算法的是最牛的。模型诊断中至关重要的是判断过拟合、欠拟合,常见的方法是绘制学习曲线,交叉验证。通过增加训练的数据量、降低模型复杂度来降低过拟合的风险,提高特征的数量和质量、增加模型复杂来防止欠拟合。诊断后的模型需要进行进一步调优,调优后的新模型需要重新诊断,这是一个反复迭代不断逼近的过程,需要不断的尝试,进而达到最优的状态。
5.模型验证、误差分析
模型验证和误差分析也是机器学习中非常重要的一步,通过测试数据,验证模型的有效性,观察误差样本,分析误差产生的原因,往往能使得我们找到提升算法性能的突破点。误差分析主要是分析出误差来源与数据、特征、算法。
6.模型融合
一般来说实际中,成熟的机器算法也就那么些,提升算法的准确度主要方法是模型的前端(特征工程、清洗、预处理、采样)和后端的模型融合。在机器学习比赛中模型融合非常常见,基本都能使得效果有一定的提升。这篇[博客](http://www.cnblogs.com/wxquare/p/5440664.html)中提到了模型融合的方法,主要包括一人一票的统一融合,线性融合和堆融合。
7.上线运行
这一部分内容主要跟工程实现的相关性比较大。工程上是结果导向,模型在线上运行的效果直接决定模型的成败。 不单纯包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性是否可接受。这些工作流程主要是工程实践上总结出的一些经验。并不是每个项目都包含完整的一个流程。这里的部分只是一个指导性的说明,只有大家自己多实践,多积累项目经验,才会有自己更深刻的认识。
你可能会用到的计算机书籍
以下列表中的计算机书籍(中文版)来自微博:@程序员的那些事 粉丝的推荐。按推荐次数,从高到低往下排。
- 算法导论(第2版)
- 代码大全(第2版)
- C++ Primer中文版(第4版)
- 设计模式:可复用面向对象软件的基础
- 浪潮之巅
- Java编程思想(第4版)
- Java核心技术 卷1:基础知识
- Java核心技术 卷2:高级特性
- 人月神话
- Linux内核编程
- C程序设计语言(第2版新版)
- 黑客与画家:硅谷创业之父Paul Graham文集
- 编程之美:微软技术面试心得
- 代码之美
- 软件随想录:程序员部落酋长Joel谈软件
- 架构之美
- 国外计算机科学经典教材:Unix & Linux大学教程
- 深入理解计算机系统(原书第2版)
- UNIX网络编程 卷1:套接字联网API
- UNIX网络编程 卷2:进程间通信
- 自动机理论、语言和计算导论
- 软件架构的艺术
- Effective C++中文版
- Effective Java中文版(第2版)
- PHP & MySQL Web数据库应用开发指南(第2版)
- PHP经典实例(第2版)
- C++ 编程思想 第1卷
- C++ 编程思想 第2卷 两卷合订本
- Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理
- 数据库系统导论(原书第8版)
- Python参考手册(第4版)
- Python灰帽子
- 提高C++性能的编程技术
- 从网管员到CTO:网络设备配置与管理实战详解
- 深入理解计算机系统(修订版)
- UNIX编程艺术
- 深入理解Java虚拟机:JVM高级特性与最佳实践
- Microsoft.NET框架程序设计
- 代码整洁之道
- 编程珠玑(第2版)、编程珠玑(续)
- 大话设计模式
- C#开发宝典
- 深入理解Linux内核(第3版)
- UNIX环境高级编程 (第2版)
- WCF服务编程:.NET开发者决战SOA的制胜利剑(第3版)
- 现代编译原理:C语言描述 (虎书)
- 高级编译器设计与实现 (鲸书)
- 编译原理(第2版)(龙书)
- Windows核心编程 (第5版)
- C++标准程序库:自修教程与参考手册
- 设计原本:计算机科学巨匠Frederick P.Brooks的思考
- 软件框架设计的艺术
免责声明 - 【只供学习参考】
- ApacheCN 纯粹出于学习目的与个人兴趣整理
- ApacheCN 保留对此版本译文的署名权及其它相关权利