曾 俊

曾 俊

1660301700

使用 MLIB 进行 K-Means 聚类简介

K-means 聚类无监督 机器学习支持的算法之一,因此在继续使用 K-means 之前,让我们了解无监督学习方法的背景知识。在这种方法中,与监督方法不同,我们没有预定义的标签,因此我们不绘制预测,而是从中生成集群/组,以便可以根据提供给模型的特征对数据进行分割。

K-Means 聚类图片来源:Bookdown

K-Means 聚类遵循什么方法?

如前所述,该算法是无监督学习的一部分,因此我们将根据不同数量的集群对数据进行分割,而不是进行预测。K-means 遵循一些重要的数学步骤:

步骤 1:选择簇数,有几种方法可以选择合适的簇数,肘法领域知识。

第 2 步:分配 K 个点,或者我们也可以说从数据集中随机分配质心。

第 3 步:在最后一步中,每个 K 点将靠近其最近的质心进行调整,最终将形成集群/组

好的!理论已经讲完了,现在让我们动手在 Spark 的官方聚类数据集上实现 K-means 聚类。虽然这个数据集非常小而且很奇特,但我们可以使用 PySpark 的 MLIB 解释 K-means 聚类的每个概念。

启动 Spark 对象

在任何与 spark 相关的项目中,这一步是我们必须做的第一件事,即创建和实例化 PySpark 环境,以便我们可以访问实现K-means 聚类算法所需的所有实用程序和函数。

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('intro_cluster').getOrCreate()
spark

输出:

火花对象 |  K-Means 聚类

推断:首先是从 PySpark 的 SQL 模块调用 SparkSession 对象,然后我们使用 builder() 函数合并的 getOrCreate() 函数创建了 intro_cluster 会话。

from pyspark.ml.clustering import KMeans

推理:在 PySpark 中,我们从分类类中导入所有分类算法,如决策树分类器、GBT 分类器、随机森林分类器和逻辑回归,就像我们从聚类类中导入KMeans对象一样。

读取数据集

如前所述,这是spark 在其官方 GitHub 存储库中提供的数据集,该数据集非常,因此不应期望得到真实世界的结果,但肯定有助于理解实际实现 k 的概念- 表示聚类。

dataset_kmeans = spark.read.format("libsvm").load("sample_kmeans_data.txt")
dataset_kmeans.show()

输出:

推论:这里注意到我们是在将数据集转换为lib-svm格式后读取数据集,因为数据集是lib-svm的形式,然后它变得容易加载。稍后我们将使用show 函数查看数据集。

dataset_kmeans.head(5)

输出:

[Row(label=0.0, features=SparseVector(3, {})),
 Row(label=1.0, features=SparseVector(3, {0: 0.1, 1: 0.1, 2: 0.1})),
 Row(label=2.0, features=SparseVector(3, {0: 0.2, 1: 0.2, 2: 0.2})),
 Row(label=3.0, features=SparseVector(3, {0: 9.0, 1: 9.0, 2: 9.0})),
 Row(label=4.0, features=SparseVector(3, {0: 9.1, 1: 9.1, 2: 9.1}))]

推论:还有另一种方法可以偷看数据集,即返回所有列名及其对应值的head 函数。请注意,要素作为SparseVector返回。

dataset_kmeans.printSchema()

输出:

root
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)

推论:如果想知道数据集的 Schema 是什么样的,可以使用print schema () 函数。这里它返回了两列,一列是标签,另一列是向量格式的特征列。

执行

正如我们所知,我们不会在 K-means 中预测任何标签,而是我们过去常常创建一个集群以尽可能最好的方式分割数据,但这里是复杂的部分,因为没有 100% 的最佳方法来找到最好的集群的数量,一个应该有惊人的领域知识或肘法,有时为了更简单的问题,我们可以试一试hit and trial 方法,这就是我们要在这里做的:

  1. 当 clusters = 2时,即数据集将分为两组。
  2. 当 clusters = 3时,即数据集将被分成三组。

当集群 = 2

kmeans_2_cluster = KMeans().setK(2).setSeed(1)

推论:上面的代码是我们如何通过set()方法设置簇数的方式。请注意,我们正在使用resolved ()函数以及 KMeans 来为每个组选择数据的随机数,因此如果我们设置一个适当的数字,那么每次执行后它将采用相同的随机分布

