質問

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

言う、 NumericAttr1, NumericAttr2, ..., NumericAttrN, CategoricalAttr,

どこ CategoricalAttr 次の 3 つの値のいずれかをとります。 CategoricalAttrValue1, CategoricalAttrValue2 または CategoricalAttrValue3.

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

そこで私の質問:カテゴリ属性を分割するのは正しいですか CategoricalAttr 次のような 3 つの数値 (バイナリ) 変数に変換します。 IsCategoricalAttrValue1, IsCategoricalAttrValue2, IsCategoricalAttrValue3 ?

役に立ちましたか?

解決

標準のK-Meansアルゴリズムは、さまざまな理由でカテゴリデータに直接適用できません。カテゴリデータのサンプルスペースは個別であり、自然起源はありません。このような空間でのユークリッド距離機能は、それほど意味がありません。誰かが言ったように、「ヘビが車輪も足も持っていないという事実は、車輪や脚の相対的な価値については何も言わないことを許しません。」 (から ここ)

k-modesとして知られるk-meansのバリエーションがあり、で紹介されています この紙 カテゴリデータに適したZhexue Huangによる。説明したように、あなたが得るソリューションは初期条件に敏感であることに注意してください ここ (PDF)、たとえば。

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

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


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

他のヒント

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

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

Kモードの選択は、使用されるクラスタリングアルゴリズムの安定性を確実に進める方法です。

  1. クラスタリングアルゴリズムは、距離メトリック /類似性スコアを自由に選択できます。ユークリッドは最も人気があります。ただし、各次元 /属性のデータ分布、たとえばマハラノビスメトリックに従ってスケーリングする他のメトリックを使用できます。Illustrating the distance of data points from the center based on the distance metric used.

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

  3. K-Meansを超えて:Plain Banilla K-Meansはすでにこの問題への適切なアプローチとして除外されているため、クラスタリングをモデル適合の問題として考えるという考えに至ります。情報理論的メトリックなどのさまざまな測定値:Kullback-Liebler Divergenceは、データ分布にパラメトリックモデルを収束させようとする場合にうまく機能します。 (もちろん、GMMのようなパラメトリッククラスタリング技術はKmeansよりも遅いため、考慮すべき欠点があります)

  4. Fuzzy K-Modesクラスタリングは、カテゴリデータのようなものを扱うためにファジーロジックテクニックが開発されたため、魅力的に聞こえます。見る ファジー重心を使用したカテゴリデータのファジークラスタリング 詳細については。

また、チェックしてください: ROCK:カテゴリ属性の堅牢なクラスタリングアルゴリズム

この質問は実際には表現に関するものであり、クラスタリングに関するものではないようです。

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

簡単な方法の 1 つは、いわゆる ワンホット それはまさにあなたがやるべきだと思ったことです。「色」のように 3 つの値を取ることができる 1 つの変数ではなく、3 つの変数に分けます。これらは「color-red」、「color-blue」、および「color- yellow」であり、これらはすべて 1 または 0 の値のみを取ることができます。

これにより空間の次元が増加しますが、任意のクラスタリング アルゴリズムを使用できるようになりました。このプロセスを実行した後にデータを zscore したりホワイトニングしたりすることが意味がある場合もありますが、あなたの考えは間違いなく合理的です。

また、期待最大化クラスタリングアルゴリズムを試してみることもできます。カテゴリデータで動作することができ、クラスターが採用する可能性が最も高いカテゴリ値(または値)の統計的な可能性が得られます。

使用されているカテゴリ変数に依存します。順序変数の場合、悪い、平均的で、良いと言って、1つの変数を使用して値0,1,2と距離をここで理にかなっていることは理にかなっています(avarageは悪いと善に近いです)。ただし、注文がない場合は、上記のように1つのホットエンコードを理想的に使用する必要があります。

混合データタイプを含むデータセットでK-Meansクラスタリングを使用しないでください。むしろ、混合データタイプを適切に処理できるクラスタリングアルゴリズムが多数あります。いくつかの可能性には以下が含まれます。

1)パーティションベースのアルゴリズム:Kプロトタイプ、スクイザー
2)階層アルゴリズム:rock、凝集シングル、平均、および完全なリンケージ
3)密度ベースのアルゴリズム:Hierdenc、Mulic、Clique
4)モデルベースのアルゴリズム:SVMクラスタリング、自己組織化マップ

これらのアルゴリズムについて詳しく知りたい場合は、RUI XUが書いた原稿「クラスタリングアルゴリズムの調査」は、クラスター分析の包括的な紹介を提供します。

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

