機械学習:クラスタリングアルゴリズムと教師なし学習、モデル評価基準


1.✌クラスタリングアルゴリズム

1.1✌教師なし学習およびクラスタリングアルゴリズム

クラスタリング 分類
違い 学習せずにサンプルデータを複数のクラスターに分割する 学習のためにサンプルデータを学習済みモデルにインポートします。参照用のラベルがあります
特定のアルゴリズム DBSCAN、KMeans、階層的クラスタリングなど。 ロジスティック回帰、ランダムフォレスト、決定木、ベイズなど。
アルゴリズムの評価 一般的に、クラスタリングの結果は不確実であり、教師あり学習なしで、機能に従ってのみ分類されます。 分類結果はユニークです

分類:確立されたモデルまたはデータに従って、新しいデータは関連するアルゴリズムに従って分類されます。
クラスタリング:元のサンプルデータは、関連するアルゴリズムによって直接分類されます。

1.2✌一般的なクラスタリングアルゴリズム

1.2.1✌KMeansアルゴリズムの基本原理

KMeansのKはクラスターの数を表し、Meansは各分類の中心点である各クラスターの平均値を表します。KMeansアルゴリズムは、サンプル間の距離をサンプルの類似性の尺度として使用し、類似した距離のサンプルを分割します。 1つのクラスターに。
サンプル間の距離の計算方法は、ユークリッド距離、コサイン類似度、マンハッタン距離です。一般的には、ユークリッド距離が使用され、テキストにはコサイン類似度が使用されます。
KMeansアルゴリズムのコア:

  1. サンプルからk個のサンプルポイントをランダムに選択します
  2. ユークリッド距離に従って各サンプルからサンプルポイントまでの距離を測定し、各サンプルを最も近いサンプルポイントのクラスターに分割します。
  3. 新しいクラスターの分類結果に従って、各クラスターから新しいサンプルポイントが選択されます。今回は、サンプルポイントが各クラスターの中心点になります。
  4. 各クラスターのサンプルの中心が変更されていないことを確認しながら、2ステップと3ステップを連続して繰り返します。

2.2✌重要なパラメータn_clusters

このパラメーターは、分割されるクラスの数であるKMeansのkです。このパラメーターをテストするために、コードの文字列を使用します。

import pandas as pd
from sklearn.datasets import make_blobs
x,y=make_blobs(n_samples=500,n_features=2,centers=4,random_state=123)

コードの3行目は、カスタムデータセットを生成することです。パラメーターは、サンプルサイズ、サンプル特性、中心、およびランダムシードです。

fig,ax1=plt.subplots(1)
ax1.scatter(data[0],data[1],c='red')
plt.show()

ここに画像の説明を挿入します

#采用KMeans
from sklearn.cluster import KMeans
kms=KMeans(n_clusters=4)
kms.fit(x)
label_kms=kms.labels_
color=['red','green','yellow','blue']
plt.figure(figsize=(6,6))
for i in range(4):
    plt.scatter(x[label_kms==i]['特征1'],data[label_kms==i]['特征2'],c=color[i])
plt.show()

ここに画像の説明を挿入します

最初にモデルクラス
初期化し、次に
サンプルの分類値であるモデルlabels_をトレーニングします

#采用KMeans
from sklearn.cluster import KMeans
kms=KMeans(n_clusters=4)
kms.fit(x)
label_kms=kms.labels_
color=['red','green','yellow','blue']
plt.figure(figsize=(6,6))
for i in range(4):
    plt.scatter(x[label_kms==i]['特征1'],data[label_kms==i]['特征2'],c=color[i])
plt.show()

2.3✌重要なパラメータinit&random_state&n_init

K-Meansの重要なリンクは、最初の重心を配置することです。十分な時間があれば、K-meansは確実に収束しますが、慣性は
極小値に収束する可能性があります。真の最小値に収束できるかどうかは、重心の初期化に大きく依存します。initは
初期化方法を決定するために使用されるパラメーターです。
最初の重心の位置が異なり、クラスタリングの結果も異なる可能性があります。重心を適切に選択すると、K-Meansはより多くの計算を回避し、
アルゴリズムをより安定して高速に収束させることができます。初期重心の配置を説明する前に、「ランダム」法を使用して、サンプル点から初期重心としてk個のサンプルを抽出しました
。この方法は、明らかに「安定して高速」の要件を満たしていません。この目的のために、random_stateパラメーターを使用して、各世代の初期重心が
同じ位置なるように制御し、学習曲線を描画して、最適なrandom_stateがどの整数であるかを判別することもできます。
random_stateは、重心がランダムに初期化される乱数シードに対応します。乱数シードがない場合、K-meansでsklearn
がスローされない場合は、ランダムパターンの結果を選択するだけでなく、各乱数シードで複数回実行され、乱数シードの最良の結果が
最初の重心として使用されます。パラメータn_initを使用して、各乱数シードの下での実行数を選択できます。このパラメーターは一般的に使用されず、デフォルトは10回です。
実行の結果をより正確にしたい場合は、このパラメーターn_initの値を増やして、各乱数シードの下での実行数を増やすことができます。
ただし、この方法は依然としてランダム性に基づいています。
初期重心の選択方法を最適化するために、2007年に、Arthur、David、およびSergeiVassilvitskiiが論文「k-means ++:The
慎重なシードの利点」、彼らは「k-means ++」初期化スキームを開発しました。これにより、初期重心が(通常)互いに遠く
なり、ランダム初期化よりも信頼性の高い結果が得られます。sklearnでは、パラメーターinitを使用します。 = 'k-means ++'は、重心
初期化スキームとしてk-means ++を選択します。一般的に、デフォルトの「k-means ++」メソッドを維持することをお勧めします
。init:「k-means ++」、「random」と入力できますまたはn次元配列。これは重心を初期化する方法です。デフォルトは「k-means ++」です。「kmeans ++」と入力します。K-meansクラスタリングの初期クラスター中心を選択して収束を高速化する賢い方法です。 n次元配列の場合、配列の形状は
(n_clusters、n_features)であり、初期重心を指定する必要があります
。random_state:各重心のランダム初期化のランダム番号シードを制御し
ます。n_init:整数、デフォルト10、異なる重心を使用します。初期化シード
tok -meansアルゴリズムを実行する回数。最終結果は、イナーシャに基づいて計算されたn_init連続実行後に最良の出力になります。

