使用Python进行无监督学习

栏目: 数据库 · 发布时间: 7年前

内容简介:无监督学习是一种用于在数据中查找模式的机器学习技术。无监督算法给出的数据不带标记,只给出输入变量(X),没有相应的输出变量。在无监督学习中,算法自己去发现数据中有趣的结构。人工智能研究总监严乐群解释说,在监督学习中,系统试图从前面给出的例子中学习。(另一方面,在无监督学习中,系统试图直接从给出的例子中找到模式。)如果数据集被标记,它就会遇到监督问题,如果数据集没有标记,那么它就是一个监督问题。

无监督学习是一种用于在数据中查找模式的机器学习技术。无监督算法给出的数据不带标记,只给出输入变量(X),没有相应的输出变量。在无监督学习中,算法自己去发现数据中有趣的结构。 使用 <a href='https://www.codercto.com/topics/20097.html'>Python</a> 进行无监督学习

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

监督与无监督学习

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

使用Python进行无监督学习 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进行无监督学习

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

使用Python进行无监督学习

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

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()

使用Python进行无监督学习

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()

使用Python进行无监督学习

紫色: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()

使用Python进行无监督学习

更多无监督技术:

  • 主成分分析(PCA)

  • 异常检测

  • 自动编码

  • 深信仰网

  • Hebbian学习

  • 生成对抗网络(GAN)

  • 自组织地图


以上所述就是小编给大家介绍的《使用Python进行无监督学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

马云内部讲话

马云内部讲话

阿里巴巴集团 / 红旗出版社 / 2010-12 / 28.00元

马云的话有什么其妙的地方? 为什么员工会把自己的CEO当作偶像? 世界都处在迷茫期,他如何确立阿里巴巴的价值观? 他怎样给已经是富翁的员工寻找新的激情? 风暴袭来,他怎么克服内心的恐惧? 他在互联网合纵连横的动机何在?一起来看看 《马云内部讲话》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具