使用Python进行无监督学习

监督学习是一种用于在数据中查找模式的机器学习技术。无监督算法给出的数据不带标记,只给出输入变量(X),没有相应的输出变量。在无监督学习中,算法自己去发现数据中有趣的结构。

人工智能研究总监严乐群解释说,监督学习教学机器能够自主学习,而不需要被明确告知它们所做的一切是对是错,这是实现真正人工智能的关键。

监督与无监督学习

监督学习中,系统试图从前面给出的例子中学习。(另一方面,在无监督学习中,系统试图直接从给出的例子中找到模式。)如果数据集被标记,它就会遇到监督问题,如果数据集没有标记,那么它就是一个监督问题。

SRC

左边的图像是监督学习的一个例子;我们使用回归技术来寻找特征之间的最佳匹配线。而在无监督学习中,输入是基于特征分离的,预测是基于它所属的集群。

重要术语

特性:用于预测的输入变量。

预测:当提供一个输入示例时,模型s的输出。

示例:数据集的一行。示例包含一个或多个特性,可能还有一个标签。

标签:特性的结果。

为无监督学习准备数据

在本文中,我们使用Iris数据集进行第一次预测。该数据集包含一组150条记录,包含5个属性:花瓣长度、花瓣宽度、萼片长度、萼片宽度和类别。蝴蝶花,蝴蝶花和花色蝴蝶花是三个等级。对于我们的无监督算法,我们给出虹膜花的这四个特征,并预测它属于哪一类。

我们使用Python中的sklearn库加载Iris数据集,使用matplotlib实现数据可视化。下面是用于研究数据集的代码片段。

# Importing Modules from sklearn import datasets import matplotlib.pyplot as plt 
# Loading dataset iris_df = datasets.load_iris() 
# Available methods on dataset print(dir(iris_df)) 
# Features print(iris_df.feature_names) 
# Targets print(iris_df.target) 
# Target Names print(iris_df.target_names) label = {0: 'red', 1: 'blue', 2: 'green'} 
# Dataset Slicing x_axis = iris_df.data[:, 0]  # Sepal Length y_axis = iris_df.data[:, 2]  # Sepal Width 
# Plotting plt.scatter(x_axis, y_axis, c=iris_df.target) plt.show()
['DESCR','data','feature_names','target','target_names'] 
['sepal length(cm)','sepal width(cm)','petal length(cm)','petal width(厘米)']
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2]
['setosa''versicolor''virginica']

紫罗兰:濑户草,绿色:杂色,黄色:弗吉尼亚

在上面的图像中,左边的图像是未分类的原始数据,右边的图像是聚类的(根据数据的特征进行分类)。当给定一个要预测的输入时,它会根据它的特性检查它所属的集群,然后进行预测。

Python中的K-Means聚类

K均值是一种迭代聚类算法,其目标是在每次迭代中寻找局部最大值。选择初始所需的集群数量。因为我们知道有3个类,所以我们编写算法将数据分组到3个类中,方法是将参数n个集群传递到KMeans模型中。现在随机将三个点(输入)分配到三个集群中。根据每个点之间的质心距离,下一个给定的输入被分离成受尊重的集群。现在,重新计算所有集群的质心。

集群的每个质心是定义结果组的特征值的集合。质心特征权值的检验可以定性地解释每个聚类所代表的组的类型。

从sklearn库中导入KMeans模型,进行特征拟合和预测。

K是Python中的实现。

# Importing Modules from sklearn import datasets from sklearn.cluster import KMeans 
# Loading dataset iris_df = datasets.load_iris() 
# Declaring Model model = KMeans(n_clusters=3) 
# Fitting Model model.fit(iris_df.data) 
# Predicitng a single input predicted_label = model.predict([[7.2, 3.5, 0.8, 1.6]]) 
# Prediction on the entire data all_predictions = model.predict(iris_df.data) 
# Printing Predictions print(predicted_label) print(all_predictions)
[0] 
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 1 2 1 1 1 1 2 1 1 1 1 1 2 2 1 1 1 1 2 1 1 2 1 1 2 2 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]

分层聚类

分层聚类,顾名思义,是一种构建集群层次结构的算法。该算法首先将所有数据分配给自己的集群。然后将两个最近的集群连接到同一个集群中。最后,当只剩下一个集群时,该算法就结束了。

利用树状图可以显示层次聚类的完成情况。现在让我们看一个谷物数据分层聚类的例子。数据集可以在这里找到。

Python中的分层集群实现。

# Importing Modules from scipy.cluster.hierarchy import linkage, dendrogram import matplotlib.pyplot as plt import pandas as pd 
# Reading the DataFrame seeds_df = pd.read_csv(    "https://raw.githubusercontent.com/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv") 
# Remove the grain species from the DataFrame, save for later varieties = list(seeds_df.pop('grain_variety')) 
# Extract the measurements as a NumPy array samples = seeds_df.values 
""" Perform hierarchical clustering on samples using the linkage() function with the method='complete' keyword argument. Assign the result to mergings. """ mergings = linkage(samples, method='complete') 
""" Plot a dendrogram using the dendrogram() function on mergings, specifying the keyword arguments labels=varieties, leaf_rotation=90, and leaf_font_size=6. """ dendrogram(mergings,           labels=varieties,           leaf_rotation=90,           leaf_font_size=6,           ) 
plt.show()

