无监督学习是指在不使用标注的训练数据的情况下构建机器学习模型的过程。无监督学习在不同的研究领域中得到应用,包括市场细分,股票市场,自然语言处理,计算机视觉等。

当我们给训练数据贴上标签后,算法就会根据这些标签对数据进行分类。在现实世界中,我们可能并不总是能够访问有标签的数据。有时候,我们有很多数据,我们需要以某种方式对它们进行分类。这就是无监督学习发挥作用的地方。无监督学习算法试图建立学习模型,使用一些相似性度量在给定的数据集中找到子组。

我们来看看如何在无监督学习中解决学习问题。当我们有一个没有任何标签的数据集时,我们假设数据是由于以某种方式控制分布的潜在变量而生成的。然后,学习过程可以从各个数据点开始以分层方式进行。我们可以为数据构建更深层次的表示。

使用K-Means算法聚类数据

聚类是最流行的无监督学习技术之一。该技术用于分析数据并在该数据中查找聚类。为了找到这些聚类,我们使用某种相似性度量,如欧几里德距离,来找到子群。该相似性度量可以估计集群的紧密度。我们可以说聚类是将数据组织成子元素的过程,子元素的元素彼此相似。

我们的目标是确定数据点的内在属性,使它们属于同一个子组。没有适用于所有情况的通用相似性度量标准。例如,我们可能对查找每个子组的代表性数据点感兴趣,或者对查找数据中的异常值感兴趣。根据具体情况,我们最终会选择适当的指标。

K-Means算法是一种著名的数据聚类算法。为了使用该算法,我们需要假设集群的数量是预先知道的。然后,我们使用不同的数据属性将数据分割成K个子组。我们首先确定集群的数量,然后根据它对数据进行分类。这里的核心思想是我们需要在每次迭代时更新这些K质心的位置。我们继续迭代,直到我们将质心放在最佳位置。

我们可以看到质心的初始位置在算法中起着重要作用。这些质心应该以巧妙的方式放置,因为这会直接影响结果。一个好的策略是尽可能地放在远离彼此的地方。基本的K-Means算法随机地放置这些质心,K-Means++从数据点的输入列表中算法地选择这些点。它试图将初始质心彼此远离,以便它快速收敛。然后,我们遍历训练数据集,并将每个数据点分配给最近的质心。

一旦我们遍历整个数据集,我们就说第一次迭代结束了。我们根据初始化的质心对点进行了分组。我们现在需要根据在第一次迭代结束时获得的新聚类重新计算质心的位置。一旦我们获得了新的K的质心集,我们再次重复该过程,我们遍历数据集并将每个点分配给最近的质心。

当我们不断重复这些步骤时,质心继续移动到它们的平衡位置。经过一定次数的迭代后,质心不再改变它们的位置。这意味着我们到达了质心的最终位置。

让我们对二维数据应用K-Means聚类,看看它是如何工作的。

创建一个新的Python文件并导入以下库:

import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import KMeans from sklearn import metrics

从文件加载输入数据:

# Load input data X = np.loadtxt('data_clustering.txt', delimiter=',')

在应用K-Means算法之前,我们需要定义集群的数量:

num_clusters = 5

可视化输入数据以查看扩展的外观:

# Plot input data plt.figure() plt.scatter(X[:,0], X[:,1], marker='o', facecolors='none',  edgecolors='black', s=80) x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 plt.title('Input data') plt.xlim(x_min, x_max) plt.ylim(y_min, y_max) plt.xticks(()) plt.yticks(())

我们可以直观地看到这些数据中有五个组。K-Means使用初始化参数创建对象。init参数表示初始化方法以选择集群的初始中心。我们使用k-means++以更智能的方式选择这些中心,而不是随机选择它们。这保证了算法快速收敛。n_clusters参数指的是集群的数量。n_init参数是指算法在决定最佳结果之前应运行的次数:

# Create KMeans object kmeans = KMeans(init='k-means++', n_clusters=num_clusters, n_init=10)

使用输入数据训练K-Means模型:

# Train the KMeans clustering model kmeans.fit(X)

为了可视化边界,我们需要创建一个点网格并在所有这些点上评估模型。让我们定义这个网格的步长:

# Step size of the mesh step_size = 0.01

我们定义点网格并确保我们覆盖输入数据中的所有值:

# Define the grid of points to plot the boundaries x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 x_vals, y_vals = np.meshgrid(np.arange(x_min, x_max, step_size),  np.arange(y_min, y_max, step_size))

