Chapter 1 概述

本文档的发布依赖于bookdown包, 对作者表示感谢!

文档所写R代码的依据算法来源于统计学习方法(李航著), 对作者表示感谢!

文档章节内容具体包括:

  • 第二章: 2 感知机
  • 第三章: 3 k近邻法
  • 第四章: 4 朴素贝叶斯
  • 第五章: 5 决策树
  • 第六章: 6 逻辑斯谛回归与最大熵模型
  • 第七章: 7 支持向量机
  • 第八章: 8 提升方法
  • 第九章: 9 EM算法
  • 第十章: 10 隐马尔可夫模型
  • 第十一章: 11 条件随机场

下面做几点说明:

    1. 推荐可以先看看最优化理论与算法一书(课后习题挑着做), 再看统计学习方法一书.
    1. 文档第九章和第十章尝试用了R的S4类来实现, 因为当时在学习S4类, 看的教材是statistical computing in C plus plus & R, 就看了chapter 5 和 chapter 6, 这两章其实主要是讲了R的methods包一些用于创建和实现S4类模型的函数的用法. 最近发现RC类更友好.
    1. 写R代码还是得严谨一些, 这门动态而又无须事先定义类型的脚本语言, 难免给人比较随意的感觉. 1 与 as.integer(1) 是不一样的(类型不一致, 可能会导致匹配出问题), 我在写第十一章的时候, 就遇到这问题, 见这里, 在stackoverflow提问后才发现问题所在.
    1. 文档第六章和第十一章尝试用Rcpp进行了改写, 在线参考教程见这里, 还有一本Rcpp包的开发者(Dirk Eddelbuettel)写的教程Seamless R and C++ Integration with Rcpp, 但网络上没有中文版.
    1. 如果考虑用R写原型, 然后改写为Rcpp版本来加速代码运算, 在输入方面, 能用矩阵的尽量使用矩阵, 建议不要用数据框(DataFrame), Rcpp中虽有DataFrame 类, 但对DataFrame的操作在灵活性方面不及操作matrix, 比如, 你要取某个DF / matx位于第2行第2列的元素, 如果使用matrix, 直接matx(1, 1)即可(cpp的索引从0开始), 但如果使用DataFrame, 你得先取出第2列, 然后转为向量, 再取第2个元素, 比较麻烦. 最重要的是, 有RcppArmadillo库!!! 这是一个从Cpp的Armadillo库移植过来的矩阵代数运算库, 这是网上教程, 见这里.
    1. R函数与Rcpp函数的嵌套调用问题. 比如说, 针对R函数A_r()改写了一个cpp函数A_cpp(), 然后写了另一个R函数B_r(), 并在B_r() 内部调用A_cpp(), 但这样做其实与在R函数内部调用R函数没多大差异, 也就是说A_cpp()的性能没有体现出来! 可修正的做法是把R函数B_r()也改写为cpp函数B_cpp(), 然后在B_cpp()内部调用A_cpp().
    1. 其实上文提到了, R的索引是从1开始的, 而Cpp的索引是从0开始的! 当你对一个R函数改写为cpp函数时, 要时刻谨记这一点!
    1. 本文档只是一个尝试, 写的R代码肯定有需要提升和改进的地方.
sessionInfo()
## R version 3.4.1 (2017-06-30)
## Platform: i386-w64-mingw32/i386 (32-bit)
## Running under: Windows 7 (build 7601) Service Pack 1
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_People's Republic of China.936 
## [2] LC_CTYPE=Chinese (Simplified)_People's Republic of China.936   
## [3] LC_MONETARY=Chinese (Simplified)_People's Republic of China.936
## [4] LC_NUMERIC=C                                                   
## [5] LC_TIME=Chinese (Simplified)_People's Republic of China.936    
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] Rcpp_0.12.16    bookdown_0.7.1  png_0.1-7       digest_0.6.15  
##  [5] rprojroot_1.3-2 backports_1.1.0 magrittr_1.5    evaluate_0.10.1
##  [9] stringi_1.1.7   rstudioapi_0.7  rmarkdown_1.9   tools_3.4.1    
## [13] stringr_1.3.0   xfun_0.1        yaml_2.1.18     compiler_3.4.1 
## [17] htmltools_0.3.6 knitr_1.20