2.4✌重要なパラメータmax_iter&tol

K-Meansの基本的なプロセスを説明するときに、重心が移動しなくなると、Kmeansアルゴリズムが停止することを説明しました。ただし、完全に収束する前に
、最大反復回数であるmax_iter、または2回の反復間の慣​​性の減少量であるtolを使用することもできます。これらの2つのパラメーターを使用して、反復を早期に停止します
n_clustersの選択がデータの自然な分布に準拠していない場合、またはビジネスニーズに合わせてデータの自然な分布と一致しないn_clustersを入力する必要がある場合
は、反復を事前に停止すると、モデルのパフォーマンスが向上することがあります。
max_iter:整数、デフォルト300、1回の実行でのk-meansアルゴリズムの最大反復回数
tol:浮動小数点数、デフォルト1e-4、Inertiaの値が2つの間に低下した場合、2つの反復間で低下するInertiaの量反復がtol未満設定値、反復
が停止します

1.2.2✌DBSCANアルゴリズムの基本原理

DBSCANアルゴリズムは、クラスターを分類するためのサンプルポイントの分布密度に基づく一種の密度クラスタリングと見なすことができます。DBSCANアルゴリズムの
コアは次のとおりです。

  1. 分類されていないサンプルポイントをランダムに選択します
  2. サンプルポイントを円の中心とし、設定した半径に従って円を描きます。円内のサンプル数が設定したしきい値に達すると、デバイスは1つのカテゴリに分類され、それ以外の場合は破棄されます。
  3. クラス内のすべてのサンプルポイントが使い果たされるまで、円内の他のサンプルポイントを選択して、円を再度描画します
  4. 分類されていないサンプルポイントを再度選択し、使用可能なサンプルポイントがなくなるまで、手順2と3を繰り返します。
  5. アルゴリズムの完了後にまだ分類されていないポイントがある場合、それらは外れ値と見なされます
#采用 DBSCAN
from sklearn.cluster import DBSCAN
dbs=DBSCAN(min_samples=5)
dbs.fit(x)
label_dbs=dbs.labels_
color=['red','green','yellow','blue']
plt.figure(figsize=(6,6))
for i in range(4):
    plt.scatter(x[label_dbs==i]['特征1'],data[label_dbs==i]['特征2'],c=color[i])
plt.show()

ここに画像の説明を挿入します

2.1✌DBSCANの重要なパラメーターeps、min_samples

eps:このパラメーターは、円を描くときの半径です
。min_samples:このパラメーターは、円内のサンプルの最小数です。

1.3✌クラスター内の二乗和の定義

私たちの分類の基礎は、各クラスターのデータは類似しており、異なるクラスターのデータは同じではないということです。「クラスター内の小さな違いとクラスター外の大きな違い」を追求し、サンプルポイントからその中心までの距離でこれを測定できます。
ここに画像の説明を挿入します
ユークリッド距離を使用する場合、サンプルポイントからクラスターの中心までの距離の2乗の合計は次のようになります。

ここに画像の説明を挿入します
最初の式はクラスター内の二乗和であり、イナーシャとも呼ばれます。
すべてのクラスターの二乗和は、全体の二乗和に加算され
ますご覧のとおり、イナーシャは次の計算式から導出されますユークリッド距離。実際、他の距離を使用することもできます。各距離には、対応する慣性があります。異なる距離に対応する重心選択方法と慣性Kmeansでは、重心と距離の正しい組み合わせを使用する限り、どの距離を使用しても、良好なクラスタリング効果を実現できます。

1.4✌モデルの評価基準

