因为要准备面试所以需要重新复习一遍以前学过的关于数据挖掘(data mining) 和机器学习 (machine learning)的内容,顺便都写成博客。文中会有中英文混用,因为自己的翻译能力实在不咋地,希望不会对各位的阅读造成太大的影响。
代码语言:python 3.5.1
目前先只用python写一遍,其中会包括不借助python现成库写算法,有助于学习理解和优化,然后会有用python现成库写,可以对比两者的运行时间。语法用python 3+的。之后可能会添加C++版的代码。
编程工具: sublime text 2+Python
代码文本由sublime text 2完成。讲真,sublime text真的好用,写博客我现在也是在sublime上写,安装了markdown插件和高亮插件。而且还是免费的软件(不过我觉得如果有一定收入的朋友还是donate支持一下吧。)
预计完成时间: 2016年9月2日
目前计划中这部分内容希望能在9月2日之前完成,因为接下来还得写分布式计算 (distributed computing) 和并行式计算 (pararelll computing)。应该普通的话题可以很快写完,至于高级话题,看情况而论吧,哈哈哈哈。
笔者的能力有限,尽量解释清楚这些基础的算法,如有纰漏,请多多指正
源代码:Github代码(未完成)
1 数据挖掘和机器学习的定义
很多朋友其实搞不太清数据挖掘(data mining)和机器学习的(machine learning)的差别。根据Jure Leskovec, Anand Rajaraman, Jeffrey D. Ullman在著作《Mining
of Massive Datasets》中认为,数据挖掘(data mining)就是发现数据的模型的过程(discovery of model for data),而其中的模型可以有很多种,可以是统计模型(Statistical Modeling),也可以有机器学习方法找到模型。很多人会把数据挖掘和机器学习等同,但其实机器学习在实践中主要是通过一些training data去train一些算法。
下文比较详细地对比定义的差别:
数据挖掘(data mining),机器学习(machine learning),统计学(statistics),和人工智能(AI)的区别是什么?
2 数据的表达形式-矩阵 (Matrix)
3 数据挖掘和机器学习的数学基础-概率 (probability)和线性代数 (linear algebra)
- 线性代数 (linear algebra)
- 概率统计 (probability)
4 降维算法 (Dimensionality reduction)
- SVD (Singular Value Decomposition)
- PCA (Principal Component Analysis)
- MDS (Metric Multidimensional Scaling)
- Probabilistic PCA
5 Supervised learning
预测算法: t=f(x)t=f(x)
Classification 分类算法,得到的是t是哪个具体的类: t∈1,2,3,…Ct∈1,2,3,…C
Regression 回归算法,得到的是t是一个数值,然后我们定义决策值来判断其属于那个类: t∈Rt∈R
1. KNN (K-Nearest Neighbour Classification)
2. Naïve Bayes Classifier
3. Linear classifiers
4. Logistic Regression
6. Bayesian Linear Regression
7. (SVM) Support Vector Machines
6 Unsupervised Learning
聚类 (Clustering)
1.1 K-Means
1.2 Hierarchical Clustering
1.3 Inter Cluster Similarity
1.4 高级话题: Probabilistic Approach to Clustering: Gaussian Mixtures
1.5 高级话题: EM (Expectation Maximisation) for Gaussian Mixtures密度计算