数値データとカテゴリデータが混在するK平均クラスタリング


133

データセットには、いくつかの数値属性と1つのカテゴリが含まれています。

、と言いますNumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr

CategoricalAttr、次の3つの可能な値のいずれかを取ります:CategoricalAttrValue1CategoricalAttrValue2またはCategoricalAttrValue3

Octave https://blog.west.uni-koblenz.de/2012-07-14/a-working-k-means-code-for-octave/のデフォルトのk-meansクラスタリングアルゴリズムの実装を使用しています。数値データのみで機能します。

だから私の質問:カテゴリ属性CategoricalAttrを3つの数値(バイナリ)変数に分割するのは正しいIsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3ですか?


7
はい、1-of-nエンコーディングの使用も有効です。
ショーンオーウェン

1
おそらく、このアプローチは有用であろう:zeszyty-naukowe.wwsi.edu.pl/zeszyty/zeszyt12/...

カテゴリデータと数値データの混合をクラスタリングする「タイムシリーズ」について何か考えはありますか?
レイラユーセフィ

回答:


122

さまざまな理由により、標準のk-meansアルゴリズムはカテゴリデータに直接適用できません。カテゴリデータのサンプル空間は離散的であり、自然な起源を持ちません。このような空間でのユークリッド距離関数は、実際には意味がありません。誰かが言ったように、「蛇が車輪も足も持っていないという事実は、車輪と脚の相対的な価値については何も言えない」(ここから)

で導入されたK-モードとして知られているK-手段の変化、あります。この論文カテゴリーデータに適しているZhexue黄では、。たとえば、こちら(PDF)で説明されているように、得られるソリューションは初期条件に敏感です。

Huangの論文(上記リンク)には、カテゴリと数値の特徴が混在するデータに適用される「kプロトタイプ」に関するセクションもあります。カテゴリ特徴のハミング距離と数値特徴のユークリッド距離を混合する距離測定を使用します。

「カテゴリデータのk-meansミックス」をGoogleで検索すると、カテゴリデータと数値データが混在したk-meansのようなクラスタリングのさまざまなアルゴリズムに関する最近の論文がかなり多く見つかりました。(まだ読んでいませんので、彼らのメリットについてコメントすることはできません。)


実際、あなたが提案すること(カテゴリ属性をバイナリ値に変換してから、それらが数値であるかのようにk-meansを実行する)は、以前に試みられた別のアプローチです(kモードの前)。(Ralambondrainy、H. 1995を参照してください。k-meansアルゴリズムの概念バージョン。PatternRecognition Letters、16:1147–1157。)しかし、私は上記の理由からk-modesアプローチが好ましいと考えています。


10
二値化されたカテゴリフィーチャと同じ範囲に数値フィーチャをスケーリングすると、コサインの類似性は上記のハミングアプローチと非常に類似した結果をもたらす傾向があります。私はこれがすべての場合に機能することを検証するための堅牢な方法を持っていませんので、猫とnumのデータを混合した場合、私は常にサンプルのクラスタリングを前述の単純なコサイン法とハミングとのより複雑な混合でチェックします。差がわずかな場合は、より単純な方法を好みます。
cwharland

1
それは賢明なアプローチのように聞こえます、@ cwharland。さらに検討すると、HuangがRalambondrainyのkモードアプローチに与える利点の1つ-カテゴリ変数の値ごとに個別の機能を導入する必要がないこと-は、実際には重要ではないことに注意してくださいOPが3つの値を持つ単一のカテゴリ変数のみを持っている場合。動作する最も単純なアプローチを使用することをお勧めします。
ティムグッドマン

3
いい答えだ。潜在的に役立つ:PythonでHuangのkモードとkプロトタイプ(およびいくつかのバリエーション)を実装しました:github.com/nicodv/kmodes
Def_Os

2
カテゴリ属性を数値に変換することはお勧めしません。NYとLAという2つの都市名があるとします。NY番号3とLA番号8を適用すると、距離は5になりますが、その5はNYとLAの違いとは関係ありません。
-adesantos

@adesantosはい、それは複数のカテゴリを単一の数値フィーチャで表現し、ユークリッド距離を使用する場合の問題です。ハミング距離の使用は1つのアプローチです。その場合、距離は、カテゴリに割り当てられた数値の差ではなく、異なる各フィーチャの1です。各カテゴリを独自の機能にすることは別のアプローチです(たとえば、「is it NY」の場合は0または1、「is it LA」の場合は0または1)。
ティムグッドマン