first_model = kmeans_2_cluster.fit(dataset_kmeans)

推理:现在我们正在拟合 KMeans 模型,即基于可用数据集训练模型。请注意,我们正在为训练提供完整的数据,因为我们没有标签,因此拆分数据集没有意义

predictions_first_model = first_model.transform(dataset_kmeans)
predictions_first_model.show()

输出:

输出

推论:现在是时候做一些预测了(这里让我们根据输入数据做一个相关的集群),为此,我们在整个数据集上使用了变换方法。当我们看到输出时,我们可以看到有两组,一组标记为 1 ,另一组标记为 2

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

推论:建立模型是一回事,测试和评估它更重要,因为它可以让我们考虑这个模型是好用还是需要任何改变。因此,我们使用聚类评估器对象来获得一些 Kmeans 评估方法。

silhouette_2_clusters = evaluator.evaluate(predictions_first_model)
print("Silhouette evaluation results = " + str(silhouette_2_clusters))

输出:

Silhouette evaluation results = 0.9997530305375207

推论:轮廓是一种统计方法,用于检查数据集群内的一致性。它的系数值范围在[-1,1]之间,系数越正,数据点在该特定簇内的越多越好。

two_centroid = first_model.clusterCenters()
print("Center of clusters: ")
for c in two_centroid:
    print(c)

输出:

Center of clusters: 
[9.1 9.1 9.1]
[0.1 0.1 0.1]

推论:了解每个集群的中心/质心非常重要,因为它们有助于我们了解它们彼此之间的可分离性。在输出中,可以看到有两个集群,因为我们选择 K(集群)的数量为2

当集群 = 3

kmeans_3_clusters = KMeans().setK(3).setSeed(1)
second_model = kmeans_3_clusters.fit(dataset_kmeans)
predictions_second_model = second_model.transform(dataset_kmeans)

推论:现在是时候检查当我们选择拥有三个集群时我们的模型将如何执行,因为这个过程几乎相同,我们将K 值设置为 33 个组,然后我们将拟合/训练完整的数据(我已经讨论过的原因)最后绘制预测变换方法来拯救。

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

silhouette_3_clusters = evaluator.evaluate(predictions_second_model)
print("Silhouette evaluation results = " + str(silhouette_3_clusters))

输出:

Silhouette evaluation results = 0.6248737134600261

推论:在这里,如果我们比较集群为 2 时的轮廓距离,那么可以得出结论,我们应该只使用 2 个集群,因为它会给我们更好的结果。

three_centroid = second_model.clusterCenters()
print("Center of clusters: ")
for c in three_centroid:
    print(c)

输出:

Center of clusters: 
[9.1 9.1 9.1]
[0.05 0.05 0.05]
[0.2 0.2 0.2]

推论:用3-K 值构建模型的唯一目的是比较两者并选择可能的最佳 K 值,在这里我们可以看到一个三质心值。

K-Means 聚类结论

我们正处于最后阶段🙂。在本节中,我们将通过实际实施来完成本文迄今为止所做的一切。从介绍 K-means 算法及其操作方式开始,我们通过比较两种不同的情况,选择了最好的一种。

  1. 首先,我们讨论K-Means 算法的工作原理,然后建立一个 PySpark 平台,以便我们可以实现它并获得实践经验。
  2. 然后我们从 PySpark 文档示例中读取了官方数据集,并分析了 Schema并对其有一个基本的了解。
  3. 最后,我们在两种情况下(当集群为 2 和 3时)构建 K-means 模型,在查看评估结果后,我们得出结论,对于该特定数据,当集群为 2 时,它的表现更好

这是本文的回购链接。我希望你喜欢我关于 MLIB 中树方法简介的文章。如果您有任何意见或问题,请在下方评论。

资料来源:https ://www.analyticsvidhya.com/blog/2022/07/introduction-to-k-means-clustering-using-mlib/

#mlib 

What is GEEK

Buddha Community

使用 MLIB 进行 K-Means 聚类简介
Hertha  Mayer

Hertha Mayer

1595334123

Authentication In MEAN Stack - A Quick Guide

I consider myself an active StackOverflow user, despite my activity tends to vary depending on my daily workload. I enjoy answering questions with angular tag and I always try to create some working example to prove correctness of my answers.

To create angular demo I usually use either plunker or stackblitz or even jsfiddle. I like all of them but when I run into some errors I want to have a little bit more usable tool to undestand what’s going on.

