我以[timestamp,location]格式创建了一个庞大的日常活动日志。例如
[{1365650747255, 'san francisco'},
{1365650743354, 'san francisco'},
{1365650741349, 'san mateo'},
{1365650756324, 'mountain view'},
...
{1365650813354, 'menlo park'}]
我可以采用哪些方法来查找此类信息,例如
问题在于
答案 0 :(得分:4)
我在这里看不到你的问题。由于它是一个从纪元开始计算秒数的时间戳,因此您只需应用模数运算符,其值为感兴趣的范围。如果您训练分类器,您应该能够预测每个即将到来的地方。主要问题不是性能,因为学习只是偶尔进行,而是如何更新学习的数据集。 如前所述,您不必使用机器学习,但是如果您想使用机器学习这样做,这基本上可以使用您的1d数据集上的k-nearest-neighbor来完成。
<强> [编辑]:强> 混合语言但修正了它:分类器是进行统计分类的算法。
在机器学习和统计中,分类是根据包含观察(或实例)的数据训练集来识别新观察所属的一组类别(子群体)中的哪一个的问题其类别成员资格已知。 [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
答案 1 :(得分:2)
性能是这个解决方案取决于您对模式识别的要求的细化程度。
让我们假设您的要求是将日期分为4个部分:
Morning,Noon,Evening,Night
,我们称之为time_slots
现在让我们来看看您的日常活动日志有多大,1年,2年,3年?
假设它是1年。
所以我们总共要监测365 * 4 = 1460个时段。
现在,根据每个time_slot
的时间戳创建一个简单的地图。
例如。它从T1开始到T2结束(其中T1和T2是时间戳,如1365650813354)。
根据日志中的时间戳值,很容易找到time_slot
,即1月28日晚,或者
1月30日上午。
您必须将time_slot
与place_i_was数据存储在具有适当架构的任何合适数据库中。
这取决于您想要的查询和分析类型。
这样您就不需要在数据集上运行公式,预定义的地图/数据库查找将满足您的目的。
答案 2 :(得分:2)
不确定这些问题是否需要机器学习,您可以使用常规统计数据。即建立概率分布图,x
- 时间,y
- 概率是旧金山。如果时间介于a
和b
...
这是在pandas DataFrame中加载数据的方法:
from __future__ import print_function, division
import pandas as pd
import datetime
df = pd.read_csv("data.csv",
names=["timestamp","location"],
parse_dates=["timestamp"],
date_parser=lambda x:datetime.datetime.fromtimestamp(int(x) / 1000))
print(df.head())
输出:
timestamp location
0 2013-04-11 04:25:47.255000 "san francisco"
1 2013-04-11 04:25:43.354000 "san francisco"
2 2013-04-11 04:25:41.349000 "san mateo"
3 2013-04-11 04:25:56.324000 "mountain view"
4 2013-04-11 04:26:53.354000 "menlo park"
答案 3 :(得分:1)
将时间戳转换为标记:“星期天早上”。
然后执行关联规则挖掘以获取
等规则night => home
sunday morning => running in the park
你只保留那些规则,在右边出现所需的位置。
答案 4 :(得分:0)
首先,将时间戳值转换为年 - 月 - 工作日。将timestamp列替换为与年,月和工作日对应的3列。
稍后您可以简单地按日期的某些值范围进行分组,并计算每个位置的实例数。