scikit-learn机器学习库
- 官网链接 官网链接
- 用于数据挖掘和数据分析的简单高效的工具。
- 能够被所有人使用,能够在各种场景中重用。
- 构建在NumPy,sciPy和matplotlib库之上。
- 开源的,基于BSD证书的,可用于商业产品的开源机器学习库。
sklearn库内容分类
- 分类 Classification
- 回归 Regression
- 聚类 Clustering
- 维度规约 Dimensionality reduction
- 模型选择
- 预处理
分类 Classification
KNN (K Nearest Neighbor, K近邻法)
- 如果一个样本在特征空间的K个最相似(即在特征空间中距离最近)的样本中的大多数属于某个类别,则该样本也属于这个类别。
- knn算法的结果在很大成都上取决于K值的选择。
- knn算法的优势在于:
- 通过点之间的距离来决定相似度,避免了对象之间的比价问题,通常对象之间的比较需要更为耗时和复杂的方法。只比较距离相对更容易计算。
- knn通过k个最近样本中占优势的类别来决定当前点的类别,而不是只由一个点来决定类别,通常更为准确。
- knn分类的不足之处:
- 无法处理样本的不平衡性。如果一个类的样本容量很大,而其他类的样本容量很小时,很有可能当输入一个新样本时,该样本的k个邻居中大容量类的样本占据多数。所以在使用knn的时候最好几种类别的样本数量一致。
- 计算量比较大。要计算全体已知样本的相似度。不过通过采用kd-tree或者ball-tree能够有效避免计算量过大的问题。
- 该算法适用于样本容量较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分类。knn算法对样本容量要比其余算法敏感。
- sklearn中KNN算法原型
- 所在模块 sklearn.neighbors.KNeighborsClassifier
- 函数原型:
class sklearn.neighbors.KNeighborsClassifier(
n_neighbors=5, //knn中k的值,即选k个最近的点计算分类
weights=’uniform’,
algorithm=’auto’, //有四种计算点之间距离的方法,auto,kd-tree,ball-tree, brute方法
leaf_size=30,
p=2,
metric=’minkowski’,
metric_params=None,
n_jobs=1, //使用多少job计算knn,-1标识根据计算机cpu核数决定
**kwargs
)
决策树
贝叶斯分类
- 贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。贝叶斯分类的理论基础是贝叶斯定理和特征之间相互独立的假设(条件独立性)。
- 贝叶斯定理:
贝叶斯定理解决了现实生活里经常遇到的问题:已知某条件概率,如何得到两个事件交换后的概率,也就是在已知P(A|B)的情况下如何求得P(B|A)。
表示事件B已经发生的前提下,事件A发生的概率,叫做事件B发生下事件A的条件概率。其基本求解公式为: P(A|B) = P(AB)/P(B)。
贝叶斯定理之所以有用,是因为我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)获得P(B|A)的道路。
下面直接给出贝叶斯定理:
P(B|A) = P(A|B)P(B)/P(A)
贝叶斯定理的简单证明:
1. P(AB) =P(A|B)P(B) = P(BA) = P(B|A)P(A)
2. 基于上面公式得到 P(B|A) = P(A|B)P(B)/P(A),定理得证。
- 条件独立性
如何理解概率论中的“条件独立性”?
称事件A₁,A₂对于给定事件A为条件独立的,如果P(A₁A₂|A)=P(A₁|A)•P(A₂|A),或等价地P(A₁|A₂A)=P(A₁|A).
朴素贝叶斯分类
朴素贝叶斯分类为什么叫朴素贝叶斯分类?
- 因为朴素贝叶斯分类的方法中假设了各个特征都是条件独立的。
- 假如没有这个假设,那么我们对右边这些概率的估计其实是不可做的,比如,有4个特征,其中帅包括{帅,不帅},性格包括{不好,好,爆好},身高包括{高,矮,中},上进包括{不上进,上进},那么四个特征的联合概率分布总共是4维空间,总个数为2*3*3*2=36个。
特征的36个组合,计算机扫描统计还可以,但是现实生活中,往往有非常多的特征,每一个特征的取值也是非常之多,那么通过统计来估计后面概率的值,变得几乎不可做,这也是为什么需要假设特征之间独立的原因。
(如果没有各个特征条件独立的假设,那么P(X|Y) = P(a1,a2,a3 | Y) = P(a1 | Y)P(a2 | Y)P(a3 | Y)就不成立了,从而计算量呈指数增长,最终导致不可计算。) - 假如我们没有假设特征之间相互独立,那么我们统计的时候,就需要在整个特征空间中去找,比如统计p(不帅、性格不好、身高矮、不上进|嫁),我们就需要在嫁的条件下,去找四种特征全满足分别是不帅,性格不好,身高矮,不上进的人的个数,这样的话,由于数据的稀疏性,很容易统计到0的情况。 这样是不合适的。
- 根据上面俩个原因,朴素贝叶斯法对条件概率分布做了条件独立性的假设,由于这是一个较强的假设,朴素贝叶斯也由此得名!这一假设使得朴素贝叶斯法变得简单,但有时会牺牲一定的分类准确率。
朴素贝叶斯分类的原理及举例
朴素贝叶斯分类原理
- 朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率(即知道了P(A|B)如何获得P(B|A)),哪个最大,就认为此待分类项属于哪个类别。通俗来说,就好比这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人,但在没有其它可用信息下,我们会选择条件概率最大的类别,这就是朴素贝叶斯的思想基础。
朴素贝叶斯分类的正式定义如下:
朴素贝叶斯分类的定义:
1. 设 x = {a1,a2,a3, ... , am}为一个待分类项,其中a为x的特征属性。
2. 训练样本的类别集合为C={y1,y2,y3, ... ,yn}
3. 计算P(y1|x),P(y2|x), ... , P(yn|x)
4. 从第三步骤的结果中选取最大的P(yn|x)作为x的最终分类。
从上面的步骤中可以看到,朴素贝叶斯分类最关键的步骤就是第三步,根据贝叶斯定理及特征条件独立假设,可以得出:
1. P(Yi|X) = P(X|Yi)P(Yi) / P(X)
2. 我们的目的是求出所有P(Yi|X)的最大值,所以不必关注P(X),P(X)对所有Yi都是相同的,都等于 1/样本总数,我们只是比较X属于各个分类的大小,而P(X)对于所有分类都是相同的,所以不需要关心P(X)的准确值。
3. P(Yi)的计算如下: 训练样本中Yi类别样本总数/总样本数。
4. 现在如果知道P(X|Yi)的话我们就能够计算出P(Yi|X)了。而根据特征条件独立这一假设,我们可以得到P(X|Yi) = P(a1,a2,a3 | Yi)= P(a1 |Yi)P(a2 |Yi)P(a3| Yi),所以,只要从训练样本中统计出 “属于Yi分类且具有a1属性的样本 / 属于Yi分类的所有样本”即可,这个很容易从训练样本中统计得到。
从上面的代码中,我们就知道了朴素贝叶斯分类的整个过程。
朴素贝叶斯分类举例
以下链接是朴素贝叶斯分类的一个例子,展示了朴素贝叶斯分类的计算过程:http://kb.cnblogs.com/page/76194/
先验概率与证据及似然的概念
http://blog.csdn.net/lsldd/article/details/41542107
几种流行的朴素贝叶斯分类方法
- 以下链接展示了几种朴素贝叶斯分类的特性。其中所谓的高斯,多项式和伯努利分布是指贝叶斯定理中的 P(X|Yi) 属于哪个模型。http://blog.csdn.net/u012162613/article/details/48323777
高斯朴素贝叶斯
- 高斯分布为的特征值为连续值。
- 适用于特征具有连续值,且所有特征都遵循高斯分布即正态分布的情况。
多项式朴素贝叶斯
- 二项分布和多项分布(多项式分布:特征值为离散值,可取多个值)
http://blog.csdn.net/shuimu12345678/article/details/30773929 - 对于连续的属性是否能够转换为离散值,从而使用多项式朴素贝叶斯?
答:转换的时候需要采用一定的策略,转换后的离散值空间最好每个离散值都覆盖到,因为,对于没有覆盖到的离散值,则P(X | Yi)=0。即使我们采用了平滑方法,例如拉普拉斯平滑,但是计算出来的概率也是不对的。因此,对于连续值,如果没有好的样本和方法能够映射到合适的离散空间,那么久应该使用高斯朴素贝叶斯,而不应该使用多项式朴素贝叶斯。
伯努利朴素贝叶斯
- 伯努利分布(特征值为离散值,去两个值)
http://blog.csdn.net/michael_r_chang/article/details/39188321