无监督机器学习算法没有任何监督者提供任何指导。 这就是为什么它们与真正的人工智能紧密结合的原因。

在无人监督的学习中,没有正确的答案,也没有监督者指导。 算法需要发现用于学习的有趣数据模式。

什么是聚类?

基本上,它是一种无监督学习方法,也是用于许多领域的统计数据分析的常用技术。 聚类主要是将观测集合划分为子集(称为聚类)的任务,以同一聚类中的观测在一种意义上相似并且与其他聚类中的观测不相似的方式。 简而言之,可以说聚类的主要目标是根据相似性和不相似性对数据进行分组。

例如,下图显示了不同群集中的类似数据 -

数据聚类算法

以下是数据聚类的几种常用算法 -

K-Means算法
K均值聚类算法是众所周知的数据聚类算法之一。 我们需要假设簇的数量已经是已知的。 这也被称为平面聚类。 它是一种迭代聚类算法。 该算法需要遵循以下步骤 -

第1步 - 需要指定所需的K个子组的数量。
第2步 - 修复群集数量并将每个数据点随机分配到群集。 换句话说,我们需要根据群集数量对数据进行分类。

在这一步中,计算聚类质心。

由于这是一种迭代算法,因此需要在每次迭代中更新K个质心的位置,直到找到全局最优值或换句话说质心到达其最佳位置。

以下代码将有助于在Python中实现K-means聚类算法。 我们将使用Scikit-learn模块。

导入必需的软件包 -

import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
import numpy as np
from sklearn.cluster import KMeans

以下代码行将通过使用sklearn.dataset包中的make_blob来生成包含四个blob的二维数据集。

from sklearn.datasets.samples_generator import make_blobs

X, y_true = make_blobs(n_samples = 500, centers = 4,
cluster_std = 0.40, random_state = 0)
可以使用下面的代码可视化数据集 -
plt.scatter(X[:, 0], X[:, 1], s = 50);
plt.show()

得到以下结果 -

在这里,将kmeans初始化为KMeans算法,以及多少个群集(n_clusters)所需的参数。

kmeans = KMeans(n_clusters = 4)

需要用输入数据训练K-means模型。

kmeans.fit(X)
y_kmeans = kmeans.predict(X)
plt.scatter(X[:, 0], X[:, 1], c = y_kmeans, s = 50, cmap = 'viridis') centers = kmeans.cluster_centers_

下面给出的代码将根据数据绘制和可视化机器的发现,并根据要找到的聚类数量进行拟合。

plt.scatter(centers[:, 0], centers[:, 1], c = 'black', s = 200, alpha = 0.5);
plt.show()

得到以下结果 -

均值偏移算法

它是另一种在无监督学习中使用的流行和强大的聚类算法。 它不做任何假设,因此它是非参数算法。 它也被称为分层聚类或均值聚类分析。 以下将是该算法的基本步骤 -

  • 首先,需要从分配给它们自己的集群的数据点开始。
  • 现在,它计算质心并更新新质心的位置。
  • 通过重复这个过程,向簇的顶点靠近,即朝向更高密度的区域移动。
  • 该算法停止在质心不再移动的阶段。

在下面的代码的帮助下,在Python中实现了Mean Shift聚类算法。使用Scikit-learn模块。

导入必要的软件包 -

import numpy as np
from sklearn.cluster import MeanShift
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")

以下代码将通过使用sklearn.dataset包中的make_blob来生成包含四个blob的二维数据集。

from sklearn.datasets.samples_generator import make_blobs

可以用下面的代码可视化数据集 -

centers = [[2,2],[4,5],[3,10]]
X, _ = make_blobs(n_samples = 500, centers = centers, cluster_std = 1)
plt.scatter(X[:,0],X[:,1])
plt.show()

执行上面示例代码,得到以下结果 -

现在,我们需要用输入数据来训练Mean Shift聚类模型。

ms = MeanShift()
ms.fit(X)
labels = ms.labels_
cluster_centers = ms.cluster_centers_

以下代码将按照输入数据打印聚类中心和预期的聚类数量 -

print(cluster_centers)
n_clusters_ = len(np.unique(labels))
print("Estimated clusters:", n_clusters_)

[[ 3.23005036 3.84771893]
[ 3.02057451 9.88928991]]
Estimated clusters: 2
 

下面给出的代码将有助于根据数据绘制和可视化机器的发现,并根据要找到的聚类数量进行装配。

colors = 10*['r.','g.','b.','c.','k.','y.','m.']
for i in range(len(X)):
plt.plot(X[i][0], X[i][1], colors[labels[i]], markersize = 10)
plt.scatter(cluster_centers[:,0],cluster_centers[:,1],
marker = "x",color = 'k', s = 150, linewidths = 5, zorder = 10)
plt.show()

执行上面示例代码,得到以下结果 -

测量群集性能

现实世界的数据不是自然地组织成许多独特的群集。 由于这个原因,要想象和推断推理并不容易。 这就是为什么需要测量聚类性能及其质量。 它可以在轮廓分析的帮助下完成。

