解决方案:一文简述多种无监督聚类算法的Python实现

优采云 发布时间: 2022-10-08 06:06

  解决方案:一文简述多种无监督聚类算法的Python实现

  Fromwardsdatascience,作者 Vihar Kurama,机器之心编译。

  本文简要介绍了各种无监督学习算法的 Python 实现,包括 K-means 聚类、层次聚类、t-SNE 聚类和 DBSCAN 聚类。

  无监督学习是一类用于在数据中寻找模式的机器学习技术。无监督学习算法使用的输入数据都是无标签的,也就是说数据只给出了输入变量(自变量X),没有给出对应的输出变量(因变量)。在无监督学习中,算法本身会发现数据中有趣的结构。

  人工智能研究的领军人物严乐存解释说,无监督学习能够自行学习,而无需明确告知他们是否做对了。这是实现真正人工智能的关键!

  监督学习与无监督学习

  在监督学习中,系统尝试从之前给出的示例中学习。(在无监督学习中,系统试图直接从给定示例中寻找模式。)因此,如果数据集被标记,它就是一个监督学习问题;如果数据没有被标记,这是一个未标记的问题。监督学习问题。

  上图是监督学习的一个例子,它使用回归技术来寻找各种特征之间的最佳拟合曲线。在无监督学习中,输入数据根据特征进行划分,根据数据所属的聚类进行预测。

  重要条款

  准备无监督学习所需的数据

  在本文中,我们使用 Iris 数据集进行初步预测工作。该数据集收录 150 条记录,每条记录由 5 个特征组成 - 花瓣长度、花瓣宽度、萼片长度、萼片宽度、花卉类别。花的类别包括 Iris Setosa、Iris VIrginica 和 Iris Versicolor。在本文中,提供了一种无监督算法,它具有鸢尾花的四个特征来预测它属于哪个类别。

  本文使用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 (cm)']

[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 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 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 2 2]

['setosa' 'versicolor' 'virginica']

  紫色:Setosa,绿色:杂色,*敏*感*词*:Virginica

  聚类分析

  在聚类分析中,数据被分成不同的组。简而言之,此步骤旨在将具有相似特征的组从整体数据中分离出来,并将它们分配到集群中。

  视觉示例:

  如上图,左图是未分类的原创数据,右图是聚类后的数据(根据数据本身的特点进行分类)。当给定一个要预测的输入时,它会根据它的特征来判断它属于哪个簇,并据此进行预测。

  K-means聚类的Python实现

  K-means 是一种迭代聚类算法,其目标是在每次迭代中找到一个局部最大值。该算法需要最初选择的簇数。由于我们知道这个问题涉及 3 类花,我们编写了一个算法,通过将参数“n_clusters”传递给 K-means 模型,将数据分为 3 类。现在,我们将三个数据点(输入)随机分组到三个集群中。基于每个点之间的质心距离,下一个给定的输入数据点将被划分为单独的集群。接下来,我们将重新计算所有簇的质心。

  每个聚类的质心是定义结果集的特征值集。研究质心的特征权重可以用来定性地解释每个集群代表哪种类型的群组。

  我们从 sklearn 库中导入 K-means 模型,拟合特征并进行预测。

  K-means算法的Python实现:

  # Importing Modules

from sklearn import datasets

from sklearn.cluster import KMeans

# Loading dataset

<p>

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)