Many people who ask questions on stackoverflow don’t want to isolate the problem and prepare minimal reproduction so they usually post all code to their questions on SO. They also tend to be not accurate and make a lot of mistakes in template syntax. To not waste a lot of time investigating where the error comes from I tried to create a tool that will help me to quickly find what causes the problem.

Angular demo runner
Online angular editor for building demo.
ng-run.com
<>

Let me show what I mean…

Template parser errors#

There are template parser errors that can be easy catched by stackblitz

It gives me some information but I want the error to be highlighted

#mean stack #angular 6 passport authentication #authentication in mean stack #full stack authentication #mean stack example application #mean stack login and registration angular 8 #mean stack login and registration angular 9 #mean stack tutorial #mean stack tutorial 2019 #passport.js

曾 俊

曾 俊

1660301700

使用 MLIB 进行 K-Means 聚类简介

K-means 聚类无监督 机器学习支持的算法之一,因此在继续使用 K-means 之前,让我们了解无监督学习方法的背景知识。在这种方法中,与监督方法不同,我们没有预定义的标签,因此我们不绘制预测,而是从中生成集群/组,以便可以根据提供给模型的特征对数据进行分割。

K-Means 聚类图片来源:Bookdown

K-Means 聚类遵循什么方法?

如前所述,该算法是无监督学习的一部分,因此我们将根据不同数量的集群对数据进行分割,而不是进行预测。K-means 遵循一些重要的数学步骤:

步骤 1:选择簇数,有几种方法可以选择合适的簇数,肘法领域知识。

第 2 步:分配 K 个点,或者我们也可以说从数据集中随机分配质心。

第 3 步:在最后一步中,每个 K 点将靠近其最近的质心进行调整,最终将形成集群/组

好的!理论已经讲完了,现在让我们动手在 Spark 的官方聚类数据集上实现 K-means 聚类。虽然这个数据集非常小而且很奇特,但我们可以使用 PySpark 的 MLIB 解释 K-means 聚类的每个概念。

启动 Spark 对象

在任何与 spark 相关的项目中,这一步是我们必须做的第一件事,即创建和实例化 PySpark 环境,以便我们可以访问实现K-means 聚类算法所需的所有实用程序和函数。

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('intro_cluster').getOrCreate()
spark

输出:

火花对象 |  K-Means 聚类

推断:首先是从 PySpark 的 SQL 模块调用 SparkSession 对象,然后我们使用 builder() 函数合并的 getOrCreate() 函数创建了 intro_cluster 会话。

from pyspark.ml.clustering import KMeans

推理:在 PySpark 中,我们从分类类中导入所有分类算法,如决策树分类器、GBT 分类器、随机森林分类器和逻辑回归,就像我们从聚类类中导入KMeans对象一样。

读取数据集

如前所述,这是spark 在其官方 GitHub 存储库中提供的数据集,该数据集非常,因此不应期望得到真实世界的结果,但肯定有助于理解实际实现 k 的概念- 表示聚类。

dataset_kmeans = spark.read.format("libsvm").load("sample_kmeans_data.txt")
dataset_kmeans.show()

输出:

推论:这里注意到我们是在将数据集转换为lib-svm格式后读取数据集,因为数据集是lib-svm的形式,然后它变得容易加载。稍后我们将使用show 函数查看数据集。

dataset_kmeans.head(5)

输出:

[Row(label=0.0, features=SparseVector(3, {})),
 Row(label=1.0, features=SparseVector(3, {0: 0.1, 1: 0.1, 2: 0.1})),
 Row(label=2.0, features=SparseVector(3, {0: 0.2, 1: 0.2, 2: 0.2})),
 Row(label=3.0, features=SparseVector(3, {0: 9.0, 1: 9.0, 2: 9.0})),
 Row(label=4.0, features=SparseVector(3, {0: 9.1, 1: 9.1, 2: 9.1}))]

推论:还有另一种方法可以偷看数据集,即返回所有列名及其对应值的head 函数。请注意,要素作为SparseVector返回。

dataset_kmeans.printSchema()

输出:

root
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)

推论:如果想知道数据集的 Schema 是什么样的,可以使用print schema () 函数。这里它返回了两列,一列是标签,另一列是向量格式的特征列。

执行