轮廓分析

该方法可用于通过测量群集之间的距离来检查聚类的质量。 基本上,它提供了一种通过给出轮廓分数来评估像集群数量这样的参数的方法。 此分数是衡量一个群集中每个点与相邻群集中的点的距离的度量。

分析轮廓分数
得分范围为[-1,1]。 以下是对这个分数的分析 -

  • 得分为+1分 - 得分接近+1表示样本距离相邻集群很远。
  • 得分为0分 - 得分0表示样本与两个相邻群集之间的决策边界处于或非常接近。
  • 得分为-1分 - 得分为负分数表示样本已分配到错误的群集。

计算轮廓分数

在本节中,我们将学习如何计算轮廓分数。

轮廓分数可以通过使用以下公式来计算 -

这里,`

易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。

易百教程人工智能python修正-人工智能无监督学习(聚类)的更多相关文章

  1. 易百教程人工智能python修正-人工智能监督学习(分类)

    分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如“黑色”或“白色”或“教学”和“非教学”. 在构建分类模型时,需要有包含数据点和相应标签的训练数据集. 例如,如果想检查图像 ...

  2. 易百教程人工智能python修正-人工智能监督学习(回归)

    回归是最重要的统计和机器学习工具之一. 我们认为机器学习的旅程从回归开始并不是错的. 它可以被定义为使我们能够根据数据做出决定的参数化技术,或者换言之,允许通过学习输入和输出变量之间的关系来基于数据做 ...

  3. 易百教程人工智能python修正-人工智能数据准备-标记数据

    我们已经知道,某种格式的数据对于机器学习算法是必需的. 另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须正确标记数据. 例如,如果所说的分类,那么数据上会有很多标记. 这些标记以文字, ...

  4. 易百教程人工智能python修正-人工智能NLTK性别发现器

    在这个问题陈述中,将通过提供名字来训练分类器以找到性别(男性或女性). 我们需要使用启发式构造特征向量并训练分类器.这里使用scikit-learn软件包中的标签数据. 以下是构建性别查找器的Pyth ...

  5. 易百教程人工智能python修正-人工智能数据准备-预处理数据

    预处理数据 在我们的日常生活中,需要处理大量数据,但这些数据是原始数据. 为了提供数据作为机器学习算法的输入,需要将其转换为有意义的数据. 这就是数据预处理进入图像的地方. 换言之,可以说在将数据提供 ...

  6. Python 机器学习实战 —— 无监督学习(上)

    前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...

  7. Python 机器学习实战 —— 无监督学习(下)

    前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...

  8. 易百教程人工智能python补充-NLTK包

    自然语言处理(NLP)是指使用诸如英语之类的自然语言与智能系统进行通信的AI方法. 如果您希望智能系统(如机器人)按照您的指示执行操作,希望听取基于对话的临床专家系统的决策时,则需要处理自然语言. N ...

  9. MyBatis整合Spring MVC(易百教程)

    MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...

随机推荐

  1. 【技术博客】JWT的认证机制Django项目中应用

    开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...

  2. Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解

    Google Kick Start 2019 C轮 第一题 Wiggle Walk 题解 题目地址:https://codingcompetitions.withgoogle.com/kickstar ...

  3. jsch channel is not opened原因及解决

    潜在原因1:服务器sshd限制,可通过如下解决: 潜在原因2:服务器负载过高,超时.在连接处增加超时时间session.setTimeout(60000);默认情况下,socket的超时时间大约为21 ...

  4. openwrt的shell下如何访问寄存器的内容?

    答:通过devmem工具(在openwrt的make menuconfig中可以使能该工具) $ busybox devmem 0x123456

  5. (原创)C++ 同步队列

    (原创)C++ 同步队列 同步队列作为一个线程安全的数据共享区,经常用于线程之间数据读取,比如半同步半异步线程池的同步队列. 其实做起来比较简单,要用到list.锁和条件变量,条件变量的作用是在队列满 ...

  6. ubuntu连接多个realsense d435

    ubuntu连接多个realsense d435 import pyrealsense2 as rs import numpy as np import cv2 import time import ...

  7. visual studio制作代码片段

    使用 Visual Studio 的代码片段功能,我们可以快速根据已有模板创建出大量常用的代码出来.ReSharper 已经自带了一份非常好用的代码片段工具,不过使用 ReSharper 创建出来的代 ...

  8. redis-cli中文乱码

    在开发过程中,需要验证redis缓存中的数据,发现redis存储的中文全是乱码,因为默认情况下redis不转义中文.如果在平常开发中想要看到中文内容,可以在使用redis-cli 命令登陆redis服 ...

  9. Python Linux系统管理与自动化运维

    Python Linux系统管理与自动化运维 前言 第1章Python语言与Linux系统管理1 1.1Python语言有多流行1 1.2Python语言为什么流行3 1.3Python语言有什么缺点 ...

  10. FinalShell—一体化服务器管理软件(SSH客户端)

    下面附上一些截图和官方连接: 官网:http://www.hostbuf.com/ FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运维工具,充分满足开发 ...