先要能运行,然后结果对,最后要加快。
- 这个是最初的课程页面 STA 633: 2015年春季的计算机统计与计算课程(Statistical computing and computation)
- 每周的课程安排是 两次常规课程(每次 75 分钟),一次实验课程(也是75分钟)
- 本门课程是统计计算方向的第二门课程,之前的课程是 Colin Rundel 讲授的
- STA 523(一门以 R 为主的统计学课程)
- 快速简介的参考书包括
- Advanced R - Wickham
- R Packages - Wickham
- 内容涉及
Unix shell
,make
,git
,markdown
以及用 R 语言编程 - 如果选本门课程的同学没有学过 STA523,就需要参加一个课前考试来看一下能否达到本课程的要求
- 讲授一些基本计算内容,这些内容也是我们对团队内博士生或者博士后所要求的
- 要能适应高级编程语言(Python/Julia?/R) 和一些相比低级的编程语言 (C/C++)
- 理解数据管理,并且能够使用关系型数据库
- 能处理不好的数据
- 举些例子?
- 从一个表格来构建一个规范的数据库,并且通过 SQL 来查询
- 能处理不好的数据
- 能够构建可重现数据分析管道(测试testing + 构建make + 文学编程literate programming)
- 能把(论文或者教科书中的) 统计模型转换成数值算法
- 理解一些基本算法,比如优化、模拟、光滑(optimization, simulation and smoothing) * 为统计学算法的各种大规模的类来创建模块 * 学生们都应该了解哪些算法?
- 在实践中使用已经成型的数值范式 * 推荐使用 C/C++ 相关的库
- 能写出正确的代码
- 需要多少测试,以及那种测试更合适?
- 如何使用随机元素来测试代码?
- 能写出运行速度快的代码
- 在运算速度和开发速度之间找到平衡(避免过早优化)
- 对算法和数据结构的复杂平衡有一定了解
- 评分和分析
- JIT (Just in Time)即时编译
- 编写原生代码
- 利用多核心运行 (线程threading, 多任务处理multiprocessing, OpenMP)
- 利用多台机器运行 (MPI)
- 利用 GPU 运算(CUDA 或者 OpenCL)
- 处理超大规模的真正大数据(MapReduce)
Unit 1: 可重现的数据分析,以及简介用 Python 作胶水语言(10%) Unit 2: 处理数据以及关系型数据库 (10%) Unit 3: 数据分析和可视化 (10%) Unit 4: 核心的统计算法和库 (40%) Unit 5: C 训练,代码分析以及编写原生代码 (15%) Unit 6: 并行计算和大数据处理 (15%)
- 课程的整体目标?
- 课程的主要内容?
- 有没有什么重要的类和话题被跳过了?
- 每一章的主题中,学生们都应该学到哪些内容?
- Unit 1: 可重现的数据分析,以及简介用 Python 作胶水语言 (10%)
- Unit 2: 处理数据以及关系型数据库 (10%)
- Unit 3: 数据分析和可视化 (10%)
- Unit 4: 核心的统计算法和库 (40%)
- Unit 5: C 训练,代码分析以及编写原生代码 (15%)
- Unit 6: 并行计算和大数据处理 (15%)
- 怎么来更有效率地教编程?
- 我所知道的所有的优秀开发者都是自学的 ...
- MCQs (选择题?),用于对每周内容不同理解程度的快速检查
- 少说多做- 每一单元后面都有一个小的项目
- 单打独斗还是团队合作?
- 统计算法的学生应该了解哪些内容?
- 掌握基础理论,并且知道如何合理应用到实例中
- 通过玩具样例来以教促学
- 使用各种已有的库来解决更具体的问题
- 样例
- 线性代数,例如投影和正规方程(projection, normal equations)
- 优化, 例如牛顿法,IRLS 法, 多元梯度下降法, EM法等
- 模拟,Simulation - 重采样方法,蒙特卡罗方法,MCMC算法(马尔可夫链蒙特卡罗(Markov Chain Monte Carlo))
- 其他内容?光滑,插值等等
- 掌握基础理论,并且知道如何合理应用到实例中
- 什么事好的数据结构,那些问题适合用来教学?
- 不良数据
- 大规模数据
- 运算速度慢和快的不同版本程序