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

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

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

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

Python

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

Q&A

解決済

1回答

5883閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

NumPy

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

Python

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

0グッド

0クリップ

投稿2017/12/13 14:20

ソフトクラスタリングとハードクラスタリングの違いがよくわかりません。
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リストの最大値を与えるインデックスを取得すればハードクラスタリングのように扱えると説明があったのですが、これはハードクラスタリングに変形可能という意味でしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ではソフトクラスタリングで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

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

投稿2017/12/13 16:22

編集2017/12/14 05:23
mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問