正如我们所知,我们不会在 K-means 中预测任何标签,而是我们过去常常创建一个集群以尽可能最好的方式分割数据,但这里是复杂的部分,因为没有 100% 的最佳方法来找到最好的集群的数量,一个应该有惊人的领域知识或肘法,有时为了更简单的问题,我们可以试一试hit and trial 方法,这就是我们要在这里做的:

  1. 当 clusters = 2时,即数据集将分为两组。
  2. 当 clusters = 3时,即数据集将被分成三组。

当集群 = 2

kmeans_2_cluster = KMeans().setK(2).setSeed(1)

推论:上面的代码是我们如何通过set()方法设置簇数的方式。请注意,我们正在使用resolved ()函数以及 KMeans 来为每个组选择数据的随机数,因此如果我们设置一个适当的数字,那么每次执行后它将采用相同的随机分布

first_model = kmeans_2_cluster.fit(dataset_kmeans)

推理:现在我们正在拟合 KMeans 模型,即基于可用数据集训练模型。请注意,我们正在为训练提供完整的数据,因为我们没有标签,因此拆分数据集没有意义

predictions_first_model = first_model.transform(dataset_kmeans)
predictions_first_model.show()

输出:

输出

推论:现在是时候做一些预测了(这里让我们根据输入数据做一个相关的集群),为此,我们在整个数据集上使用了变换方法。当我们看到输出时,我们可以看到有两组,一组标记为 1 ,另一组标记为 2

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

推论:建立模型是一回事,测试和评估它更重要,因为它可以让我们考虑这个模型是好用还是需要任何改变。因此,我们使用聚类评估器对象来获得一些 Kmeans 评估方法。

silhouette_2_clusters = evaluator.evaluate(predictions_first_model)
print("Silhouette evaluation results = " + str(silhouette_2_clusters))

输出:

Silhouette evaluation results = 0.9997530305375207

推论:轮廓是一种统计方法,用于检查数据集群内的一致性。它的系数值范围在[-1,1]之间,系数越正,数据点在该特定簇内的越多越好。

two_centroid = first_model.clusterCenters()
print("Center of clusters: ")
for c in two_centroid:
    print(c)

输出:

Center of clusters: 
[9.1 9.1 9.1]
[0.1 0.1 0.1]

推论:了解每个集群的中心/质心非常重要,因为它们有助于我们了解它们彼此之间的可分离性。在输出中,可以看到有两个集群,因为我们选择 K(集群)的数量为2

当集群 = 3

kmeans_3_clusters = KMeans().setK(3).setSeed(1)
second_model = kmeans_3_clusters.fit(dataset_kmeans)
predictions_second_model = second_model.transform(dataset_kmeans)

推论:现在是时候检查当我们选择拥有三个集群时我们的模型将如何执行,因为这个过程几乎相同,我们将K 值设置为 33 个组,然后我们将拟合/训练完整的数据(我已经讨论过的原因)最后绘制预测变换方法来拯救。

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

silhouette_3_clusters = evaluator.evaluate(predictions_second_model)
print("Silhouette evaluation results = " + str(silhouette_3_clusters))

输出:

Silhouette evaluation results = 0.6248737134600261

推论:在这里,如果我们比较集群为 2 时的轮廓距离,那么可以得出结论,我们应该只使用 2 个集群,因为它会给我们更好的结果。

three_centroid = second_model.clusterCenters()
print("Center of clusters: ")
for c in three_centroid:
    print(c)

输出:

Center of clusters: 
[9.1 9.1 9.1]
[0.05 0.05 0.05]
[0.2 0.2 0.2]

推论:用3-K 值构建模型的唯一目的是比较两者并选择可能的最佳 K 值,在这里我们可以看到一个三质心值。

K-Means 聚类结论

我们正处于最后阶段🙂。在本节中,我们将通过实际实施来完成本文迄今为止所做的一切。从介绍 K-means 算法及其操作方式开始,我们通过比较两种不同的情况,选择了最好的一种。

  1. 首先,我们讨论K-Means 算法的工作原理,然后建立一个 PySpark 平台,以便我们可以实现它并获得实践经验。
  2. 然后我们从 PySpark 文档示例中读取了官方数据集,并分析了 Schema并对其有一个基本的了解。
  3. 最后,我们在两种情况下(当集群为 2 和 3时)构建 K-means 模型,在查看评估结果后,我们得出结论,对于该特定数据,当集群为 2 时,它的表现更好

