我有許多問題和選擇,用戶將要回答。他們有這樣的格式:如何爲KMeans矢量化Json數據?
question_id, text, choices
併爲每個用戶我保存回答問題,並選擇的選擇由每個用戶在MongoDB中一個JSON:
{user_id: "", "question_answers" : [{"question_id": "choice_id", ..}] }
現在我試圖使用k - 意味着根據他們的問題選擇尋找最相似的用戶羣集和流,但我需要將我的用戶數據轉換爲一些向量編號,如Spark的文檔here中的示例。
k均值的數據樣本和我想要的輸出:
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.]]
這是正確的做法嗎?因爲我需要每次創建一個我所有選擇和答案的字典。有沒有辦法在Spark中做到這一點?
在此先感謝。抱歉,我是數據科學新手。
什麼是您的閱讀格式?你如何閱讀你的數據?什麼是類型? – eliasah
@eliasah我會從mongodb讀取它,它是json。這樣我就需要加載問題和選擇來首先生成矢量化器,然後通過用戶使用矢量化器來轉換他們的數據,我認爲這非常有效。 –
將您的JSON數據與您展示的K-Means樣本數據關聯起來有點困難。使用K-Means,您需要確保實際處理間隔或比率數據。如果您的數據是名義或有序的,您不能使用K-Means。但是,您可以使用K模式,該模式根據名義或有序數據的不相似性進行操作。相關論文:Joshua Zhexue Huang的「用k-模式聚類分類數據」和J.M.Peña等人的「用於K-Means算法的四種初始化方法的經驗比較」。 – henrikstroem