3

[タイムスタンプ、場所] の形式で毎日のアクティビティの膨大なログを作成しました。例えば

[{1365650747255, 'san francisco'},
 {1365650743354, 'san francisco'},
 {1365650741349, 'san mateo'},
 {1365650756324, 'mountain view'},
 ...
 {1365650813354, 'menlo park'}]

この情報をマイニングして次のようなパターンを見つける方法は何ですか

  • 「日曜日の夜は、サンフランシスコの近くにいる可能性が高い」
  • 「月曜日の午後はメンローパークの近くにいる可能性が高い」

問題はそれです

  • データセットは膨大です。
  • タイムスタンプ値に関数を適用して日付/時刻/日を判断することは不可能に見えます (タイムスタンプを日付時刻値にデコードしない限り)。
4

5 に答える 5

4

あなたの問題はここにはありません。エポックからの秒数をカウントするタイムスタンプであるため、値が対象範囲であるモジュロ演算子を適用するだけで済みます。その上で分類子をトレーニングすると、今後のすべての場所を予測できるはずです。学習は時々しか行われないため、主な問題はパフォーマンスではなく、学習したデータセットを更新する方法です。すでに述べたように、これに機械学習を使用する必要はありませんが、機械学習を使用して実行したい場合は、基本的に 1d データセットで k 最近傍を使用して実行できます。

[編集]: 言語を混同しましたが、修正しました: 分類子は、統計的分類を行うアルゴリズムです。

機械学習と統計では、分類とは、カテゴリ メンバーシップが既知である観測 (またはインスタンス) を含むデータのトレーニング セットに基づいて、新しい観測が属する一連のカテゴリ (サブ母集団) を特定する問題です。[ 1 ]

私はそのようなことを行うために sklearn を使用しただけなので、以下は k 最近傍分類器 [ 2 ] を使用する方法の最小限の例です。分類できるようにするには、文字列を数値に変更し、指定されたテスト データセットで分類子をトレーニングする必要があります。その後、新しい指定されたタイムスタンプの場所を予測できます。

import numpy as np
from sklearn.neighbors import KNeighborsClassifier


data = [[1365650747255, 'san francisco'],
        [1365650743354, 'san francisco'],
        [1365650741349, 'san mateo'],
        [1365650756324, 'mountain view'],
        ...
        [1365650813354, 'menlo park']]

# Map location strings to integers and replace
location_mapping = {}
location_index = 0
for index, (time, location) in enumerate(data):
    if(not location_mapping.has_key(location)):
        location_mapping[location] = location_index
        location_index += 1

    data[index][1] = location_mapping[location]

inverse_location_mapping = {value:key for key, value in location_mapping.items()}

data = np.array(data)
week = 60 * 60 * 24 * 7

# Setup classifier
classifier = KNeighborsClassifier(n_neighbors=10)

# Train classifier on given data
classifier.fit(data[:, 0] % week, data[:, 1]) 

# Predict desired location
prediction = classifier.predict([[1365444444444 % week]]))
print(inverse_location_mapping[prediction])

[ 1 ] : http://en.wikipedia.org/wiki/Statistical_classification

[ 2 ] : http://scikit-learn.org/dev/modules/generated/sklearn.neighbors.KNeighborsClassifier.html

于 2013-04-11T14:26:13.927 に答える
2

このソリューションのパフォーマンスは、パターン認識の要件がどの程度細分化されているかによって異なります。あなたの要件が1日を4つの部分に分割していると仮定しましょう: Morning,Noon,Evening,Night、それらを呼び出しましょうtime_slots

では、1 日、2 年、3 年と、あなたの毎日のアクティビティ ログがどのくらい大きいか見てみましょう。

1年と仮定しましょう。

したがって、合計 365 * 4 = 1460 のタイムスロットを監視する必要があります。

次に、各 のタイムスタンプに基づいて簡単なマップを作成しますtime_slot。例えば。T1 で始まり、T2 で終了します (ここで、T1 と T2 は 1365650813354 のようなタイムスタンプです)。

ログのタイムスタンプ値に基づいて、time_slot1 月 28 日の夕方または 1 月 30 日の朝を簡単に見つけることができます。

time_slotvs place_i_was データを、適切なスキーマを持つ適切なデータベースに保存する必要があります。それは、必要なクエリと分析の種類によって異なります。

これにより、データセットに対して数式を実行する必要がなくなり、定義済みのマップ/データベース ルックアップが目的を果たします。

于 2013-04-11T13:03:15.303 に答える
0

まず、タイムスタンプ値を年-月-平日に変換します。タイムスタンプ列を、年、月、曜日に対応する 3 つの列に置き換えます。

後で、日付の特定の範囲の値でグループ化し、各場所のインスタンス数を数えることができます。

于 2013-04-11T14:25:30.807 に答える