24

私の意見では、クラスタリングでカテゴリデータを処理するソリューションがあります。Rには、カテゴリデータの特定の距離が付属しています。この距離は、Gower(http://www.rdocumentation.org/packages/StatMatch/versions/1.2.0/topics/gower.dist)と呼ばれ、かなりうまく機能します。


2
これは、混合データセットに使用しているアプローチです-Gower距離マトリックスに適用されたmedoidの周りの分割(r-bloggers.com/clustering-mixed-data-types-in-rを参照)。問題は、距離行列の計算にO(n ^ 2)に比例した多くのメモリが必要なため、10または20,000レコードを超えるデータセットの場合、メモリが少なくて処理できるk-meansクラスタリングのバリアントを探していることです混合データ。
ロバートF

@RobertFも同じです。残念ながら、実行可能なデータサイズは、ほとんどの問題に対してあまりにも小さすぎます。
piggybox

20

(ティムグッドマンによる優れた答えに加えて)

kモードの選択は、使用するクラスタリングアルゴリズムの安定性を確保するための方法です。

  1. クラスタリングアルゴリズムは、距離メトリック/類似性スコアを自由に選択できます。ユークリッドが最も人気があります。ただし、マハラノビスメトリックなど、各ディメンション/属性のデータ分布に従ってスケーリングする他のメトリックを使用できます。 使用される距離メトリックに基づいて、中心からのデータポイントの距離を示します。

  2. 混合(数値およびカテゴリ)クラスタリングに関して、役立つ可能性のある優れた論文は次のとおりです。INCONCO:数値およびカテゴリオブジェクトの解釈可能なクラスタリング

  3. k-meansを超えて:単純なバニラk-meansはこの問題への適切なアプローチとして既に除外されているため、クラスタリングをモデル適合問題として考えるという考えにとどまりません。情報理論メトリックなどのさまざまな指標:Kullback-Liebler発散は、データ分布に向けてパラメトリックモデルを収束しようとする場合に効果的です。(もちろん、GMMのようなパラメトリッククラスタリング手法はKmeansよりも遅いため、考慮すべき欠点があります)

  4. ファジィkモードクラスタリングは、カテゴリーデータのようなものを処理するためにファジーロジック技術が開発されたため、魅力的に聞こえます。詳細については、ファジー重心使用したカテゴリーデータのファジークラスタリングを参照してください。

また、チェックアウト:ROCK:カテゴリー属性のためのロバストなクラスタリングアルゴリズム


17

この質問は、表現に関するものであり、クラスタリングに関するものではありません。

カテゴリデータは、機械学習のほとんどのアルゴリズムの問​​題です。たとえば、赤、青、黄色の値をとることができる「色」と呼ばれるカテゴリ変数があるとします。これらをそれぞれ1、2、および3として数値的に単純にエンコードする場合、アルゴリズムは、赤(1)が実際に青(2)に近いと考えています(黄色(3)よりも)。これらのすべてが実際には等しく異なることをコンピューターに理解させる表現を使用する必要があります。

1つの簡単な方法は、ワンホット表現と呼ばれるものを使用することです。これは、まさにあなたがすべきだと思ったものです。3つの値を取ることができる「色」のような1つの変数を持つのではなく、3つの変数に分けます。これらは「赤」、「青」、「黄」で、いずれも値1または0のみを取ります。

これにより、空間の次元が増加しますが、現在は、任意のクラスタリングアルゴリズムを使用できます。このプロセスを実行した後、zscoreを使用したり、データを白くしたりするのは理にかなっていますが、あなたの考えは間違いなく妥当です。


あなたの答えに同意します。HotEncodingは非常に便利です。
賞賛

4

期待値最大化クラスタリングアルゴリズムを試すこともできます。カテゴリデータを処理でき、クラスターがどのカテゴリ値(または複数の値)をとる可能性が最も高いかを統計的に示します。


2
もっと具体的に教えてください。EMは、クラスタリングに使用できる最適化アルゴリズムを指します。これを行うには多くの方法があり、あなたが何を意味するかは明らかではありません。
バイエル14年

@bayer、ここで言及したクラスタリングはガウス混合モデルだと思います。GMMは通常EMを使用します。
goh 14年

1
私はそれが彼が意味するものだとは思いません、なぜならGMMはカテゴリー変数を仮定しないからです。
バイエル14年

3

使用されるカテゴリ変数に依存します。bad、average、goodなどの順序変数の場合、1つの変数を使用し、値を0、1、2にするだけで意味があり、距離はここで意味があります(平均はbadとgoodに近い)。ただし、順序がない場合は、上記のように1つのホットエンコーディングを使用するのが理想的です。


3

混合データ型を含むデータセットでk-meansクラスタリングを使用しないでください。むしろ、混合データ型を適切に処理できる多くのクラスタリングアルゴリズムがあります。次のような可能性があります。

1)分割ベースのアルゴリズム:k-Prototypes、Squeezer
2)階層的アルゴリズム:ROCK、凝集、単一、平均、および完全なリンケージ
3)密度ベースのアルゴリズム:HIERDENC、MULIC、CLIQUE
4)モデルベースのアルゴリズム:SVMクラスタリング、自己-マップの整理