</p>

  [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 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 2 1 2 1 1 1 1 2 1 1 1 1 1 1 2 2 1 1 1 1 2 1 2 1 2 1 1 2 2 1 1 1 1 1 2 1 1 1 1 2 1 1 1 2 1 1 1 2 1 1 2]

  层次聚类

  层次聚类,顾名思义,是一种可以构建层次聚类的算法。在这个算法开始时,每个数据点都是一个簇。然后,将两个最近的集群合并为一个。最终,当所有点都合并到一个簇中时,算法停止。

  层次聚类的实现可以使用树状图来演示。接下来,我们来看一个食品数据层次聚类的例子。数据集链接:/vihar/unsupervised-learning-with-python/master/seeds-less-rows.csv

  层次聚类的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(&#39;grain_variety&#39;))

# Extract the measurements as a NumPy array

samples = seeds_df.values

"""

Perform hierarchical clustering on samples using the

linkage() function with the method=&#39;complete&#39; keyword argument.

Assign the result to mergings.

"""

mergings = linkage(samples, method=&#39;complete&#39;)

"""

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-Means 和层次聚类的区别

  t-SNE聚类

  这是一种视觉无监督学习方法。t-SNE 是指 t 分布的随机邻居嵌入。它将高维空间映射到视觉二维或三维空间。具体来说,它将通过对相似对象建模与不同对象建模,以二维或三维数据点对高维空间中的对象进行建模。

  

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

  # 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,绿色:杂色,*敏*感*词*:Virginica

  在这里,具有 4 个特征(4 个维度)的 Iris 数据集被转换为 2D 空间并显示在 2D 图像中。类似地,t-SNE 模型可用于具有 n 个特征的数据集。

  DBSCAN 聚类

  DBSCAN(基于密度的噪声空间聚类)是一种流行的聚类算法,用于替代预测分析中的 K-means 算法。它不需要运行输入集群的数量。但是,您需要调整其他两个参数。

  scikit-learn 对 DBSCAN 算法的实现提供了默认的“eps”和“min_samples”参数,但一般情况下,用户需要调整它们。参数“eps”是两个数据点被认为在同一个邻居中的最大距离。参数“min_samples”是邻居中同一簇中的最小数据点数。

  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=&#39;r&#39;, marker=&#39;+&#39;)

elif dbscan.labels_[i] == 1:

c2 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c=&#39;g&#39;, marker=&#39;o&#39;)

elif dbscan.labels_[i] == -1:

c3 = plt.scatter(pca_2d[i, 0], pca_2d[i, 1], c=&#39;b&#39;, marker=&#39;*&#39;)

plt.legend([c1, c2, c3], [&#39;Cluster 1&#39;, &#39;Cluster 2&#39;, &#39;Noise&#39;])

plt.title(&#39;DBSCAN finds 2 clusters and Noise&#39;)

plt.show()

  更多无监督学习技术:

  原文链接:/unsupervised-learning-with-python-173c51dc7f03

  操作方法:小游戏网站程序,带自动采集系统

  官方网站 []

  版本 8 演示

  -------------------------------------------------

  888小游戏第8版介绍:

  1 asp+ajax写数据库:支持mssql2000/mssql2005

  2 全站用div+css编写,支持ie6 ie7 ie8 火狐浏览器-----遵循web.2.0标准,页面代码少,易上手收录

  3 全自动采集7k7k,有13426个游戏(18.6G),数据可以盗链或者本地,盗链只需要908M空间

  

  4 新闻信息发布功能-------每天更新一条信息,让你网站收录更多,排名更高

  5个会员功能----------------------------采集、积分、最近玩过的游戏、会员信息

  6 用户积分功能------------推荐注册、登录网站、浏览网页均可获得积分,提高用户积极性

  7.全站生成html,且为文件夹形式,全拼音url,排名较高,生成路径可自定义

  8 手动上传flash小游戏功能,同时数据自动采集更新,可手动添加数据

  9 网站信息全后台管理方便---------------如:网站信息、统计代码、广告,便于管理

  10 繁简中文互转功能 ---------- 满足台港客户对繁体字的需求

  11 评分、喜欢、评论

  

  · 以盈利为导向的网站-----页面设置多个广告位,广告位布局合理吸引点击,全部后台管理

  · 以SEO优化为先导——如生成文件夹、自定义自制文件夹、后台设置关键词

  · 注重用户体验--功能包括[每个人都在玩]、[用户玩过的游戏]、[评论过的游戏]

  · 基于强大的功能-----增加了许多实用功能

  · 为了管理方便-----全后台智能管理,即使不懂电脑也可以管理这个网站

  -------------------------------------------------- -----------------

  售价600元

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线