Posted on 2019-10-22 02:19
魔のkyo 阅读(759)
评论(0) 编辑 收藏 引用 所属分类:
机器学习
无监督学习算法指的是算法只有输入数据(Features),不需要用到(或根本不知道)输入的对应输出(Target),从中提取一些有用的知识。
sklearn中无监督学习算法主要分为以下类型:预处理、分解和聚类。
scikit-learn中的算法实现
算法中文名 | 所属模块 | 类名 | 主要参数 |
范围缩放 | preprocessing | MinMaxScaler | feature_range=(0,1) |
标准化缩放 | preprocessing | StandardScaler |
|
One-Hot编码 | preprocessing | OneHotEncoder | categorical_features = 'all' |
多项式特征 | preprocessing | PolynomialFeatures | degree=2 |
主成分分析 | decomposition | PCA | n_components, whiten=False |
非负矩阵分解 | decomposition | NMF | n_components |
K聚类 | cluster | KMeans | n_clusters |
凝聚聚类 | cluster | AgglomerativeClustering | n_clusters, linkage=ward |
DBSCAN | cluster | DBSCAN | min_samples, eps |
可以看到上述算法所属模块即对应了预处理、分解和聚类。
预处理就是用于对监督学习算法的输入数据做前期处理,输入和输出都是一组Features。
事实上分解和聚类也可以作为监督学习算法的前期处理,不过他们也可以提供一些额外的功能。
下面对这些算法做逐一简要说明:
MinMaxScaler
根据最大最小值缩放和平移特征,默认参数使得每个特征都在0~1之间。
StandardScaler
根据均值和方差缩放和平移特征,默认参数使得每个特征的均值是0,方差是1。
OneHotEncoder
对分类变量(特征是离散的枚举值)进行编码,把一个具有N个枚举值的特征用N个0,1值的特征表示。
PolynomialFeatures
制造原特征的交互特征和多项式特征,例如(x1,x2)可以生成出(1, x1, x2, x1^2, x2^2, x1*x2),通过degree可以控制生成特征的最高次。可以让线性模型学习出对原特征来说非线性的结果。
PCA
主成分分析是找到原特征的一种新的表示,从线性代数的角度讲是找到一组正交基,然后把原特征当成向量,算出它们在新基下的表示,也就得到一组新表示下特征。这组正交基的取法是先找到原特征离散度最大的轴向,作为正交基的第一个轴,然后第二个轴是在与第一个轴“垂直”的超平面上,继续选取离散度最大的轴向,第三个轴要在与前两个轴都“垂直”的超平面上找离散度最大的轴向,以此类推。因为变换得到的新特征再前几个轴上离散程度较高后面依次降低,我们有理由期望新特征的前几个分量对Target的影响更大(虽然不一定),因此我们可以用PCA来对Feature降维(即丢弃掉后面离散程度最小的一些轴向上的坐标)。
NMF
非负矩阵分解原理类似PCA,不过它的基并不正交,NMF要求原特征均为非负,其基的每个分量和得到的新特征也均为非负,对于有多个独立源叠加而成的数据,比如多人说话的音轨或包含多种乐器的音乐,NMF能识别出组成合成数据的原始分量。NMF也可以用于降维。
KMeans
K均值聚类,所谓聚类就是把数据集按照一定的规则进行分组,使得同组的数据相似,不同组的数据相异,这些组在聚类算法中称为簇,K均值聚类要事先告知簇个数,算法的核心就是不停修正每个簇的簇中心,先随机选K个点作为簇中心,交替进行以下两个步骤:将每个数据点分配给最近的簇中心,然后将每个簇中心设置为所分配的所有数据点的平均值,重复以上步骤直至簇的分配不再变化。前面说聚类也可以作为监督学习算法的前期处理,这里如果我们用簇中心来代表簇里的数据点,那么每个点都可以用一个单一分量来表示(簇的编号),这称为矢量量化。(不过这种分量一般不具有连续意义,似乎还要再进行OneHot编码)
AgglomerativeClustering
凝聚聚类,先把每个数据点视作一个簇,然后按照一定的规则逐步合并,凝聚聚类算法可以生成可视的树状图来观察合并过程。凝聚聚类也需要提前告知簇个数。
DBSCAN
DBSCAN聚类,先随机选取一个没标记过的数据点标记一个新簇,以eps为距离做DFS让遍历到的数据点加入簇,如果最终遍历到的点少于min_samples则视为噪声,然后在再随机选取数据点再遍历再标记,进行直到所有点被标记到一个簇里或标记为噪声,DBSCAN可以生成具有复杂形状的簇,噪声也可以用来做异常值检测。