これらのアルゴリズムについて詳しく知りたい場合は、Rui Xuによって書かれた原稿「Survey of Clustering Algorithms」がクラスター分析の包括的な紹介を提供します。


2

K-Meansの目標は、クラスター内の分散を減らすことです。また、クラスターの平均点として重心を計算するため、適切に収束するにはユークリッド距離を使用する必要があります。したがって、絶対にK-Meansを使用する場合は、データがK-Meansで適切に機能することを確認する必要があります。

表現

K-Means、および一般的なクラスタリングは、同じクラスター内のインスタンスが互いに類似していることを確認することにより、意味のあるグループにデータを分割しようとします。したがって、意味のある類似度を簡単に計算できるように、データを表現するための適切な方法が必要です。

カテゴリーが互いに等距離にある場合、カテゴリー変数でワンホットエンコーディングを使用することをお勧めします。たとえば、ライトブルー、ダークブルー、イエローの色がある場合、ワンホットエンコーディングを使用すると、イエローよりもダークブルーとライトブルーが互いに「近い」ため、最良の結果が得られない可能性があります。

カテゴリ値が「均等」ではなく、順序付けできる場合は、カテゴリに数値を指定することもできます。たとえば、子供、ティーンエイジャー、大人は、0、1、および2として表される可能性があります。ティーンエイジャーは大人よりも子供に「近い」ため、これは理にかなっています。

Kメドイド

K-Meansへのより一般的なアプローチはK-Medoidsです。K-MedoidsはK-Meansと同様に機能しますが、主な違いは、各クラスターの重心がクラスター内の距離の合計を削減するポイントとして定義されることです。これを強制すると、任意の距離測定を使用できるようになるため、どのカテゴリに近いかどうかを考慮する独自のカスタム測定を作成できます。


1

カテゴリ変数に200以上のカテゴリがあるように、カテゴリ変数をホットエンコードできないシナリオを考えた場合。

このような場合、パッケージclustMixTypeを使用できます

混合データ(数値とカテゴリ)を処理できます。データを入力するだけで、カテゴリと数値データが自動的に分離されます。

いくつかの数値がカテゴリの下にあるなどの問題が見つかった場合は、as.factor()/その逆でas.numeric()を使用して、それぞれのフィールドでファクターに変換し、その新しいデータをアルゴリズムにフィードすることができます。

クラスタリング時に入力としてフィードインできるように、ラムダを計算します。

最適なクラスター数を見つけるために、WSS(平方和内)、plot(エルボーチャート)を取得することもできます。

この回答がより意味のある結果を得るのに役立つことを願っています。


1

上記の多くは、カテゴリー平均である変数にk-meansを実装できることを指摘しました。 誤りであり、結果はひとつまみで取得する必要があります。

上記の@Timで述べたように、スケールも順序も持たないポイント間のユークリッド距離を計算することは意味がありません。カテゴリ変数をワンホットエンコードすると、0と1のスパース行列が生成されます。値の範囲は固定されており、0から1の間であるため、連続変数と同じ方法で正規化する必要があります。Zスコアは、ポイント間の距離を見つけるために使用されます。まだ完全に正しいわけではありません。これを例で説明します。カテゴリは相互に排他的であるため、カテゴリ変数に関する2つのポイント間の距離は、高または低の2つの値のいずれかを取ります。つまり、2つのポイントは同じカテゴリに属する​​か、そうではありません。これらの極端な値のため、アルゴリズムは、クラスター形成に影響を与える連続変数よりも大きな重みを与えることになります。これは、どの変数が影響を与えているかを確認する簡単なチェックで検証でき、それらのほとんどがカテゴリ変数であることがわかるでしょう。(最も影響のある変数を見つける方法[1])

