精华内容
下载资源
问答
  • 机器学习聚类回归分类算法

    千次阅读 2018-08-21 10:12:43
    机器学习从学习的种类分为“无监督学习”(不对样本数据做任何标记甚至是过程干预)和“有监督学习”(总结训练样本向量与标签的映射关系)。 一。聚类: 是非常典型的无监督学习的一种。聚类的行为本源还是人自身...

    机器学习从学习的种类分为“无监督学习”(不对样本数据做任何标记甚至是过程干预)和“有监督学习”(总结训练样本向量与标签的映射关系)。

    一。聚类:

    是非常典型的无监督学习的一种。聚类的行为本源还是人自身。聚类是通过划分一个个范围,把输入样例进入符合条件的范围,通过映射关系输出一个合理的结果。类比于人类的行为,我们分的清猴子和汽车,猴子的种类很多,他们有些行为、样貌迥异,但是我们却不会把他们和汽车弄混,我们认为在一定的差异范围内,他仍然属于猴子的范围。

    在这个过程中,从获得具体的样本向量,到得到聚类结果,人们是不用进行干预的,从而得到了“非监督”的概念。

    二。回归

    简单来说就是“由果索因”的过程,是一种归纳的思想。最常用的回归有两大类----线性回归,非线性回归。

    Loss越小,越精准。会把收集到的数据集分为训练集和验证集。七三开,八二开都可以。训练集一侧用数据多的那部分。

    非线性回归当属逻辑回归。

    三。分类

    在数据中使用最多的算法。涉及一个召回率和精确率。

     

    展开全文
  • 回归分类聚类:三大方向剖解机器学习算法的优缺点
  • 今天开始总结和复习机器学习知识点: 一句话概括: 1. 聚类:无监督学习,学习结果将产生几个集合,集合中的元素彼此相似; 2. 分类:有监督学习,学习结果将产生几个函数,通过函数划分为几个集合,数据对象是...

    Date: 2019-08-15

    今天开始总结和复习机器学习知识点:

    一句话概括:

    1. 聚类:无监督学习,学习结果将产生几个集合,集合中的元素彼此相似;

    2. 分类:有监督学习,学习结果将产生几个函数,通过函数划分为几个集合,数据对象是离散值;

    3. 回归:有监督学习,学习结果将产生几个函数,通过函数产生连续的结果,数据对象是连续值;

     

    聚类

    聚类算法是无监督学习的一种算法,也就是说,并没有一批已经打好标签的数据供机器训练模型。因此该算法用于在数据中寻找数据间隐藏的联系和区别。通过聚类后形成几个集合,集合内部的元素间具有较高的相似度,相似度的衡量可以通过欧几里得距离、概率距离、加权重距离计算。

    常见的聚类算法有:

    1.划分聚类: K-means 算法、k-medoids算法、K-pototypes算法、CLARANS算法

    2.层次聚类:BIRCH算法、CURE算法、

    3.密度聚类:DBSCAN算法、OPTICS算法、DENCLUE算法

    4.网格聚类:STING算法、CLIQUE算法、WAVE-CLUSTER算法

    5.混合聚类:高斯混合模型、CLIQUE算法(综合密度和网格的算法)

    几个聚类算法的简单对比:


            

    分类

    分类算法要求先向模型输入数据的训练样本,从训练样本中提取描述该类数据的一个函数或模型。通过该模型对其他数据进行预测和归类,分类算法是一种对离散型随机变量建模或预测的监督学习算法,同时产生离散的结果。比如在医疗诊断中判断是否患有癌症,在放贷过程中进行客户评级等。

    常见的分类算法:

    1.决策树:ID3、C4.5(C5.0)、CART、PUBLIC、SLIQ、SPRINT算法;

    2.神经网络:BP网络、径向基RBF网络、Hopfield网络、随机神经网络(Boltzmann机)、竞争神经网络(Hamming网络,自组织映射网络);

    3.贝叶斯:朴素贝叶斯(Naive Bayes)算法、TAN算法;

    4.基于关联规则的分类:CBA算法、ADT算法、CMAR算法、ARCS算法;

    5.混合分类方法:Bagging算法、Boosting算法

    6.支持向量机;SVM

     

    回归

    回归算法与分类算法一样都是有监督的学习算法,因此也需要先向模型输入数据的训练样本。但是与分类算法的区别是,回归算法是一种对数值型连续随机变量进行预测和建模的监督学习算法,产生的结果也一般是数值型的。

    例如向已经训练好的回归模型中输入一个人的数据,判断此人20年后的经济能力,则模型的回归结果是连续的,往往得到一条回归曲线。当自变量改变时,因变量呈现连续型变化。

    常见的回归算法:

    1.线性回归/逻辑回归/多项式回归:LR算法、LWLR算法(局部加权)、LRCV算法(交叉验证)、MLP算法(神经网络);

    2.逐步回归;

    3.岭回归;

    4.LASSO回归;

    5.ElasticNet回归;
     

    展开全文
  •   分类分类方法是一种对离散型随机变量建模或预测的监督学习算法。...许多回归算法都有与其相对应的分类算法,分类算法通常适用于预测一个类别(或类别的概率)而不是连续的数值。 1.逻辑回归 logistic Lo...

    https://blog.csdn.net/qq_38462321/article/details/81777402

     

    分类:

    分类方法是一种对离散型随机变量建模或预测的监督学习算法。使用案例包括邮件过滤、金融欺诈和预测雇员异动等输出为类别的任务。许多回归算法都有与其相对应的分类算法,分类算法通常适用于预测一个类别(或类别的概率)而不是连续的数值。

    1.逻辑回归 logistic

    Logistic 回归是与线性回归相对应的一种分类方法,且该算法的基本概念由线性回归推导而出。Logistic 回归通过 Logistic 函数(即 Sigmoid 函数)将预测映射到 0 到 1 中间,因此预测值就可以看成某个类别的概率。

    该模型仍然还是「线性」的,所以只有在数据是线性可分(即数据可被一个超平面完全分离)时,算法才能有优秀的表现。同样 Logistic 模型能惩罚模型系数而进行正则化。

    • 优点:输出有很好的概率解释,并且算法也能正则化而避免过拟合。Logistic 模型很容易使用随机梯度下降和新数据更新模型权重。
    • 缺点:Logistic 回归在多条或非线性决策边界时性能比较差。

    2.分类树、决策树

    与回归树相对应的分类算法是分类树。它们通常都是指决策树,或更严谨一点地称之为「分类回归树(CART)」,这也就是非常著名的 CART 的算法。

    • 优点:同回归方法一样,分类树的集成方法在实践中同样表现十分优良。它们通常对异常数据具有相当的鲁棒性和可扩展性。因为它的层级结构,分类树的集成方法能很自然地对非线性决策边界建模。

    • 缺点:不可约束,单棵树趋向于过拟合,使用集成方法可以削弱这一方面的影响。

    3 深度学习

    深度学习同样很容易适应于分类问题。实际上,深度学习应用地更多的是分类任务,如图像分类等。

    • 优点:深度学习非常适用于分类音频、文本和图像数据。

    • 缺点:和回归问题一样,深度神经网络需要大量的数据进行训练,所以其也不是一个通用目的的算法。

    4 支持向量机

    支持向量机(SVM)可以使用一个称之为核函数的技巧扩展到非线性分类问题,而该算法本质上就是计算两个称之为支持向量的观测数据之间的距离。SVM 算法寻找的决策边界即最大化其与样本间隔的边界,因此支持向量机又称为大间距分类器。

    支持向量机中的核函数采用非线性变换,将非线性问题变换为线性问题

    例如,SVM 使用线性核函数就能得到类似于 logistic 回归的结果,只不过支持向量机因为最大化了间隔而更具鲁棒性。因此,在实践中,SVM 最大的优点就是可以使用非线性核函数对非线性决策边界建模。

    • 优点:SVM 能对非线性决策边界建模,并且有许多可选的核函数形式。SVM 同样面对过拟合有相当大的鲁棒性,这一点在高维空间中尤其突出。

    • 缺点:然而,SVM 是内存密集型算法,由于选择正确的核函数是很重要的,所以其很难调参,也不能扩展到较大的数据集中。目前在工业界中,随机森林通常优于支持向量机算法。

    5 朴素贝叶斯

    朴素贝叶斯(NB)是一种基于贝叶斯定理和特征条件独立假设的分类方法。本质上朴素贝叶斯模型就是一个概率表,其通过训练数据更新这张表中的概率。为了预测一个新的观察值,朴素贝叶斯算法就是根据样本的特征值在概率表中寻找最大概率的那个类别。

    之所以称之为「朴素」,是因为该算法的核心就是特征条件独立性假设(每一个特征之间相互独立),而这一假设在现实世界中基本是不现实的。

    • 优点:即使条件独立性假设很难成立,但朴素贝叶斯算法在实践中表现出乎意料地好。该算法很容易实现并能随数据集的更新而扩展。

    • 缺点:因为朴素贝叶斯算法太简单了,所以其也经常被以上列出的分类算法所替代。

    回归

    回归方法是一种对数值型连续随机变量进行预测和建模的监督学习算法。使用案例一般包括房价预测、股票走势或测试成绩等连续变化的案例。

    回归任务的特点是标注的数据集具有数值型的目标变量。也就是说,每一个观察样本都有一个数值型的标注真值以监督算法

    1 线性回归(正则化)

    线性回归是处理回归任务最常用的算法之一。该算法的形式十分简单,它期望使用一个超平面拟合数据集(只有两个变量的时候就是一条直线)。如果数据集中的变量存在线性关系,那么其就能拟合地非常好。

    在实践中,简单的线性回归通常被使用正则化的回归方法(LASSO、Ridge 和 Elastic-Net)所代替。正则化其实就是一种对过多回归系数采取惩罚以减少过拟合风险的技术。当然,我们还得确定惩罚强度以让模型在欠拟合和过拟合之间达到平衡。

    • 优点:线性回归的理解与解释都十分直观,并且还能通过正则化来降低过拟合的风险。另外,线性模型很容易使用随机梯度下降和新数据更新模型权重。

    • 缺点:线性回归在变量是非线性关系的时候表现很差。并且其也不够灵活以捕捉更复杂的模式,添加正确的交互项或使用多项式很困难并需要大量时间。

    2 回归树(集成方法)

    回归树(决策树的一种)通过将数据集重复分割为不同的分支而实现分层学习,分割的标准是最大化每一次分离的信息增益。这种分支结构让回归树很自然地学习到非线性关系。

    集成方法,如随机森林(RF)或梯度提升树(GBM)则组合了许多独立训练的树。这种算法的主要思想就是组合多个弱学习算法而成为一种强学习算法,不过这里并不会具体地展开。在实践中 RF 通常很容易有出色的表现,而 GBM 则更难调参,不过通常梯度提升树具有更高的性能上限。

    • 优点:决策树能学习非线性关系,对异常值也具有很强的鲁棒性。集成学习在实践中表现非常好,其经常赢得许多经典的(非深度学习)机器学习竞赛。

    • 缺点:无约束的,单棵树很容易过拟合,因为单棵树可以保留分支(不剪枝),并直到其记住了训练数据。集成方法可以削弱这一缺点的影响。

    3 深度学习

    深度学习是指能学习极其复杂模式的多层神经网络。该算法使用在输入层和输出层之间的隐藏层对数据的中间表征建模,这也是其他算法很难学到的部分。

    深度学习还有其他几个重要的机制,如卷积和 drop-out 等,这些机制令该算法能有效地学习到高维数据。然而深度学习相对于其他算法需要更多的数据,因为其有更大数量级的参数需要估计。

    • 优点:深度学习是目前某些领域最先进的技术,如计算机视觉和语音识别等。深度神经网络在图像、音频和文本等数据上表现优异,并且该算法也很容易对新数据使用反向传播算法更新模型参数。它们的架构(即层级的数量和结构)能够适应于多种问题,并且隐藏层也减少了算法对特征工程的依赖。

    • 缺点:深度学习算法通常不适合作为通用目的的算法,因为其需要大量的数据。实际上,深度学习通常在经典机器学习问题上并没有集成方法表现得好。另外,其在训练上是计算密集型的,所以这就需要更富经验的人进行调参(即设置架构和超参数)以减少训练时间。

    4 最近邻算法

    最近邻算法是「基于实例的」,这就意味着其需要保留每一个训练样本观察值。最近邻算法通过搜寻最相似的训练样本来预测新观察样本的值。而这种算法是内存密集型,对高维数据的处理效果并不是很好,并且还需要高效的距离函数来度量和计算相似度。在实践中,基本上使用正则化的回归或树型集成方法是最好的选择。

    聚类

    聚类是一种无监督学习任务,该算法基于数据的内部结构寻找观察样本的自然族群(即集群)。使用案例包括细分客户、新闻聚类、文章推荐等。因为聚类是一种无监督学习(即数据没有标注),并且通常使用数据可视化评价结果。如果存在「正确的回答」(即在训练集中存在预标注的集群),那么分类算法可能更加合适。

    1 K 均值聚类

    K 均值聚类是一种通用目的的算法,聚类的度量基于样本点之间的几何距离(即在坐标平面中的距离)。集群是围绕在聚类中心的族群,而集群呈现出类球状并具有相似的大小。聚类算法是我们推荐给初学者的算法,因为该算法不仅十分简单,而且还足够灵活以面对大多数问题都能给出合理的结果。

    • 优点:K 均值聚类是最流行的聚类算法,因为该算法足够快速、简单,并且如果你的预处理数据和特征工程十分有效,那么该聚类算法将拥有令人惊叹的灵活性。

    • 缺点:该算法需要指定集群的数量,而 K 值的选择通常都不是那么容易确定的。另外,如果训练数据中的真实集群并不是类球状的,那么 K 均值聚类会得出一些比较差的集群。

    2 Affinity Propagation 聚类

    AP 聚类算法是一种相对较新的聚类算法,该聚类算法基于两个样本点之间的图形距离(graph distances)确定集群。采用该聚类方法的集群拥有更小和不相等的大小。

    • 优点:该算法不需要指出明确的集群数量(但是需要指定「sample preference」和「damping」等超参数)。

    • 缺点:AP 聚类算法主要的缺点就是训练速度比较慢,并需要大量内存,因此也就很难扩展到大数据集中。另外,该算法同样假定潜在的集群是类球状的。

    3 层次聚类(Hierarchical / Agglomerative)

    层次聚类是一系列基于以下概念的聚类算法:

    1. 最开始由一个数据点作为一个集群

    2. 对于每个集群,基于相同的标准合并集群

    3. 重复这一过程直到只留下一个集群,因此就得到了集群的层次结构。

    • 优点:层次聚类最主要的优点是集群不再需要假设为类球形。另外其也可以扩展到大数据集。

    • 缺点:有点像 K 均值聚类,该算法需要设定集群的数量(即在算法完成后需要保留的层次)。

    4 DBSCAN

    DBSCAN 是一个基于密度的算法,它将样本点的密集区域组成一个集群。最近还有一项被称为 HDBSCAN 的新进展,它允许改变密度集群。

    展开全文
  • 机器学习聚类算法应用篇

    千次阅读 2020-01-07 12:52:29
    文章目录1 概述1.1 无监督学习聚类算法1.2 sklearn中常用的聚类算法2 sklearn中生成测试数据函数介绍2.1 make_classification2.2 make_moons2.3 make_moons2.4 make_blobs3 使用sklearn聚类示例3.1 簇数据聚类3.2 ...

    1 概述

    本专题重点在于使用sklearn进行聚类分析,不涉及聚类算法的原理介绍。

    1.1 无监督学习与聚类算法

    在机器学习当中,有相当一部分算法属于“无监督学习”,无监督算法在训练的时候只需要特征矩阵X,不需要标签。聚类算法就是无监督学习的代表算法。

    聚类算法又叫“无监督分类”,其目的是将数据划分为有意义或者有用的组(簇)。这种划分可以基于业务的需求或者建模的需求来完成,也可以单纯的帮助我们探索数据的自然结构和分布。比如在商业中,如果我们的手头有大量的客户信息,我们可以使用聚类将客户划分为若干组,以便进一步分析和开展营销活动,最有名的客户价值判断模型RFM就常和聚类分析共同使用。再比如,聚类可以用于降维和矢量量化(vector quantization),可以将高位特征压缩到一列当中,常常用于图像,声音,视频等非结构化数据,可以大幅压缩数据量。

    聚类分类
    核心将数据分成多组
    探索每个组的数据是否有联系
    从已经分组的数据中去学习
    把新数据放到已经分好的组中去
    学习类型无监督,不需要标签进行训练有监督,需要标签
    典型算法K-Means, DBSCAN, 层次聚类, 谱聚类决策树, 贝叶斯, 逻辑回归, SVM
    算法输出聚类的结果是不确定的
    不一定总是能够反映数据的真实分类
    分类结果是确定的
    分类的优劣是客观的

    1.2 sklearn中常用的聚类算法

    sklearn中的聚类算法有两种表现形式,一种是类,需要实例化,训练并使用接口和属性来调用。另一种是函数,只需要输入特征矩阵和超参数即可返回聚类的结果和各种指标。

    含义输入
    cluster.AffinityPropagation执行亲和传播数据聚类[damping, …]
    cluster.AgglomerativeClustering凝聚聚类[…]
    cluster.BirchBirch聚类算法[threshold, branching_factor, …]
    cluster.DBSCANDBSCAN聚类算法[eps, min_samples, metrix, …]
    cluster.FeatureAgglomeration凝聚特征[n_clusters, …]
    cluster.KMeansK均值聚类[n_clusters, init, n_init, …]
    cluster.MiniBatchKMeans小批量K均值聚类[n_clusters, init, …]
    cluster.MeanShift使用平坦核函数的平均移位聚类[bandwidth, seeds, …]
    cluster.SpectralClustering谱聚类[n_clusters, …]

    1.3 sklearn中聚类使用示例

    1.3.1 聚类示例

    以KMeans为例,在sklearn中进行聚类步骤如下:

    from sklearn.datasets import make_blobs
    from sklearn.cluster import KMeans
    
    x = make_blobs(n_samples=1000, n_features=2, centers = 4, cluster_std=2.0)[0]
    ## 方式1:使用fit函数训练,然后调用cluster1.labels_得到每个数据对应的簇编号(0,1,2,...)
    cluster1 = KMeans(n_clusters = 4, random_state=10).fit(x)
    y_pred = cluster1.labels_
    
    ## 方式2:使用fit_predict直接获得每个数据对应簇编号
    y_pred = KMeans(n_clusters = 4, random_state=10).fit_predit(x)
    
    ## 以上两个方法得到的结果完全一致。
    

    1.3.2 重要属性

    • culster_centers_ - 簇心:返回每个簇心的坐标
    • inertia - 总距离平方和:越小越好

    2 sklearn中生成测试数据函数介绍

    生成数据的函数主要有:sklearn.datasets.make_classification, sklearn.datasets.make_circles, sklearn.datasets.make_moons以及sklearn.datasets.make_blobs。这里简单介绍每一个函数,具体参数见官方文档。

    2.1 make_classification

    主要用来生成分类数据,用法示例:

    x = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_clusters_per_class=1)
    

    示例:

    from sklearn.datasets import make_classification, make_circles, make_moons
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(15,5))
    fig.add_subplot(1,3,1)
    x = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_clusters_per_class=1)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_classification')
    
    fig.add_subplot(1,3,2)
    x = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_clusters_per_class=2)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_classification')
    
    fig.add_subplot(1,3,3)
    x = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_repeated=0, n_clusters_per_class=2)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_classification')
    

    在这里插入图片描述

    2.2 make_moons

    用来生成月牙形数据,用法示例:

    x = make_moons(n_samples=1000, noise=0.1)
    

    示例:

    from sklearn.datasets import make_moons
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(15,5))
    fig.add_subplot(1,3,1)
    x = make_moons(n_samples=1000, noise=0)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('Make_moons(noise=0)')
    
    fig.add_subplot(1,3,2)
    x = make_moons(n_samples=1000, noise=0.1)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('Make_moons(noise=0.1)')
    
    fig.add_subplot(1,3,3)
    x = make_moons(n_samples=1000, noise=0.5)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('Make_moons(noise=0.5)')
    

    在这里插入图片描述

    2.3 make_moons

    用来生成环形数据,用法示例:

    x = make_circles(n_samples=1000, noise=0.05, factor=0.6)
    

    示例:

    from sklearn.datasets import make_circles
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(15,5))
    fig.add_subplot(1,3,1)
    x = make_circles(n_samples=1000, noise=0)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_circles(noise=0)')
    
    fig.add_subplot(1,3,2)
    x = make_circles(n_samples=1000, noise=0.05, factor=0.6)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_circles(noise=0.1)')
    
    fig.add_subplot(1,3,3)
    x = make_circles(n_samples=1000, noise=0.5)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_circles(noise=0.5)')
    

    在这里插入图片描述

    2.4 make_blobs

    用来生成簇数据,用法示例:

    x = make_blobs(n_samples=1000, n_features=2, centers = 3)
    

    示例:

    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    import numpy as np
    
    fig = plt.figure(figsize=(15,5))
    fig.add_subplot(1,3,1)
    x = make_blobs(n_samples=1000, n_features=2, centers = 2)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_blobs')
    
    fig.add_subplot(1,3,2)
    x = make_blobs(n_samples=1000, n_features=2, centers = 3)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_blobs')
    
    fig.add_subplot(1,3,3)
    x = make_blobs(n_samples=1000, n_features=2, centers = 4)
    plt.plot(x[0][:,0], x[0][:,1], 'b.')
    plt.title('make_blobs')
    

    在这里插入图片描述

    3 使用sklearn聚类示例

    使用常用的六个聚类算法,并将聚类结果使用PCA降维后可视化。

    3.1 簇数据聚类

    from sklearn.datasets import make_circles
    import matplotlib.pyplot as plt
    import numpy as np
    from sklearn.cluster import KMeans, DBSCAN, SpectralClustering, Birch, MeanShift, AgglomerativeClustering
    from sklearn.decomposition import PCA
    import pandas as pd
    
    x = make_blobs(n_samples=1000, n_features=2, centers = 4, cluster_std=2.0)[0]
    pca = PCA(n_components=2)
    pca_result = pca.fit_transform(x)
    fig = plt.figure(figsize=(15,10))
    
    model = AgglomerativeClustering(n_clusters = 4)
    y_pred = model.fit_predict(x)
    fig.add_subplot(2,3,1)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('AgglomerativeClustering')
    
    model = KMeans(n_clusters = 4, random_state=10)
    y_pred = model.fit_predict(x)
    fig.add_subplot(2,3,2)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('KMeans')
    
    model = DBSCAN(eps=0.1)
    model.fit(x)
    y_pred = model.labels_
    fig.add_subplot(2,3,3)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('DBSCAN')
    
    model = SpectralClustering(n_clusters = 4, random_state=10)
    y_pred = model.fit_predict(x)
    fig.add_subplot(2,3,4)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('SpectralClustering')
    
    model = Birch(n_clusters=4)
    model.fit(x)
    y_pred = model.labels_
    fig.add_subplot(2,3,5)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('Birch')
    
    model = MeanShift()
    model.fit(x)
    y_pred = model.labels_
    fig.add_subplot(2,3,6)
    plt.scatter(pca_result[:,0], pca_result[:,1], marker='.', c=y_pred)
    plt.title('MeanShift')
    

    在这里插入图片描述

    3.2 月牙形数据聚类

    代码基本类似,直接放结果了

    在这里插入图片描述

    3.3 环形数据聚类

    在这里插入图片描述

    4 各聚类算法在各种簇分布下的聚类效果对比

    这里使用sklearn官方的示例代码演示一下效果。

    print(__doc__)
    
    import time
    
    import numpy as np
    import matplotlib.pyplot as plt
    
    from sklearn import cluster, datasets
    from sklearn.neighbors import kneighbors_graph
    from sklearn.preprocessing import StandardScaler
    
    np.random.seed(0)
    
    # Generate datasets. We choose the size big enough to see the scalability
    # of the algorithms, but not too big to avoid too long running times
    n_samples = 1500
    noisy_circles = datasets.make_circles(n_samples=n_samples, factor=.5,
                                          noise=.05)
    noisy_moons = datasets.make_moons(n_samples=n_samples, noise=.05)
    blobs = datasets.make_blobs(n_samples=n_samples, random_state=8)
    no_structure = np.random.rand(n_samples, 2), None
    
    colors = np.array([x for x in 'bgrcmykbgrcmykbgrcmykbgrcmyk'])
    colors = np.hstack([colors] * 20)
    
    clustering_names = [
        'MiniBatchKMeans', 'AffinityPropagation', 'MeanShift',
        'SpectralClustering', 'Ward', 'AgglomerativeClustering',
        'DBSCAN', 'Birch']
    
    plt.figure(figsize=(len(clustering_names) * 2 + 3, 9.5))
    plt.subplots_adjust(left=.02, right=.98, bottom=.001, top=.96, wspace=.05,
                        hspace=.01)
    
    plot_num = 1
    
    datasets = [noisy_circles, noisy_moons, blobs, no_structure]
    for i_dataset, dataset in enumerate(datasets):
        X, y = dataset
        # normalize dataset for easier parameter selection
        X = StandardScaler().fit_transform(X)
    
        # estimate bandwidth for mean shift
        bandwidth = cluster.estimate_bandwidth(X, quantile=0.3)
    
        # connectivity matrix for structured Ward
        connectivity = kneighbors_graph(X, n_neighbors=10, include_self=False)
        # make connectivity symmetric
        connectivity = 0.5 * (connectivity + connectivity.T)
    
        # create clustering estimators
        ms = cluster.MeanShift(bandwidth=bandwidth, bin_seeding=True)
        two_means = cluster.MiniBatchKMeans(n_clusters=2)
        ward = cluster.AgglomerativeClustering(n_clusters=2, linkage='ward',
                                               connectivity=connectivity)
        spectral = cluster.SpectralClustering(n_clusters=2,
                                              eigen_solver='arpack',
                                              affinity="nearest_neighbors")
        dbscan = cluster.DBSCAN(eps=.2)
        affinity_propagation = cluster.AffinityPropagation(damping=.9,
                                                           preference=-200)
    
        average_linkage = cluster.AgglomerativeClustering(
            linkage="average", affinity="cityblock", n_clusters=2,
            connectivity=connectivity)
    
        birch = cluster.Birch(n_clusters=2)
        clustering_algorithms = [
            two_means, affinity_propagation, ms, spectral, ward, average_linkage,
            dbscan, birch]
    
        for name, algorithm in zip(clustering_names, clustering_algorithms):
            # predict cluster memberships
            t0 = time.time()
            algorithm.fit(X)
            t1 = time.time()
            if hasattr(algorithm, 'labels_'):
                y_pred = algorithm.labels_.astype(np.int)
            else:
                y_pred = algorithm.predict(X)
    
            # plot
            plt.subplot(4, len(clustering_algorithms), plot_num)
            if i_dataset == 0:
                plt.title(name, size=18)
            plt.scatter(X[:, 0], X[:, 1], color=colors[y_pred].tolist(), s=10)
    
            if hasattr(algorithm, 'cluster_centers_'):
                centers = algorithm.cluster_centers_
                center_colors = colors[:len(centers)]
                plt.scatter(centers[:, 0], centers[:, 1], s=100, c=center_colors)
            plt.xlim(-2, 2)
            plt.ylim(-2, 2)
            plt.xticks(())
            plt.yticks(())
            plt.text(.99, .01, ('%.2fs' % (t1 - t0)).lstrip('0'),
                     transform=plt.gca().transAxes, size=15,
                     horizontalalignment='right')
            plot_num += 1
    
    plt.show()
    

    在这里插入图片描述

    5 聚类算法的模型评估指标

    本节参考自:【机器学习】菜菜的sklearn课堂06 - 聚类算法与KMeans

    不同于分类模型和回归,聚类算法的模型评估不是一件简单的事情。在分类问题中,有直接结果作为输出,而且分类问题的结果有正误之分,所以可以使用预测准确度,混淆矩阵,ROC曲线等指标来进行评估。在回归问题中有均方误差,RSE,MSE等损失函数衡量模型的拟合程度。那么如何衡量聚类算法的效果呢?

    面试高危问题:如何衡量聚类算法的效果?
    像KMeans这种聚类算法,其目标是确保“簇内差异小,簇间差异大“,因此可以通过衡量簇内差异来衡量聚类的效果,sklearn自带的inertia就是用距离来衡量簇内差异的指标,因此能否使用inertia来作为聚类的衡量指标呢?inertia越小模型就越好吗?

    inertia可以作为指标,但是这个指标的缺点和极限太大。

    • 它不是有界的,我们只知道inertia越小越好,但是我们并不知道一个较小的inertia是否已经达到了模型的极限
    • 它的计算太容易收到特征数目的影响,数据维度很大的时候,inertia的计算量会爆炸,不适合评估模型
    • inertia对数据的分布有假设,假设数据满足凸分布,并且假设数据是各向同性的(isotropic),即数据的属性在不同方向上代表着相同的含义。但是现实中的数据往往不是这样的。所以使用inertia作为评估指标,会让聚类算法在一些细长簇,环形簇或者不规则性状的流行时表现不佳。

    那么可以使用什么指标呢?

    5.1 当真实标签已知的时候

    虽然聚类的过程中不输入真实标签,但这不代表数据集中没有真实标签。如果拥有真实的标签,我们更倾向于使用分类算法,但仍然可以使用聚类算法对其进行分类。常用的衡量带标签数据聚类效果的方法有以下三种:

    模型评估指标说明
    互信息分

    普通互信息分
    metrics.adjusted_mutual_info_score(y_pred, y_true)
    调整的互信息分
    metrics.mutual_info_score(y_pred, y_true)
    标准化互信息分
    metrics.normalized_mutual_info_score(y_pred, y_true)
    取值范围在(0,1),越接近1聚类效果越好
    V-measure:基于条件上分析的一系列直观度量

    同质性、完整性、同质性和完整性的调和平均(V-measure)
    metrics.homogeneity_score(y_true, y_pred)
    metrics.completeness_score(y_true, y_pred)
    metrics.v_measure(y_true, y_pred)
    取值范围在(0,1),越接近1聚类效果越好
    调整兰德系数

    metrics.adjusted_rand_score(y_true, y_pred)
    取值在(-1,1)之间,负值象征着簇内的点差异巨大,越接近1表示聚类效果越好。

    5.2 当真实标签未知的时候:轮廓系数

    5.2.1 轮廓系数介绍

    在99%的情况下,我们是对没有真实标签的数据进行探索,并不知道数据的真实类别。这样的聚类,是完全依赖于评价簇内的稠密程度(簇内差异小)和簇间的离散程度(簇间差异大)来评估聚类的效果,其中轮廓系数是最常用的聚类算法的评价指标。它是对每个样本来定义的,能够同时衡量:

    • 样本与其自身所在的簇中的其他样本的相似度a,等于样本与统一簇中所有其他点之间的平均距离
    • 样本与其他簇中样本的相似度b,等于样本与下一个最近的簇中的所有点之间的平均距离

    我们希望b永远大于a,并且越大越好,因此单个样本的轮廓系数计算为:
    s = b − a m a x ( a , b ) s=\frac{b-a}{max(a,b)} s=max(a,b)ba
    这个公式可以被解析为:如果 a < b , s = 1 − a / b a<b,s=1-a/b a<b,s=1a/b,如果 a = b , s = 0 a=b,s=0 a=b,s=0,如果 a > b , s = b / a − 1 a>b,s=b/a-1 a>b,s=b/a1。因此轮廓系数的范围是(-1,1),其值越接近1表示样本与自己所在的簇中的样本很相似,并且与其他簇中的样本不相似,当样本点与簇外的样本更相似的时候,轮廓系数为负数。当轮廓系数为0的时候,表示两个簇中的样本相似度一致,两个簇本应该是一个簇。因此轮廓系数越接近1越好,越大越好

    在sklearn中可以使用metrics中的silhouette_score来计算轮廓系数,它返回的是一个数据集中所有样本的轮廓系数的均值。在metrics中的sihouette_samples的参数余轮廓系数一致,能够返回数据集中每个样本自己的轮廓系数。用法如下:

    from sklearn.metrics import silhouette_score
    from sklearn.datasets import make_blobs
    from sklearn.cluster import KMeans
    
    x = make_blobs(n_samples=1000, n_features=2, centers = 4, cluster_std=2.0)[0]
    y_pred = KMeans(n_clusters = 4, random_state=10).fit_predict(x)
    silhouette_score(x, y_pred)
    
    # >>> 0.4359497951008228
    

    轮廓系数有很多优点,它在有限空间中取值,是的我们对模型的聚类效果有一个参考。并且轮廓系数对数据的分布没有假设,因此在很多的数据集上都表现良好,它在每一个簇的分割比较清晰时表现最好。

    但是轮廓系数也有缺陷,它在凸型的数据上表面会虚高,比如基于密度进行聚类,或通过DBSCAN获得的聚类结果,如果使用轮廓系数来衡量,会表现出比真是聚类效果更高的分数。

    5.2.2 使用轮廓系数可视化图像辅助选择簇的个数

    这里参考【机器学习】菜菜的sklearn课堂06 - 聚类算法与KMeans提供的可视化代码,能够生成很完整且漂亮的可视化图片,如下图所示。关于生该图的完整代码见我的下一篇博客:
    在这里插入图片描述

    5.3 当真实标签未知时的其他评价指标

    除了轮廓系数是最常用的,还有卡林斯基-哈拉巴斯指数(Calinski-Harabaz index,简称CHI,也被称为方差比标准),戴维斯-布尔丁指数(Davies-Bouldin)以及权变矩阵(Contingency Matrix)可以使用。

    标签未知时的评估指标
    卡林斯基-哈拉巴斯指数:sklearn.metrics.calinski_harabaz_score(x, y_pred)
    戴维斯-布尔丁指数:sklearn.metrics.davies_bouldin_score(x, y_pred)
    权变矩阵:sklearn.metrics.cluster.contingency_matrix(x, y_pred)

    (完)

    展开全文
  • 机器学习的观点,分类技术是一种有指导的学习,即每个训练样本的数据对象已经有类标识,通过学习可以形成表达数据对象与类标识间对应的知识。 要构造分类器,需要有一个训练样本数据集作为输入。训练集由一组...
  • 机器学习——降维、聚类分类回归

    万次阅读 多人点赞 2019-02-18 19:10:30
    最近做的任务与降维分类有关,于是乎就将机器学习中的“四大元老”——降维、聚类分类回归给弄混了。。。。。因此,用了很长时间去理解这“四大元老”的具体概念。并借此机会,趁热打铁得记录一下。 1.机器学习 ...
  • 回归算法的评估指标:R方范围[-inf,1] (真实值与预测 ),MSE,MAE,RMSE 分类算法评估指标 混淆矩阵 在介绍评估指标之前,先来认识一下混淆矩阵,在分类任务下,预测结果和真实结果之间存在四种不同组合,这四种
  • 回归分类不同,聚类是无监督学习算法,无监督指的是只需要数据,不需要标记结果,自己给自己分类。 在现实生活中,很少直接用聚类算法,因为聚类效果的好坏不容易衡量(因为没有标记,就没有标准答案),有时候...
  • 点击上方,选择星标或置顶,每天给你送干货!阅读大概需要17分钟跟随小博主,每天进步一丢丢选自 | EliteDataScience 编译 | 机器之心在本教程中,作者对现代机器学习算...
  • 无监督学习:层次聚类、PCA、K-MEANS、AP聚类、DBSCAN、EM算法 强化学习:Q_leaning算法、TD算法 一、分类问题(Classification): 有监督学习,对带有标签的训练数据进行学习,标签为离散数据,预测结果也为离散 二...
  • 聚类分类 监督学习和非监督学习 ------------------------------------------------------------ 1. 术语 1.1 类别 (class) 为标签枚举的一组目标值中的一个。例如,在检测垃圾邮件的二元分类模型中,两种...
  • 关键词:高斯混合聚类机器学习、极大似然估计 在讲高斯混合聚类算法之前先补充以下相关的数学知识,由于篇幅原因,只是简单叙述,如需详细内容,请查阅相关资料 一、正态分布 在概率论中我们学过某些数值在一定...
  • 机器学习(额外篇):聚类算法分类算法的区别

    千次阅读 多人点赞 2019-06-22 10:54:30
    机器学习中有两类的大问题,一个是分类,一个是聚类。 在生活中,我们常常没有过多的去区分这两个概念,觉得聚类就是分类分类也差不多就是聚类,感觉两个没什么太大的区别。下面,我们就具体来研究下分类聚类...
  • 一句话概括: 1. 聚类:无监督学习学习结果将产生几个集合,集合中的元素彼此相似;...聚类算法是无监督学习的一种算法,也就是说,并没有一批已经打好标签的数据供机器训练模型。因此该算法用于在数据中...
  • 聚类·分类·回归】数据挖掘之聚类分类回归

    万次阅读 多人点赞 2018-05-09 07:14:48
    1.分类(classification) 有监督学习的两大应用之一,产生离散的结果。例如向模型输入人的各种数据的训练样本,产生“输入一个人的数据,判断是否患有... 许多回归算法都有与其相对应的分类算法,分类算法通常...
  • 广州大学机器学习与数据挖掘实验代码 实验1 组员信息 1.梁兆豪(组长): TXT数据源读入与数据处理 2.林嘉伟: 数据库数据源读入与数据处理 3.叶建忠: 完成数据计算 作业题目和内容 广州大学某班有同学100人,现要从两个...
  • 机器学习包括有监督和无监督两种,而无监督中主要是聚类和降维算法。 对于聚类算法来说,最常用的是K-means算法和层次聚类方法,本文对这两种算法进行简答的介绍。 一、聚类算法的思想 聚类算法是将N个点聚到K...
  • 回归任务 回归是对已有的数据样本点进行拟合,再根据拟合出来的函数,对未来进行预测。回归数据是连续的值,比如商品价格走势的预测就是回归任务。 分类任务 分类需要先找到数据样本点中的分界线,再根据分界线对新...
  • 导读:机器是怎样学习的,都学到了什么?人类又是怎样教会机器学习的?本文通过案例给你讲清楚各类算法的原理和应用。机器学习,一言以蔽之就是人类定义一定的计算机算法,让计算机根...
  • 机器学习---分类回归聚类、降维的区别

    万次阅读 多人点赞 2017-11-26 15:43:24
    由上图我们可以看到,机器学习分为四大块,分别是  classification (分类),  regression (回归),   clustering (聚类),   dimensionality reduction (降维)。 给定一个样本特征 x, 我们...
  • sklearn对机器学习的常用算法进行了封装,包括回归、降维、分类聚类等。对于以下的机器学习分类实践所用到的函数及方法进行说明。 1.np.c_[ ]和np.r_[ ]的用法解析 >>> import numpy as np >>> a=np.array([[1,2,3...
  • 决策树、线性和逻辑回归都是比较常用的机器学习算法,他们虽然有着不不同的功能,但却都属于 “有监督学习” 的一部分,即是说,模型在训练的时候,即需要特征矩阵X,也需要真实标签y。机器学习当中,还有相当一...
  • 通过在UCI开源网站上下载Car Evaluation数据集,对其使用机器学习算法进行分析,分别使用了分类算法,回归算法聚类算法,文件中附数据集以及代码,代码使用jupyter运行即可,代码中介绍比较详细,通熟易懂,...
  • 机器学习聚类分析

    2020-10-16 16:06:37
    无监督学习:机器学习的一种方法,没有给定事先标记过的训练实例,自动对输入的数据进行分类或分群 优点: 算法不受监督信息(偏见)的约束,可能考虑到新的信息 不需要标签,极大程度扩大数据样本 主要应用: 聚类...
  • 在接下来的文章中,我们将讨论决策树、聚类算法回归,指出它们之间的差异,并找出如何为你的案例选择最合适的模型。 有监督的学习 vs. 无监督的学习 理解机器学习的基础,就是要学会对有监督的学习和无监督的...
  • 机器学习】常用聚类算法原型

    千次阅读 2018-07-19 16:11:32
    前一篇博客中提到的回归分类都属于监督学习,本文着重探讨无监督学习中的聚类算法。 博主之前看过一些资料,这两天也翻阅了网上的各大博客后,也想总结一下,写一写聚类相关的知识点,对自己所看的知识也算是总结...
  • 机器学习算法(9)之聚类算法

    千次阅读 2018-08-31 20:37:52
    前言:在谈论K-means之前,我们是不是会联想到KNN算法呢,感觉这两个好像啊,其实两者差别还是很大的,一个是有监督学习算法,有对应的类别输出,一个是无监督的学习算法,没有样本输出,而且KNN算法是基于实例的一...
  • 原理è 朴素贝叶斯分类器基于一个简单的假定:给定目标值时属性之间相互条件独立。 条件概率:在B已经发生的情况下继续发生A的概率表示为,同样的,综合可得即贝叶斯定理;文字表述为: P(类别|特征)=(P(特征|...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 39,094
精华内容 15,637
关键字:

机器学习分类、聚类、回归算法