1

kmeans クラスタリングにオレンジを使用する予定です。チュートリアルを完了しましたが、まだ質問したいことがいくつかあります。

高次元のベクトルのクラスタリングを扱っています。1) コサイン距離は実装されていますか? 2) 空の値にゼロを与えたくありません。空のフィールドにゼロを入れないようにしましたが、エラーが発生しています:

SystemError: 'orange.TabDelimExampleGenerator': the number of attribute types does not match the number of attributes

空の値を示すにはどうすればよいですか? 3) 例のテーブルに「ID」を組み込む方法はありますか? 簡単に参照できるように、データを ID (分類ではなく) でラベル付けしたいと考えています。私は、ID 列を私のデータの公式部分とはしません。

4) kmeans クラスタリングで別の方法で出力する方法はありますか? 私はこの形式で何かを好むだろう:

cluster1: [ <id1>, <id2>, ...]
cluster2: [ <id3>, ... ]
rather than just [1, 2, 3,1 , 2, ... ]

ありがとう!

4

2 に答える 2

3

1つの質問の4つの質問は非常に厄介です-質問を1つの質問にしてみませんか?それはあなたに費用がかかるようではありません;-)。とにかく、「空の値を示すにはどうすればよいですか?」については、次のインスタンスの属性に関するドキュメントを参照してください。valueOrange.Value

値が連続的または不明な場合、記述子は必要ありません。後者の場合、結果は文字列'?'、'〜'、または'。'になります。それぞれ、わからない、気にしない、その他のために。

空の意味で「わからない」なのか「気にしない」なのかはわかりませんが、とにかくどちらかを示すことができます。ただし、距離に注意してください-ドキュメントのこの他のページから:

未知の値は、ユークリッド距離とレリーフ距離によってのみ正しく処理されます。他の距離の尺度の場合、未知と既知の間、または2つの未知の値の間の距離は常に0.5です。

この後者のページにリストされている距離は、ハミング、マキシマル、マンハッタン、ユークリッド、レリーフです(後者はマンハッタンに似ていますが、未知の値を正しく処理しています)-コサイン距離は提供されていません:自分でコーディングする必要があります。

(4)の場合、ほんの少しのPythonコードで、結果を任意の方法でフォーマットできます。KMeansオブジェクトの.clusters属性は、データインスタンスの数とまったく同じ長さのリストです。必要な場合は、データインスタンスのリストのリストを次に示します。

def loldikm(data, **k):
  km = orange.KMeans(data, **k)
  results = [[] for _ in km.centroids]
  for i, d in zip(km.clusters, data):
    results[i].append(d)
于 2010-02-07T17:02:51.047 に答える
0

元の KMeans はコサイン距離に適していないと思います。ユークリッド空間にないため、コサイン距離の重心を定義する必要があり、収束を保証できませんでした。ただし、特徴ベクトルがすべて正である場合は、試すことができます。詳細: k-means でのユーザー定義距離関数の API の追加

于 2015-01-20T03:37:04.233 に答える