一部の分類モデルには明確なラベルがあり、既知のラベルと予測結果を使用してモデルのスコアを処理できますが、クラスターには明確なラベルがなく、モデルがどのように分類されているかがわかりません。結果は決定論的ではありません。
前述のように、クラスタリングは「クラスター内の小さな違いとクラスター外の大きな違い」を保証します。慣性を使用してクラスター内の違いを評価できます。距離が小さいほど、モデルは優れています
が、長所と短所があります。モデルはそうではないモデルの品質を評価するための間隔を見つけることは非常に困難であり、相対的な良し悪ししか見ることができず、データ次元が大きすぎると計算量が非常に多くなり、 kの値によって変化します。たとえば、kをサンプル数として定義する場合、クラスター内の距離は0でなければなりません。kが増加すると、慣性は確実に減少しますが、これは効果を意味するものではありません。モデルのがより良くなる
のでそれを使用することができますいくつかのモデル評価基準:輪郭係数、calinski_harabasz_score、均質性、完全性、Vメジャー

1.4.1✌輪郭係数

99%のケースで、実際のラベルのないデータ、つまり実際の答えがわからないデータのクラスタリングを調査しています。このようなクラスタリング
は、クラスタリングの効果を評価するために、クラスター内の密度の程度(クラスター内の小さな違い)とクラスター間の分散の程度(クラスター外の大きな違い)の評価に完全に依存しています。その中で、
等高線係数は、最も一般的に使用されるクラスタリングアルゴリズムの評価指標です。これはサンプルごとに定義され、同時に測定できます
。1)サンプルとそれ自体のクラスター内の他のサンプル間の類似性aは、サンプルと同じクラスター内の他のすべてのポイント間の平均距離に等しい
2)サンプルと他のクラスター内のサンプルの類似度bは、サンプルと次に近いクラスター内のすべてのポイントとの間の平均距離に等しくなります。
クラスタリングの要件によれば、「クラスター内の差は小さいですが、外側の差は小さいです。クラスターが大きい」。bが常にaよりも大きいことを願っています。そして、大きいほど良いです。
単一サンプルのコンター係数は次のように計算されます。
ここに画像の説明を挿入します
この式は次のように解析できます。
ここに画像の説明を挿入します
コンター係数の範囲は(-1,1)であり、値が1に近いほど、サンプルは次のようになります。独自のクラスター内のサンプルと非常に類似しており、他のサンプルと類似しています。クラスター内のサンプルは類似して
いません。サンプルポイントがクラスター外のサンプルにより類似している場合、等高線係数は負になります。等高線係数が0の場合、2つのクラスターのサンプルが
同じであり、2つのクラスターが1つのクラスターである必要があることを意味します。等高線係数が1に近いほど良いと結論付けることができ、負の数はクラスタリング効果が非常に悪いことを示します。
クラスター内のほとんどのサンプルのプロファイル係数が比較的高い場合、クラスターの合計プロファイル係数は高くなります。データセット全体の平均プロファイル係数が高いほど
、クラスタリングが適切です。多くのサンプルポイントの等高線係数が低いか、負の値でさえある場合、クラスタリングは適切ではなく、クラスタリングのハイパーパラメータKの設定が大きすぎ
たり小さすぎたりする可能性があります

sklearnでは、metricsモジュールのsilhouette_scoreクラスを使用して等高線係数を計算します。これは
データセット内すべてのサンプルの等高線係数の平均値を返しますただし、me​​tricsモジュールにはsilhouette_sampleもあります。そのパラメーターは等高線係数と一致しています
が、返されるのはデータセット内の各サンプルの等高線係数です。

from sklearn.metrics import silhouette_score
score_sil=silhouette_score(x,label_kms)

1.4.2✌Calinski_harabasz_score

Calinski-Harabaz Index(CHI、分散
標準としても知られています)、Davies-Bouldin、および分割表を使用できます。
ここに画像の説明を挿入します
ここで、Nはデータセットのサンプルサイズ、kはクラスターの数(つまり、カテゴリの数)、はグループ間離散行列、つまり、異なるクラスター間の共分散行列は
クラスター内離散行列です。 、つまり、クラスター内のデータとtrの共分散行列は、行列のトレースを表します。線形代数で
、n×n行列Aの主対角線(左上から右下への対角線)上の要素の合計は、行列Aのトレース(またはトレース数)と呼ばれ、一般に次のようになります。として示されます。データ間
の分散度が高いほど、共分散行列のトレースが大きくなります。グループ内の分散が小さい場合、
共分散のトレースはますます小さくなります。同時に、グループ間の分散が大きい場合、共分散のトレースはますます大きくなります。これはまさに私たちが望んでいることです。 Calinski-harabazインデックスが高いほど、優れています。
要するに、評価基準が大きければ大きいほど良いのです。

from sklearn.metrics import calinski_harabasz_score
score_cal=calinski_harabasz_score(x,label_kms)

等高線係数と比較して、評価基準は計算速度が速いという大きな利点があります。

1.4.3✌均質性、完全性、Vメジャー

from sklearn.metrics import homogeneity_score
from sklearn.metrics import completeness_score
from sklearn.metrics import v_measure_score
hom_score=homogeneity_score(y,label_kms)
com_score=completeness_score(y,label_kms)
v_score=v_measure_score(y,label_kms)
v_score

おすすめ

転載: blog.csdn.net/m0_47256162/article/details/113321672