这是本文的回购链接。我希望你喜欢我关于 MLIB 中树方法简介的文章。如果您有任何意见或问题,请在下方评论。

资料来源:https ://www.analyticsvidhya.com/blog/2022/07/introduction-to-k-means-clustering-using-mlib/

#mlib 

Ananya Gupta

Ananya Gupta

1596094635

What Is MEAN STACK and Scope of MEAN STACK Developer ?

What is MEAN Stack Developer?
MEAN Stack Developer is a programmer who operates on the MEAN stack. He works on the backend plus the front end of the application. They are all JavaScript based and therefore a MEAN developer should have excellent JS knowledge, for which you can join MEAN Stack Online Training Program.

Skillets of MEAN Stack developer
• Knowledge of working on the Front-end and Back-end processes
• Work with HTML & CSS
• Understanding of programming templates and architecture design guidelines
• Knowledge of continuous integration, web development, and cloud technologies
• Excellent understanding of DB architecture
• Knowledge of SDLC and experience developing in an Agile environment
• Collaborate with the IT team to build robust systems to support business objectives
• Hands-on experience on Mongo, Angular, Express, Node.
Future of MEAN stack Developer

Being, a Mean stack developer is a highly desirable, challenging vocation. So, if you are ready to work on the diverse skill set and have the experience of working with various code languages and application, then you will become successful MEAN stack developer.

Scope of MEAN stack developer

MEAN Stack Development is the best career prospect today with unlimited growth and scope. The national Indian median salary was around 76K $ pa according to Glassdoor.com. All you need to do is get cracking on your skill set by joining MEAN Stack course in Delhi, earn your certification and through your job experience and continued experiential learning keep pace with newer iterations in technology.
Developers are available in various process streams like Backend, Frontend, Database, Testing, and Mobile Apps. Older practices were that as you gain experience and expertise you would pursue specialization and progress your career in that direction.
How Can I Start Learning Mean Stack Course Step By Step? Modern best practices have changed the trend.
Skill upgrades and building proficiency in:
• CSS
• HTML
• JavaScript
• Ruby, PHP, or Python which are all-purpose languages.
• Postgres, Oracle, or MySQL, relational-database systems.
• Any web-server which includes Nginx or Apache
• FreeBSD, Ubuntu, or CentOS deployment OS.
• Any system for instance GIT for version-control

By mastering one software technology required for every stack-part you will be in a position to create your own software and use it to add business value at your job.

#mean stack #mean stack training #mean stack certification online #mean stack online course #mean stack online training

Gerhard  Brink

Gerhard Brink

1621443060

Understanding Core Data Science Algorithms: K-Means and K-Medoids Clustering

This article provides an overview of core data science algorithms used in statistical data analysis, specifically k-means and k-medoids clustering.

Clustering is one of the major techniques used for statistical data analysis.

As the term suggests, “clustering” is defined as the process of gathering similar objects into different groups or distribution of datasets into subsets with a defined distance measure.

K-means clustering is touted as a foundational algorithm every data scientist ought to have in their toolbox. The popularity of the algorithm in the data science industry is due to its extraordinary features:

  • Simplicity
  • Speed
  • Efficiency

#big data #big data analytics #k-means clustering #big data algorithms #k-means #data science algorithms

藤本  結衣

藤本 結衣

1660300200

MLIB を使用した K-Means クラスタリングの概要

K-means クラスタリングは、教師なし 機械学習がサポートするアルゴリズムの 1 つです。そのため、K-means を使用する前に、教師なし学習方法の背景知識を持っておきましょう。この方法では、教師付き方法とは異なり、事前定義されたラベルがないため、予測を描画しませんが、モデルに供給される機能に従ってデータをセグメント化できるように、それらからクラスター/グループを作成します。

K-Means クラスタリング画像ソース:ブックダウン

K-Means クラスタリングはどのようなアプローチに従いますか?

前述のように、このアルゴリズムは教師なし学習の一部であるため、予測を行う代わりに、さまざまな数のクラスターに基づいてそのデータをセグメント化します。K-means は、議論することが重要ないくつかの数学的手順に従います。

ステップ 1:クラスターの数を選択します。適切な数のクラスターを選択するには、エルボ法ドメイン知識など、いくつかの方法があります。

