scikit-learn 是机器学习领域非常热门的一个开源库。基于Python 语言写成。能够免费使用。
网址: http://scikit-learn.org/stable/index.html
上面有非常多的教程,编程实例。
并且还做了非常好的总结,以下这张图基本概括了传统机器学习领域的大多数理论与相关算法。
我们能够看到,机器学习分为四大块。各自是 classification (分类), clustering (聚类), regression (回归), dimensionality reduction (降维)。
给定一个样本特征 x<script type="math/tex" id="MathJax-Element-844">\mathbf{x}</script>, 我们希望预測其相应的属性值 y<script type="math/tex" id="MathJax-Element-845">y</script>, 假设 y<script type="math/tex" id="MathJax-Element-846">y</script> 是离散的, 那么这就是一个分类问题,反之。假设 y<script type="math/tex" id="MathJax-Element-847">y</script> 是连续的实数, 这就是一个回归问题。
假设给定一组样本特征 S={x∈RD}<script type="math/tex" id="MathJax-Element-848">\mathbf{S}=\{\mathbf{x} \in R^{D} \}</script>, 我们没有相应的 y<script type="math/tex" id="MathJax-Element-849">y</script>, 而是想发掘这组样本在 D<script type="math/tex" id="MathJax-Element-850">D</script> 维空间的分布, 比方分析哪些样本靠的更近。哪些样本之间离得非常远, 这就是属于聚类问题。
假设我们想用维数更低的子空间来表示原来高维的特征空间, 那么这就是降维问题。
classification & regression
不管是分类还是回归,都是想建立一个预測模型 H<script type="math/tex" id="MathJax-Element-1876">H</script>,给定一个输入 x<script type="math/tex" id="MathJax-Element-1877">\mathbf{x}</script>, 能够得到一个输出 y<script type="math/tex" id="MathJax-Element-1878">y</script>:
y=H(x)
<script type="math/tex; mode=display" id="MathJax-Element-1879">y=H(\mathbf{x})</script>
不同的仅仅是在分类问题中, y<script type="math/tex" id="MathJax-Element-1880">y</script> 是离散的; 而在回归问题中 y<script type="math/tex" id="MathJax-Element-1881">y</script> 是连续的。所以总得来说,两种问题的学习算法都非常相似。
所以在这个图谱上,我们看到在分类问题中用到的学习算法。在回归问题中也能使用。
分类问题最经常使用的学习算法包含 SVM (支持向量机) , SGD (随机梯度下降算法), Bayes (贝叶斯预计), Ensemble, KNN 等。而回归问题也能使用 SVR, SGD, Ensemble 等算法,以及其他线性回归算法。
clustering
聚类也是分析样本的属性, 有点相似classification, 不同的就是classification 在预測之前是知道 y<script type="math/tex" id="MathJax-Element-2014">y</script> 的范围, 或者说知道究竟有几个类别, 而聚类是不知道属性的范围的。所以 classification 也经常被称为 supervised learning, 而clustering就被称为 unsupervised learning。
clustering 事先不知道样本的属性范围,仅仅能凭借样本在特征空间的分布来分析样本的属性。这样的问题一般更复杂。
而经常使用的算法包含 k-means (K-均值), GMM (高斯混合模型) 等。
dimensionality reduction
降维是机器学习还有一个重要的领域, 降维有非常多重要的应用, 特征的维数过高, 会添加训练的负担与存储空间, 降维就是希望去除特征的冗余, 用更加少的维数来表示特征. 降维算法最基础的就是PCA了, 后面的非常多算法都是以PCA为基础演化而来。
<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>