表現

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

カテゴリ変数で1ホットのエンコードを使用することは、カテゴリが互いに等距離にある場合に良い考えです。たとえば、色の青、濃い青、黄色の色がある場合、1ホットのエンコードを使用すると、濃い青と水色が黄色よりも「近い」可能性が高いため、最良の結果が得られない場合があります。

カテゴリ値が「等距離」ではなく、順序付けられる場合は、カテゴリに数値を与えることもできます。たとえば、子供、ティーンエイジャー、大人は、潜在的に0、1、および2として表される可能性があります。

K-メドイド

K-meansに対するより一般的なアプローチは、Kメドイドです。 K-メドイドはK-meansと同様に機能しますが、主な違いは、各クラスターの重心がクラスター内距離を減らすポイントとして定義されることです。これを実施することで、必要な距離測定を使用できるため、どのカテゴリが近くにあるかを考慮して、独自のカスタムメジャーを構築できます。

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

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

混合データ(数値とカテゴリの)を処理でき、データにフィードするだけで、カテゴリデータと数値データを自動的に分離します。

いくつかの数値がカテゴリーに基づいているような問題が見つかった場合、それぞれのフィールドでas.factor()/副(as.numeric()にas.factor()/副ことになり、それを因子に変換し、その新しいデータでアルゴリズムにフィードします。

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

WSS(正方形の合計)、プロット(肘チャート)を取得して、最適な数のクラスターを見つけることもできます。

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

上記の多くは、k-meansはカテゴリー的で連続的な変数に実装できると指摘しました。 間違い そして、結果は塩のピンチで服用する必要があります。

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

例:カテゴリー変数国を検討してください。現在、私たちが知っているように、さまざまな国からの観察間の距離(非類似性)は等しい(近隣諸国や同じ大陸の国のような他の類似点がないと仮定している)。しかし、これとは対照的に、1つのホットエンコード値を正規化した後の観測値間の距離を計算する場合、それらは矛盾します(違いはマイナーですが)。

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

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

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

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

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

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

私はまったく同じ問題に出くわし、頭をその周りに動かしようとしました(Kプロトタイプが存在することを知らずに)豊かな文献は、同じ距離メトリックで変数を測定しないという考えから生まれた自分自身が発生したことに気づきました。さらに、さまざまな情報源が存在する可能性があります。これは、データの異なる構造または「ビュー」を意味する場合があります。これは、Twitter / Webサイトなどの社会的関係に直面するたびに、自然な問題です。

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

両方の距離 /類似性マトリックスの両方を考えると、どちらも同じ観測値を記述しますが、それぞれにグラフを抽出し(マルチビューグラフクラスタリング)、複数のエッジを持つ単一のグラフを抽出することができます - 各ノード(観測)情報マトリックス(マルチエッジクラスタリング)があるため、別のノード。対応する同時性 /距離測定の重みが割り当てられている各エッジ。ここから始める: グラフクラスタリングアルゴリズムとその論文のgithubリスト。単一の観察結果で利用可能な複数の情報セットがあるため、これらはスペクトル分析またはリンクされたマトリックス因数分解の子孫を使用して織り込まれなければなりません。スペクトル分析は、単一グラフの高度に接続されたまたは重い部分を見つけるためのデフォルトの方法です。織り込まれたデータのスペクトル埋め込みがあるため、数値データ上のクラスタリングアルゴリズムは簡単に機能する場合があります。文献のデフォルトは、単純さの問題についてはKmeansですが、はるかに高度です - この文脈では同じ意味で使用できる制限的なアルゴリズムが存在するものではありません。

このアプローチの美しさと一般性は、単なるdtypesではなく複数の情報セットに簡単に拡張可能であり、各データサブセットの特定の「測定」をさらに尊重するためです。これは、さまざまな距離と類似性メトリックでモデルを微調整したり、変数をスケーリングしたりすることを緩和しません(分析のコンテキストで数値変数を比率スケールの変数にスケーリングすることがわかりました)

スケーラビリティの観点から、主に2つの問題があることを考慮してください。

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

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

自動機能エンジニアリングをご覧ください。 http://www.orges-leka.de/automatic_feature_engineering.html. 。この方法は、ブルゲンの埋め込みに基づいており、混合カテゴリと数値のデータフレームから数値的特徴を導き出すために、または2つのデータポイント間の距離をサポートするデータセットの数値的特徴を導き出すことができます。データを数値のみに変換したため、K-Meansクラスタリングを直接使用できます。

ライセンス: CC-BY-SA帰属
所属していません datascience.stackexchange
scroll top