ステップ 2: K ポイントの割り当て、またはデータセットから重心をランダムに割り当てることもできます。

ステップ 3:最後のステップで、各 K ポイントは、最終的にクラスター/グループを形成する最も近い重心に向かって厳密に調整されます。

わかった!十分な理論があるので、Spark の公式クラスタリングデータセットに K-means クラスタリングを実装してみましょう。このデータセットは非常に小さく独特ですが、PySpark の MLIB を使用して K-means クラスタリングの各概念を説明できます。

Spark オブジェクトの開始

Spark関連のプロジェクトのこのステップは、 K-means クラスタリング アルゴリズムを実装するために必要なすべてのユーティリティと関数にアクセスできるように、PySpark 環境を作成してインスタンス化することによって最初に行う必要があります。

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('intro_cluster').getOrCreate()
spark

出力:

火花オブジェクト |  K-Means クラスタリング

推論:何よりもまず、SparkSession オブジェクトが PySpark の SQL モジュールから呼び出され、次に builder() 関数によって組み込まれた getOrCreate() 関数を使用して intro_cluster セッションを作成しました。

from pyspark.ml.clustering import KMeans

推論: PySpark では、クラスタリングクラスからKMeansオブジェクトをインポートするのと同じ方法で、決定木分類器、GBT 分類器、ランダム フォレスト分類器、ロジスティック回帰などのすべての分類アルゴリズムを分類クラスからインポートします。

データセットの読み取り

前述のように、これは公式の GitHub リポジトリで Spark によって提供されるデータセットであり、このデータセットは非常に小さいため、実際の結果を期待するべきではありませんが、k を実際に実装する概念を理解するのに役立つことは間違いありません。 -クラスタリングを意味します。

dataset_kmeans = spark.read.format("libsvm").load("sample_kmeans_data.txt")
dataset_kmeans.show()

出力:

推論:ここでは、データセットが lib-svm の形式であるため、lib-svm の形式に変換した後にデータセットを読み取っていることに注意してください。これにより、読み込みが容易になります。後で、show 関数を使用してデータセットを確認します。

dataset_kmeans.head(5)

出力:

[Row(label=0.0, features=SparseVector(3, {})),
 Row(label=1.0, features=SparseVector(3, {0: 0.1, 1: 0.1, 2: 0.1})),
 Row(label=2.0, features=SparseVector(3, {0: 0.2, 1: 0.2, 2: 0.2})),
 Row(label=3.0, features=SparseVector(3, {0: 9.0, 1: 9.0, 2: 9.0})),
 Row(label=4.0, features=SparseVector(3, {0: 9.1, 1: 9.1, 2: 9.1}))]

推論:データセットのスニーク ピークを持つ別の方法が 1 つあります。つまり、すべての列名とそれに対応する値を返すhead 関数です。機能がSparseVectorとして返されていることに注意してください。

dataset_kmeans.printSchema()

出力:

root
 |-- label: double (nullable = true)
 |-- features: vector (nullable = true)

推論:データセットのスキーマがどのように見えるかを知りたい場合は、print schema () 関数を使用できます。ここでは、1 つはラベル、もう1 つは特徴列の 2 つの列をベクター形式で返しています。

実装

K-means ではラベルを予測しないことがわかっているため、代わりにクラスターを作成してデータを可能な限り最善の方法でセグメント化しましたが、最適なものを見つける 100% 最適な方法はないため、ここでは複雑な部分が生じます。クラスターの数は、いずれかが驚くべきドメイン知識を持っている必要があります。または、エルボ メソッドを使用する必要があります。問題がより簡単な場合は、ヒットして試してみることができます。これが、ここで行うことです。

  1. clusters = 2の場合、つまり、データセットが 2 つのグループに分けられる場合。
  2. クラスター = 3の場合、つまり、データセットが 3 つのグループに分割される場合。

クラスタ数 = 2 の場合

kmeans_2_cluster = KMeans().setK(2).setSeed(1)

推論:上記のコードは、set()メソッドからクラスターの数を設定する方法です。Settle ()関数と KMeans を使用して、各グループのデータの乱数を選択していることに注意してください。適切な数を設定すると、実行されるたびに同じ乱数分布になります。

first_model = kmeans_2_cluster.fit(dataset_kmeans)

