2017-08-23 18 views
2

私は、ユーザーが答えようとしているいくつかの質問と選択肢があります。彼らは、このような形式があります:KMeansのjsonデータをベクトル化する方法は?

question_id, text, choices 

を、各ユーザーのために、私は答えた質問を保存し、MongoDBのにJSONとして各ユーザが選択肢を選択:

{user_id: "", "question_answers" : [{"question_id": "choice_id", ..}] } 

は今、私はKを使用しようとしています - クラスタリングとストリーミングを使用して、選択肢の選択肢に基づいて最も類似したユーザーを見つけることができますが、ユーザーデータをSparkの文書hereの例のようないくつかのベクトル番号に変換する必要があります。

関数kmeansデータサンプルと私の所望の出力:

0.0 0.0 0.0 
0.1 0.1 0.1 
0.2 0.2 0.2 
9.0 9.0 9.0 
9.1 9.1 9.1 
9.2 9.2 9.2 

私はすでにのscikit-学ぶDictVectorizerを使用してみましたが、それは正常に動作していないようです。

私はこのような各question_choiceの組み合わせのキーを作成しました:

from sklearn.feature_extraction import DictVectorizer 
v = DictVectorizer(sparse=False) 
D = [{'question_1_choice_1': 1, 'question_1_choice_2': 1}, ..] 
X = v.fit_transform(D) 

そして、私はこれに私のユーザの質問/選択肢のペアのそれぞれを変換しよう:

v.transform({'question_1_choice_2': 1, ...}) 

そして、私は結果を得ますこのように:

[[ 0. 1. 0. 0. 0. 0. 0. 0. 0. 0.]] 

これは正しいアプローチですか?なぜなら私はいつも私の選択肢と答えのすべてを記述する必要があるからです。スパークでこれを行う方法はありますか?

ありがとうございます。申し訳ありませんが、私はデータサイエンスの新しいです。

+0

あなたの読書形式は何ですか?あなたのデータをどのように読んでいますか?タイプは何ですか? – eliasah

+0

@eliasah私はjsonであるmongodbからそれを読んでいます。このようにして、まずベクタライザを生成するための質問と選択肢をロードしてから、効率的ではないと思われるベクタライザを使用してデータを変換する必要があります。 –

+3

JSONデータを表示するK-Meansサンプルデータに関連付けるのは少し難しいです。 K-Meansを使用すると、実際に間隔や比率のデータを処理していることを確認する必要があります。データが公称または序数である場合、K平均を使用することはできません。ただし、公称データまたは順序データの非類似性で動作するK-Modesを使用することはできます。関連論文:J.M.Peñaet al。による「K-Meansアルゴリズムのための4つの初期化方法の経験的比較」およびJoshua Zhexue Huangによる「kモードによる分類データのクラスタリング」。 – henrikstroem

答えて

2

カテゴリデータを使用してK-Meansを使用しないでください。 How to understand the drawbacks of K-meansKevinKimで私が引用してみましょう:K-手段は、各属性(変数)の分布の分散が球状であると仮定し

  • すべての変数は同じ分散を持ちます。

  • すべてのk個のクラスタについての事前確率は同じであり、すなわち各クラスタは概ね等しい数の観測値を有する。これらの3つの仮定のいずれかに違反した場合、k-meansは失敗する。最初の2つの仮定に違反することはほぼ確実であるエンコードされたカテゴリのデータと

K-means clustering is not a free lunchDavid Robinsonを参照してください。類似検索のための質問の彼らの選択に基づいて

私が最も類似ユーザを見つけるために、K平均クラスタリングとストリーミングを使用しようとしている

は概算でMinHashLSHを使用して結合します

StringIndexと次の答えに示すように、そのための個のすべての変数:

henrikstroemでもthe comment参照してください。

+1

これは私のコメントのOPの最後の質問で私が指摘したものです。 – eliasah

関連する問題