易百教程人工智能python修正-人工智能无监督学习(聚类)
无监督机器学习算法没有任何监督者提供任何指导。 这就是为什么它们与真正的人工智能紧密结合的原因。
在无人监督的学习中,没有正确的答案,也没有监督者指导。 算法需要发现用于学习的有趣数据模式。
什么是聚类?
基本上,它是一种无监督学习方法,也是用于许多领域的统计数据分析的常用技术。 聚类主要是将观测集合划分为子集(称为聚类)的任务,以同一聚类中的观测在一种意义上相似并且与其他聚类中的观测不相似的方式。 简而言之,可以说聚类的主要目标是根据相似性和不相似性对数据进行分组。
例如,下图显示了不同群集中的类似数据 -

数据聚类算法
以下是数据聚类的几种常用算法 -
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修正-人工智能无监督学习(聚类)的更多相关文章
- 易百教程人工智能python修正-人工智能监督学习(分类)
		
分类技术或模型试图从观测值中得出一些结论. 在分类问题中,我们有分类输出,如“黑色”或“白色”或“教学”和“非教学”. 在构建分类模型时,需要有包含数据点和相应标签的训练数据集. 例如,如果想检查图像 ...
 - 易百教程人工智能python修正-人工智能监督学习(回归)
		
回归是最重要的统计和机器学习工具之一. 我们认为机器学习的旅程从回归开始并不是错的. 它可以被定义为使我们能够根据数据做出决定的参数化技术,或者换言之,允许通过学习输入和输出变量之间的关系来基于数据做 ...
 - 易百教程人工智能python修正-人工智能数据准备-标记数据
		
我们已经知道,某种格式的数据对于机器学习算法是必需的. 另一个重要的要求是,在将数据作为机器学习算法的输入发送之前,必须正确标记数据. 例如,如果所说的分类,那么数据上会有很多标记. 这些标记以文字, ...
 - 易百教程人工智能python修正-人工智能NLTK性别发现器
		
在这个问题陈述中,将通过提供名字来训练分类器以找到性别(男性或女性). 我们需要使用启发式构造特征向量并训练分类器.这里使用scikit-learn软件包中的标签数据. 以下是构建性别查找器的Pyth ...
 - 易百教程人工智能python修正-人工智能数据准备-预处理数据
		
预处理数据 在我们的日常生活中,需要处理大量数据,但这些数据是原始数据. 为了提供数据作为机器学习算法的输入,需要将其转换为有意义的数据. 这就是数据预处理进入图像的地方. 换言之,可以说在将数据提供 ...
 - Python 机器学习实战 —— 无监督学习(上)
		
前言 在上篇<Python 机器学习实战 -- 监督学习>介绍了 支持向量机.k近邻.朴素贝叶斯分类 .决策树.决策树集成等多种模型,这篇文章将为大家介绍一下无监督学习的使用.无监督学习顾 ...
 - Python 机器学习实战 —— 无监督学习(下)
		
前言 在上篇< Python 机器学习实战 -- 无监督学习(上)>介绍了数据集变换中最常见的 PCA 主成分分析.NMF 非负矩阵分解等无监督模型,举例说明使用使用非监督模型对多维度特征 ...
 - 易百教程人工智能python补充-NLTK包
		
自然语言处理(NLP)是指使用诸如英语之类的自然语言与智能系统进行通信的AI方法. 如果您希望智能系统(如机器人)按照您的指示执行操作,希望听取基于对话的临床专家系统的决策时,则需要处理自然语言. N ...
 - MyBatis整合Spring MVC(易百教程)
		
MyBatis是ibatis的升级版,作为hibernate的老对手,它是一个可以自定义SQL.存储过程和高级映射的持久层框架.与Hibernate 的主要区别就是 Mybatis 是半自动化的,而 ...
 
随机推荐
- java中过滤器(Filter)与拦截器(Interceptor )区别
			
过滤器(Filter) Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是设置字符集.控制权限.控制转向.做一些业务逻辑判断等.其工作 ...
 - 南开大学2020年数学分析高等代数考研试题回忆版TeX排版
			
南开大学2020年数学分析高等代数考研试题回忆版TeX排版 220328[南开大学2020年高等代数考研试题回忆版] 220329[南开大学2020年数学分析考研试题回忆版]
 - SpringBoot(十七):SpringBoot2.1.1数据类型转化器Converter
			
什么场景下需要使用类型化器Converter? springboot2.1.1在做Restful Api开发过程中往往希望接口直接接收date类型参数,但是默认不加设置是不支持的,会抛出异常:系统是希 ...
 - Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍
			
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...
 - 判断mysql数据库表和表字段是否存在
			
1.判断数据库表是否存在, // mysqlSELECT table_name FROM information_schema.tables WHERE table_name=#{tableName, ...
 - Hadoop的三种调度器FIFO、Capacity Scheduler、Fair Scheduler(转载)
			
目前Hadoop有三种比较流行的资源调度器:FIFO .Capacity Scheduler.Fair Scheduler.目前Hadoop2.7默认使用的是Capacity Scheduler容量调 ...
 - Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
			
转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: ...
 - IntelliJ IDEA 安装使用 FindBugs 代码分析详述
			
1 下载 2 重启idea 选中文件,右键 附:一些常见的错误信息 Bad practice 代码中的一些坏习惯 Class names should start with an upper case ...
 - CentOS7使用yum安装redis
			
#下载fedora的epel仓库yum install epel-release #安装redis数据库yum install redis # 启动Redisservice redis start # ...
 - vbscript--FileSystemObject详解
			
https://blog.csdn.net/superbirds/article/details/6762748 FSO是FileSystemObject 或 Scripting.FileSystem ...