【发布时间】:2015-08-16 05:50:17
【问题描述】:
简介
我有一个代表不同用户(即 user1 和 user2)的分段时间序列的 Pandas DataFrame。我想用提到的 DataFrame 训练一个 scikit-learn 分类器,但我无法理解我必须创建的 scikit-learn 数据集的形状。 由于我的系列是分段的,因此我的 DataFrame 有一个“segID”列,其中包含特定段的 ID。由于是an algorithm提供的,所以我将跳过分段的描述。
我们举个例子,user1 和 user2 都有 2 个段:print df
username voltage segID
0 user1 -0.154732 0
1 user1 -0.063169 0
2 user1 0.554732 1
3 user1 -0.641311 1
4 user1 -0.653732 1
5 user2 0.446469 0
6 user2 -0.655732 0
7 user2 0.646769 0
8 user2 -0.646369 1
9 user2 0.257732 1
10 user2 -0.346369 1
问题:
scikit-learn dataset API 说要创建一个包含 data 和 target 的 dict,但是由于它们是段而不只是列表,我该如何塑造我的数据呢?
我无法确定我的段是否适合 n_samples * n_features 结构。
我有两个想法:
1) 每个 data 样本都是一个代表一个段的列表,另一方面,target 对于每个 data 都是不同的 条目,因为它们已分组。 target_names 呢?这行得通吗?
{
'data': array([
[[-0.154732, -0.063169]],
[[ 0.554732, -0.641311, -0.653732],
[[ 0.446469, -0.655732, 0.646769]],
[[-0.646369, 0.257732, -0.346369]]
]),
'target':
array([0, 1, 2, 3]),
'target_names': array(['user1seg1', 'user1seg2', 'user2seg1', 'user2seg2'], dtype='|S10')
}
2) data 是(简单地)df.values 返回的 nparray。 target 包含对每个用户不同的段 ID.... 有意义吗?
{
'data': array([
[-0.154732],
[-0.063169],
[ 0.554732],
[-0.641311],
[-0.653732],
[ 0.446469],
[-0.655732],
[ 0.646769],
[-0.646369],
[ 0.257732],
[-0.346369]
]),
'target':
array([0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3]),
'target_names': array(['user1seg1', 'user1seg1', 'user1seg2', 'user1seg2', .....], dtype='|S10')
}
我认为主要问题是我不知道该用什么作为标签...
编辑:
好的,很清楚...标签是我的基本事实给出的,它们只是用户的名字。
elyase 的答案正是我想要的。
为了更好的说明问题,我这里解释一下segID的意思。
在时间序列模式识别中,为了隔离有意义的片段,分割可能很有用。
在测试时,我想识别片段而不是整个系列,因为系列相当长,片段在我的上下文中应该是有意义的。
请看基于“An Online Algorithm for Segmenting Time Series”的this implementation 中的以下示例。
我的 segID 只是一个代表块 id 的列。
【问题讨论】:
-
您到底想预测什么?是
segID、username还是两者兼而有之? -
我想做
username预测 -
好的,那么您是否希望将
segID用作功能(与voltage一起)? -
我不确定...我需要
segID,因为我会尝试模式匹配给定的voltage数组。所以我必须考虑(最终不完整)segments(voltage值数组)
标签: python pandas dataset scikit-learn classification