使用经过训练好的K-Means模型预测网格上所有点的输出:

# Predict output labels for all the points on the grid output = kmeans.predict(np.c_[x_vals.ravel(), y_vals.ravel()])

绘制所有输出值并为每个区域着色:

# Plot different regions and color them output = output.reshape(x_vals.shape) plt.figure() plt.clf() plt.imshow(output, interpolation='nearest',  extent=(x_vals.min(), x_vals.max(),  y_vals.min(), y_vals.max()),  cmap=plt.cm.Paired,  aspect='auto',  origin='lower')

在这些彩色区域上叠加输入数据点:

# Overlay input points plt.scatter(X[:,0], X[:,1], marker='o', facecolors='none',  edgecolors='black', s=80)

绘制使用K-Means算法获得的聚类的中心:

# Plot the centers of clusters cluster_centers = kmeans.cluster_centers_ plt.scatter(cluster_centers[:,0], cluster_centers[:,1],  marker='o', s=210, linewidths=4, color='black',  zorder=12, facecolors='black')  x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 plt.title('Boundaries of clusters') plt.xlim(x_min, x_max) plt.ylim(y_min, y_max) plt.xticks(()) plt.yticks(()) plt.show()

如果您运行代码,您将看到两个屏幕截图。第一个屏幕截图是输入数据:

第二个屏幕截图表示使用K-Means获得的边界:

每个集群中心的黑色圆圈表示该集群的质心。

使用Mean Shift算法估计簇的数量

Mean Shift是一种用于无监督学习的强大算法。它是一种经常用于聚类的非参数算法。它是非参数的,因为它没有对基础分布做任何假设。这与参数技术形成对比,在参数技术中我们假设基础数据遵循标准概率分布。Mean Shift在对象跟踪和实时数据分析等领域中找到了很多应用。

在Mean Shift算法中,我们将整个特征空间视为概率密度函数。我们从训练数据集开始,并假设它们是从概率密度函数中采样的。在此框架中,集群对应于底层分布的局部最大值。如果存在K个集群,那么在基础数据分布中存在K个峰值,并且Mean Shift将识别这些峰值。

Mean Shift的目标是识别质心的位置。对于训练数据集中的每个数据点,它定义了一个围绕它的窗口。然后,计算这个窗口的质心并将位置更新为此新质心。然后,它通过在其周围定义一个窗口来重复此新位置的过程。随着我们继续这样做,我们越来越接近集群的峰值。每个数据点将移向它所属的集群。该运动朝向更高密度的区域。

我们不断将质心(也称为平均值)移向每个集群的峰值。因为我们一直在移动平均值,因此称为Mean Shift!我们一直这样做,直到算法收敛,此时质心不再移动。

让我们看看如何使用Mean Shift来估计给定数据集中的最佳聚类数。

创建一个新的Python文件并导入以下库:

import numpy as np import matplotlib.pyplot as plt from sklearn.cluster import MeanShift, estimate_bandwidth from itertools import cycle

加载输入数据:

# Load data from input file X = np.loadtxt('data_clustering.txt', delimiter=',')

估计输入数据的带宽。带宽是Mean Shift算法中使用的基础核密度估计过程的参数。带宽会影响算法的整体收敛速度以及我们最终将最终得到的集群数量。因此这是一个至关重要的参数。如果带宽很小,则可能导致群集太多,而如果值很大,则会合并不同的群集。

quantile参数会影响带宽的估算方式。分位数的较高值将增加估计的带宽,从而导致较少数量的群集:

# Estimate the bandwidth of X bandwidth_X = estimate_bandwidth(X, quantile=0.1, n_samples=len(X))

让我们使用估计带宽训练Mean Shift聚类模型:

# Cluster data with MeanShift meanshift_model = MeanShift(bandwidth=bandwidth_X, bin_seeding=True) meanshift_model.fit(X)

提取所有集群的质心:

# Extract the centers of clusters cluster_centers = meanshift_model.cluster_centers_ print('Centers of clusters:', cluster_centers)

提取集群数量:

# Estimate the number of clusters labels = meanshift_model.labels_ num_clusters = len(np.unique(labels)) print("Number of clusters in input data =