K均值和分层聚类之间的差异

  • 层次聚类不能很好地处理大数据,K表示聚类可以。这是因为K均值的时间复杂度是线性的,即O(n),而层次聚类时间复杂度是二次的,即O(n2)。

  • 在K均值聚类中,当我们从任意选择的聚类开始时,多次运行该算法生成的结果可能会有所不同。而结果在层次聚类中是可重复的。

  • 当星系团的形状是超球形(如二维的圆形,三维的球形)时,发现K 代表工作良好。

  • K-Means不允许有噪声的数据,而在分层中我们可以直接使用有噪声的数据集进行聚类

    t-SNE聚类

它是一种无监督的可视化学习方法。t-SNE代表t分布随机邻居嵌入。它将高维空间映射到可以可视化的二维或三维空间。具体地说,它通过一个二维或三维点对每个高维物体进行建模,其方法是用附近的点对相似的物体建模,用高概率的远点对不同的物体建模。

Python中Iris数据集的t-SNE聚类实现。

# Importing Modules from sklearn import datasets from sklearn.manifold import TSNE import matplotlib.pyplot as plt 
# Loading dataset iris_df = datasets.load_iris() 
# Defining Model model = TSNE(learning_rate=100) 
# Fitting Model transformed = model.fit_transform(iris_df.data) 
# Plotting 2d t-Sne x_axis = transformed[:, 0] y_axis = transformed[:, 1] 
plt.scatter(x_axis, y_axis, c=iris_df.target) plt.show()

紫色:Setosa,绿色:Versicolor,黄色:Virginica

这里,由于Iris数据集具有四个特征(4d),将其转换成二维图表示。类似地,t-SNE模型可以应用于具有n个特征的数据集。

DBSCAN群集

DBSCAN(基于密度的噪声应用空间聚类)是一种常用的聚类算法,用于替代预测分析中的k均值。它不需要您输入集群的数量才能运行。但作为交换,您必须调优其他两个参数

scikit-learn实现为eps和min示例参数提供了默认值,但是通常需要对它们进行调优。eps参数是在同一个邻域内需要考虑的两个数据点之间的最大距离。最小样本参数是一个邻域内被认为是一个集群的数据点的最小数量。

DBSCAN在Python中的聚类

# Importing Modules from sklearn.datasets import load_iris import matplotlib.pyplot as plt from sklearn.cluster import DBSCAN from sklearn.decomposition import PCA 
# Load Dataset iris = load_iris() 
# Declaring Model dbscan = DBSCAN() 
# Fitting dbscan.fit(iris.data) 
# Transoring Using PCA pca = PCA(n_components=2).fit(iris.data) pca_2d = pca.transform(iris.data) 
# Plot based on Class for i in range(0, pca_2d.shape[0]):    if dbscan.labels_[i] == 0:        c1 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='r', marker='+')    elif dbscan.labels_[i] == 1:        c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='g', marker='o')    elif dbscan.labels_[i] == -1:        c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c='b', marker='*') 
plt.legend([c1, c2, c3], ['Cluster 1', 'Cluster 2', 'Noise']) plt.title('DBSCAN finds 2 clusters and Noise') plt.show()

更多无监督技术:

  • 主成分分析(PCA)

  • 异常检测

  • 自动编码

  • 深信仰网

  • Hebbian学习

  • 生成对抗网络(GAN)

  • 自组织地图

贪心科技
贪心科技

贪心科技是国内首家AI和大数据课程为主的自适应学习平台。我们追求最精炼的AI教育内容和个人量身定制的课堂。我们鼓励大家拥有“贪心精神”:对知识不断的渴望,对现状不满希望进步的愿望。贪心科技,满足贪心的你。

入门Python无监督学习机器学习k-means层次聚类
2
相关数据
非监督学习技术

非监督式学习是一种机器学习的方式,并不需要人力来输入标签。它是监督式学习和强化学习等策略之外的一种选择。在监督式学习中,典型的任务是分类和回归分析,且需要使用到人工预先准备好的范例(base)。一个常见的非监督式学习是数据聚类。在人工神经网络中,自组织映射(SOM)和适应性共振理论(ART)则是最常用的非监督式学习。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

时间复杂度技术

在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输入,它至多需要 5n3 + 3n 的时间运行完毕,那么它的渐近时间复杂度是 O(n3)。

异常检测技术

在数据挖掘中,异常检测(英语:anomaly detection)对不符合预期模式或数据集中其他项目的项目、事件或观测值的识别。 通常异常项目会转变成银行欺诈、结构缺陷、医疗问题、文本错误等类型的问题。 异常也被称为离群值、新奇、噪声、偏差和例外。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

大数据技术技术

大数据,又称为巨量资料,指的是传统数据处理应用软件不足以处理它们的大或复杂的数据集的术语。

层次聚类技术

层次聚类通过对数据集在不同层次进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合(agglomerative)策略,也可采用“自顶向下”的分拆(divisive)策略。“自底而上”的算法开始时把每一个原始数据看作一个单一的聚类簇,然后不断聚合小的聚类簇成为大的聚类。“自顶向下”的算法开始把所有数据看作一个聚类,通过不断分割大的聚类直到每一个单一的数据都被划分。

主成分分析技术

在多元统计分析中,主成分分析(Principal components analysis,PCA)是一种分析、简化数据集的技术。主成分分析经常用于减少数据集的维数,同时保持数据集中的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。由于主成分分析依赖所给数据,所以数据的准确性对分析结果影响很大。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

推荐文章
暂无评论
暂无评论~