例:カテゴリー変数の国を考えます。わかっているように、異なる国からの観測値間の距離(非類似度)は等しい(隣接する国または同じ大陸からの国のような他の類似点がないと仮定して)。しかし、これとは反対に、1つのホットエンコード値を正規化した後に観測値間の距離を計算すると、高値または低値を取るという事実と一致しません(差はわずかですが)。

最終的に、Pythonで利用できる最適なオプションは、カテゴリ変数と連続変数の両方を処理できるkプロトタイプです。

[1]:クラスター形成で最も影響力のある変数を見つける:https : //stackoverflow.com/a/53081779/8224401


0

混合モデルを使用して、連続変数とカテゴリ変数で構成されるデータセットをクラスター化できます。

RパッケージVarSelLCM(CRANで利用可能)を使用して、各クラスター内でガウス分布による連続変数と順序/バイナリ変数をモデル化できます。連続変数が「数値」でカテゴリ変数が「因子」であるdata.frameにデータを保存するように注意してください。

チュートリアルは、http//varsellcm.r-forge.r-project.org/で入手できます。

さらに、欠損値は手元のモデルで管理できます。


0

私はまったく同じ問題に出くわし、(kプロトタイプが存在することを知らずに)その問題を回避しようとしました。さらに、さまざまな情報ソースが存在する可能性があり、それはデータの異なる構造または「ビュー」を暗示する可能性があります。これは、ツイッター/ウェブサイトなどの社会的関係に直面するたびに自然な問題です

可能な解決策の1つは、変数の各サブセット(つまり、数値とカテゴリ)を別々にアドレス指定することです。距離尺度が数値スケールで行うことは簡単に理解できます。カテゴリデータだけでも簡単に理解できます。バイナリ観測ベクトルの使用を検討してください。2つの観測ベクトル間の0/1の分割表には、これら2つの観測間の類似性に関する多くの情報が含まれています。バイナリベクトルのカスタマイズされたさまざまな類似性測定に関する豊富な文献があります-ほとんどは分割表から始まります。

両方が同じ観測値を記述する距離/類似度マトリックスの両方を考えると、それらのそれぞれについてグラフを抽出するか(Multi-View-Graph-Clustering)、または複数のエッジを持つ単一のグラフを抽出することができます-各ノード(観測)情報マトリックスがあるため、別のノード(マルチエッジクラスタリング)。各エッジには、対応する類似性/距離測定の重みが割り当てられます。ここから開始:Githubのグラフクラスタリングアルゴリズムのリストとその論文。単一の観測では複数の情報セットが利用可能であるため、これらは、たとえばスペクトル分析の子孫またはリンクされた行列因子分解を使用して織り交ぜる必要があります。スペクトル分析は、単一グラフの高度に接続された、または重く重み付けされた部分を見つけるためのデフォルトの方法です。織り交ぜられたデータのスペクトル埋め込みにより、数値データのクラスタリングアルゴリズムは簡単に機能します。文献のデフォルトは、単純さのためにkmeansですが、はるかに高度です-そして、このコンテキストで互換的に使用できる制限アルゴリズムがそこにあるわけではありません。

このアプローチの美しさと一般性は、単なるdtypeではなく複数の情報セットに容易に拡張可能であり、各データサブセットの特定の「メジャー」をさらに尊重する点で気に入っています。これは、さまざまな距離と類似性のメトリックでモデルを微調整したり、変数をスケーリングしたりすることを軽減しません(私は自分の分析の文脈で数値変数を比率スケールのものにスケーリングすることに気付きました)

スケーラビリティの観点から考えると、主に2つの問題があります。

  1. 固有問題の近似(アルゴリズムの豊富な文献も存在する場合)
  2. 距離行列の推定(純粋に組み合わせの問題で、非常に急速に大きくなる-まだ効率的な方法を見つけていない)

それを楽しんでください!


0

:あなたは、自動機能エンジニアリングを見たいかもしれませんhttp://www.orges-leka.de/automatic_feature_engineering.html。このメソッドはBourgain Embeddingに基づいており、カテゴリと数値の混合データフレームから、または2つのデータポイント間の距離をサポートする任意のデータセットの数値特徴を導出するために使用できます。データを数値的特徴のみに変換した後、K平均クラスタリングを直接使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.