无监督学习与有监督学习的本质区别是什么_深度学习使用无监督学习检测模式...相关推荐

  1. 无监督学习与有监督学习的本质区别是什么_人工智能中的无监督学习

    这些误解中的许多原因都归因于这些形式的统计AI的名称 例如,有些人认为仅将机器学习用作反馈循环就是强化学习.其他人则认为,无人监督的全自动机器学习应用程序就是无监督学习的例子,但是这些类别的真正区别在 ...

  2. 【人工智能与深度学习】自我监督学习 - ClusterFit 和 PIRL

    [人工智能与深度学习]自我监督学习 - ClusterFit 和 PIRL "前置"任务中到底差了什么东西呢? 到底我们想在预先训练过的模型中想要什么「特征」呢? 物以类聚法:提高 ...

  3. 超酷炫!Facebook用深度学习和弱监督学习绘制全球精准道路图

    作者 | Saikat Basu等 译者 | 陆离 责编 | 夕颜 出品 | AI科技大本营(ID: rgznai100) 导读:现如今,即使可以借助卫星图像和绘制软件,创建精确的道路图也依然是一个费 ...

  4. 深度学习与无人车导论_深度学习导论

    深度学习与无人车导论 改变游戏规则 图片的信誉归功于: https : //www.digitalocean.com/ 深度学习 已经成为许多新应用程序的主要驱动力,是时候真正了解为什么会这样了. 我 ...

  5. 无监督学习与有监督学习的本质区别是什么_吴恩达老师课程笔记系列第三节-无监督学习定义...

    第三节-无监督学习定义 我们将介绍第二种主要的机器学习问题.叫做无监督学习. 上个课程中,已经介绍了监督学习.回想当时的数据集,如图表所示,这个数据集中每条数据都已经标明是阴性或阳性,即是良性或恶性肿 ...

  6. 【深度学习】半监督学习入门:伪标签学习和无监督SVM

    一.半监督学习 1-1.什么是半监督学习 让学习器不依赖外界交互.自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning). 要利用未标记样本,必然要做一 ...

  7. 《神经网络与深度学习》-无监督学习

    无监督学习 1. 无监督特征学习 1.1 主成分分析 1.2 稀疏编码 1.2.1 训练方法 1.2.2 稀疏编码的优点 1.3 自编码器 1.4 稀疏自编码器 1.5 堆叠自编码器 1.6 降噪自编 ...

  8. 无监督学习与有监督学习的本质区别是什么_干货关于无监督学习你了解多少?...

    最近小数在学习无监督学习的一些基础知识和应用场景,今天就跟大家分享一下. 无监督学习的概念术语是:推断描述"未标记"数据的分布与关系的机器学习任务,即给予学习算法的事例是未被标记的 ...

  9. 【深度学习】有监督学习、无监督学习、半监督学习

    本文目录 有监督学习(Suspervised Learning) 常见的有监督学习 无监督学习(Unsupervised Learning) 常见的无监督学习 半监督学习(Semi-supervise ...

  10. 【深度学习】半监督学习入门:Mean teachers

最新文章

  1. 使用nmap-converter将nmap扫描结果XML转化为XLS实战
  2. 题目3:文本文件单词的检索与计数(实验准备)
  3. no module named social_django
  4. Flask学习 一 基本结构
  5. c语言 long 用法,C语言中long long的用法
  6. OC 中property属性详解(assign , retain , copy , strong,weak,readonly , readwrite , atomic , nonatomic)
  7. 10 个学习iOS开发的最佳网站(转)
  8. 假如正则从来没来过,我们该如何去匹配一个字符串?
  9. matlab meshlab,MeshLab下载
  10. C4D-学习笔记-3-建模+渲染
  11. 【fences下载】
  12. spring-test部分翻译
  13. 计算机不认2t移动硬盘,win7系统无法识别2T希捷的硬盘的解决方法
  14. 再谈Hibernate the owing session was closed
  15. 什么是javaweb开发?
  16. 加密软件 PGP安装教程。
  17. RAID 0 1 5 10特点以及工作原理
  18. DB2表空间操作详解
  19. threejs知识点:1.模型分析
  20. Multisim的使用及面包板

热门文章

  1. Oracle Telnet 1521 失败
  2. 机器学习初学者入门实践:怎样轻松创造高精度分类网络
  3. C#(winform)为button添加背景图片,并去掉各种边框
  4. 阿里云数据库使用初体验
  5. shell中的比较与测试
  6. 以德服人——合格的产品经理
  7. 设置dedecms为动态页面,设置dedecms为静态页面,首页动态,列表动态和文章动态
  8. Unbuntu 出现无法解析或打开软件包的列表或是状态文件的解决办法
  9. rpm方式安装mysql5.7_centos下rpm方式安装mysql5.7
  10. python中间件有哪些_python_21(Django中间件)