推論: KMeans モデルを適合させます。つまり、利用可能なデータセットに基づいてモデルをトレーニングします。ラベルがないため、トレーニング用に完全なデータを供給しているため、データセットを分割しても意味がないことに注意してください。

predictions_first_model = first_model.transform(dataset_kmeans)
predictions_first_model.show()

出力:

出力

推論:いくつかの予測を行う時が来ました (ここでは、入力データに基づいて関連するクラスターを作成しましょう)。そのために、データセット全体で変換メソッドを使用しています。出力を見ると、1 と 2 のタグが付けられた 2 つのグループがあることがわかります。

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

推論:モデルを構築することは 1 つのことであり、それをテストして評価することは、このモデルがうまくいくかどうか、または変更が必要かどうかを検討できるようになるため、より重要です。したがって、クラスタリング エバリュエーター オブジェクトを使用して、いくつかの Kmeans 評価メソッドを取得しています。

silhouette_2_clusters = evaluator.evaluate(predictions_first_model)
print("Silhouette evaluation results = " + str(silhouette_2_clusters))

出力:

Silhouette evaluation results = 0.9997530305375207

推論:シルエットは、データのクラスター内の一貫性をチェックする統計的手法です。その係数値の範囲は[-1,1]の間で、係数が正であるほど、データ ポイントがその特定のクラスター内に多く含まれます。

two_centroid = first_model.clusterCenters()
print("Center of clusters: ")
for c in two_centroid:
    print(c)

出力:

Center of clusters: 
[9.1 9.1 9.1]
[0.1 0.1 0.1]

推論:各クラスターの中心/重心について知ることは、それらが互いにどれだけ分離可能かを知るのに役立つため、非常に重要です。出力では、K (クラスター) の数を2として選択したため、2 つのクラスターがあることがわかります。

クラスタ数 = 3 の場合

kmeans_3_clusters = KMeans().setK(3).setSeed(1)
second_model = kmeans_3_clusters.fit(dataset_kmeans)
predictions_second_model = second_model.transform(dataset_kmeans)

推論:ここで、3 つのクラスターを持つことを選択した場合にモデルがどのように機能するかを確認します。そのため、プロセスはここでほぼ同じです。K 値を 3 つ、つまり3 つのグループとして設定し、完全なデータを適合/トレーニングします(すでに説明した理由) 最後に、予測を描画するための変換方法が助けになります。

from pyspark.ml.evaluation import ClusteringEvaluator
evaluator = ClusteringEvaluator()

silhouette_3_clusters = evaluator.evaluate(predictions_second_model)
print("Silhouette evaluation results = " + str(silhouette_3_clusters))

出力:

Silhouette evaluation results = 0.6248737134600261

推論:ここで、クラスターが 2 の場合のシルエット距離を比較すると、より良い結果が得られるため、2 つのクラスターのみを使用する必要があると結論付けることができます。

three_centroid = second_model.clusterCenters()
print("Center of clusters: ")
for c in three_centroid:
    print(c)

出力:

Center of clusters: 
[9.1 9.1 9.1]
[0.05 0.05 0.05]
[0.2 0.2 0.2]

推論: 3-K 値を使用してモデルを構築する唯一の目的は、両方を比較して、可能な限り最良の K 値を選択することです。

K-Means クラスタリングのまとめ

このセクションでは🙂、実際の実装に関して、この記事でこれまで行ってきたことをすべて説明します。K-means アルゴリズムとその操作方法の紹介から、2 つの異なるケースを比較し、最適なものを選択しました。

  1. 最初に、K-Means アルゴリズムがどのように機能するかについて説明し、次に PySpark プラットフォームをセットアップして、それを実装して実践的な経験を得られるようにします。
  2. 次に、PySpark のドキュメントの例から公式のデータセットを読み、スキーマを分析して、同じことの基本的な理解を得ました。
  3. 最後に、2 つのケース (クラスターが 2 と 3の場合)で K 平均法モデルを構築し、評価結果を確認した後、クラスターが 2 の場合のこの特定のデータのパフォーマンスが優れていると結論付けました。

この記事へのレポリンクは次のとおりです。MLIB のツリー メソッドの紹介に関する私の記事が気に入っていただければ幸いです。ご意見やご質問がありましたら、以下にコメントしてください。

ソース: https://www.analyticsvidhya.com/blog/2022/07/introduction-to-k-means-clustering-using-mlib/

#mlib