简单的收获和理解

比赛链接 http://bdc.saikr.com/c/cql/34541

比赛提供的数据已经被分成了训练集和测试集,这样我们就省去了划分的步骤,首先数据里面包括了序号、轨迹的坐标和时间(x,y,t)、参考点(x_,y_)、判断是机器还是人行为的0和1,然后比赛的数据的储存文件是txt,所以需要我们对数据进行处理,划分出我们需要的特征:

import numpy as np
import pandas as pd
train = pd.read_table("E:\比赛分享\data\dsjtzs_txfz_training_sample.txt", sep=' ', names=['id','numb','goal','label'])

#将数据导入并储存在命名为train的字典中,可以看到轨迹的坐标和时间以字符串的形式储存在了‘numb’的列下,参考点的坐标以字符串的形式储存在了名为‘goal’的列下,如图:


然后接下来我们将这两个细分一下:

train['numb'] = train['numb'].apply(lambda x:[list(map(float,point.split(','))) for point in x.split(';')[:-1]])
train['goal'] = train['goal'].apply(lambda x: list(map(float,x.split(","))))	


#我们一层一层的分析代码,首先apply函数,是对train['numb']的数据进行lambda匿名函数的运算,然后中括号里面是先将train['numb']通过';'将大字符串分割成一个个类似于"x,y,t"小的字符串,再利用循环将一个个小的字符串通过"."分解出一个个小的数来,这两步相当于将一个'numb'列分解成了一个二维数组,然后我们将相应的x,y,t,x_,y_进行赋值:

df = pd.DataFrame()
df['x'] = train['numb'].apply(lambda x:np.array(x)[:,0])
df['y'] = train['numb'].apply(lambda x:np.array(x)[:,1])
df['t'] = train['numb'].apply(lambda x:np.array(x)[:,2])
df['x_'] = np.array(train['goal'].tolist())[:,0]
df['y_'] = np.array(train['goal'].tolist())[:,1]

#然后我利用matplotlib库将轨迹画出:

import matplotlib.pyplot as plt

for i in range(5):
    x = list(df['x'])[i]
    y = list(df['y'])[i]

    plt.plot(x, y)
    plt.show()
下面是两个轨迹

数据分割好以后接下来就是提取特征了,我提取了大概40个特征,然后就是对特征进行筛选我使用的是SelectBest ,下面是一个简单代码

from sklearn.feature_selection import SelectKBest

from sklearn.feature_selection import chi2

y = train['label']
del train['label']
new_feature = SelectKBest(chi2, k=2).fit_transform(train,y)
new_feature['label'] = y
最后筛选出来30多个特征,后面还有模型融合等,简单说一下我对这个模型的简单理解,首先是这个图片


第一步要做的是选择一个模型,其次将训练集分成4比1的两部分,然后用4的那部分进行训练,训练得到的模型用1那部分测试,然后使用测试集进行测试。然后像图片中示意的一样,将1的部分换一下,在进行同样的训练和测试,这样的工作需要完成5次,也就是说保证内训练集的5个小部分每一个小部分都独立被测试过。接下来便需要将那五次训练分出来的五个1的部分组层一个新的训练集,测试集五次测试的平均值在组成一个新的测试集。这样用新的训练集和测试集做为下一个模型训练的训练集和测试集,所以说需要融合n个模型,则需要执行n-1这个步骤。以上只是一些简单的理解和收获,以后会更新出新的知识的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值