質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.23%

  • Python

    4245questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • NumPy

    253questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

ソフトクラスタリングとハードクラスタリングの違いについて

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 83

oct0909

score 475

ソフトクラスタリングとハードクラスタリングの違いがよくわかりません。
http://fuji-151a.hatenablog.com/entry/2013/12/15/223915 の中で、
ハードクラスタリングは1つ要素は1つクラスタにのみ属するクラスタリングと、ソフトクラスタリングは1つの要素が1つ以上のクラスタに属するクラスタリングと、表現されていますが、
ではソフトクラスタリングで1つの要素が1つ以上のクラスタに属するならどのようにクラスタに分類するのでしょうか?
Fuzzy cmeansでプロットした結果、一つの点が複数のクラスに所属するということはなかったのですが...。
なぜ1つ以上のクラスタに属することが可能でも一つの点は結局一つのクラスにしか分類されないのでしょうか?

またソフトクラスタリングはハードクラスタリングに変形することもできるのでしょうか?

import skfuzzy as fuzz

ncenters=3

cntr, u_orig, _, _, _, _, _ = fuzz.cluster.cmeans(X.T, c=ncenters, m=2, error=0.005, maxiter=1000)

newdata = np.random.uniform(-1, 1, (1000, 2)) * 10
u, u0, d, jm, p, fpc = fuzz.cluster.cmeans_predict(newdata.T, cntr, m=2, error=0.005, maxiter=1000)

cluster_membership = np.argmax(u, axis=0)


というコードがあったとき、

cluster_membership = np.argmax(u, axis=0)


でuリストの最大値を与えるインデックスを取得すればハードクラスタリングのように扱えると説明があったのですが、これはハードクラスタリングに変形可能という意味でしょうか?

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

ではソフトクラスタリングで1つの要素が1つ以上のクラスタに属するならどのようにクラスタに分類するのでしょうか?

ある属性を持っているかどうかで2値分類することができます。
例えば、「国語が好きな人」、「数学が好きな人」、です。
ソフトクラスタリングでは「国語も数学も好きな人」を許します。ついでに「国語も数学も好きでない人」も許してたりします。カテゴリ数が4になります
ハードクラスタリングでは、国語・数学のうち最も好きな教科は何かと問うています。カテゴリ数が2になります。

またソフトクラスタリングはハードクラスタリングに変形することもできるのでしょうか?

ソフトクラスタリングからハードクラスタリングに変換するには、国語も数学も好きな人にどっちがより好きなのかを問えばよいわけです。

Fuzzy cmeansでプロットした結果、一つの点が複数のクラスに所属するということはなかったのですが...。

cluster_membership = np.argmax(u, axis=0)をプロットしているので。


追記:

ソフト・ハードの変換の説明に一部語弊があるかもしれなかったので、追記です。

それぞれの嗜好を2次元のベクトルで表現すると、[国語好き、数学好き]にて、そうであるのなら1、そうでないのなら0と書けます。
すると国語が好きだけど、数学が好きでないのなら[1,0]となります。
すると国語が好きでないけど、数学が好きなら[0,1]となります。
すると国語が好きでないし、数学も好きでないのなら[0,0]となります。
すると国語が好きだけど、数学も好きなら[1,1]となります。
この分類は問題設定時でソフトクラスタリングですね。
国語好きというクラスと、数学好きというクラスの両方に属することができます。

アンケートを取る際に、国語が好きか数学が好きかどちらか一方だけ必ず選んでくださいというと、
すると国語が好きを選んだのなら[1,0]となります。
すると数学が好きを選んだのなら[0,1]となります。
これがハードクラスタリングですね。
argmaxを取ると、
国語が好きを選んだのなら0となります。
数学が好きを選んだのなら1となります。

上の記述は追記する前の回答と同じことを言っています。

ただソフト・ハードの変換に情報を保存するような変換も考えられます。
それは以下のようなラベルの割当です。
国語が好きだけど、数学が好きでないのなら0とします。
国語が好きでないけど、数学が好きなら1とします。
国語が好きでないし、数学も好きでないのなら2とします。
国語が好きだけど、数学も好きなら3とします。

クラスは増えましたが、排他的になりました。ゆえにハードクラスタリングに変換されたことになります。

2項ソフトクラスタリングという用語を使っている方もいるようです。
http://msi.co.jp/vmstudio/tips/analyticsexample01_dyadic.pdf

つまるところ問題設定と取ってきたデータの処理の仕方の両方に視点を向ける必要があるということだと考えます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.23%

関連した質問

同じタグがついた質問を見る

  • Python

    4245questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • NumPy

    253questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。