我的问题是,我没有让数据框中的每一行对应一个标签,而是有多个数据框,每个数据框具有相同的列和行数,但每个数据框都标记为 l1、l2 或 l3。您需要数据框中的所有数据才能确定标签。
例如,假设我有这个数据框及其标记为 l1,并想象我有多个标记为 l1、l2 或 l3。我需要创建一个分类模型,这样当我有这样的新数据框时,它就可以对其进行分类。
Time Measure1 Measure2
1 10 1000
2 12 1245
3 20 1837
4 18 1837
如何用 R 或 Python 构建它?
我希望这是清楚的!
您的想法是正确的:为了使分类模型发挥作用,您需要在结果数据帧的单行中包含单个样本的数据。您的示例中拥有的是某种交叉表,但您需要的是平面表。幸运的是,有了 pandas,您可以使用
unstack()
: 轻松创建平板
>>> df = pd.DataFrame([[1, 10, 1000], [2, 12, 1245], [3, 20, 1837], [4, 18, 1837]],
columns=['Time', 'Measure1', 'Measure2'])
>>> s = df.set_index('Time').unstack()
>>> s
Time
Measure1 1 10
2 12
3 20
4 18
Measure2 1 1000
2 1245
3 1837
4 1837
dtype: int64
结果是带有 MultiIndex 的
pd.Series
(= 单列)。然后,您可以将标签添加到测量中,并将所有数据连接到单个数据框中。
>>> s['label'] = 'l1'
>>> df = pd.concat([s,s,s], axis=1).T
>>> df
Measure1 Measure2 label
Time 1 2 3 4 1 2 3 4
0 10 12 20 18 1000 1245 1837 1837 l1
1 10 12 20 18 1000 1245 1837 1837 l1
2 10 12 20 18 1000 1245 1837 1837 l1
在列中使用多索引有点笨拙,但你可以用
替换它们>>> df.columns = ['_'.join(str(x) for x in c).strip('_') for c in df.columns]
>>> df
Measure1_1 Measure1_2 Measure1_3 ... Measure2_3 Measure2_4 label
0 10 12 20 ... 1837 1837 l1
1 10 12 20 ... 1837 1837 l1
2 10 12 20 ... 1837 1837 l1
这与我面临的问题完全相同。
@Wolf_cola,您能否提供有关如何实际训练模型以使用标签对数据帧进行分类的指导?随机森林分类器有用吗?
不幸的是,我没有足够的学分来发表评论,因此需要写一个答案。
提前致谢。