2017年中国高校大数据挑战赛___初试

初赛提交阶段已经结束=。=学习了一小段时间python机器学习后终于感觉可以动手试试这个比赛,就把下载好的数据又翻出来,其实一开始无从下手就是不懂这数据怎么处理,现在发现还是挺简单的,最重要的阶段其实还是特征工程,选择好的特征然后带入各种各样的模型进行分类即可。数据读入用python中的list存放,代码全程暴力for循环做的,没有用numpy,然后提取了相应的特征,一个是目标坐标的x差值,一个是速度方差。数据的处理过程中很多时候会出现分母为0的情况,所以当分母为0时,时间差就改成0.1,坐标个数就改为1.下面直接贴代码,全程暴力很容易理解
#读入数据,并进行数据的预处理,以便于后面的特征提取
fr=open('dsjtzs_txfz_training.txt')
number=[]
label=[]
target=[]
train_data=fr.readlines()
for i in range(3000):
    train_data[i]=train_data[i].strip()
    number.append(train_data[i].split(' ')[0])
    label.append(train_data[i].split(' ')[3])
    target.append(train_data[i].split(' ')[2])
    train_data[i]=train_data[i].split(' ')[1]
    train_data[i]=train_data[i].split(';')
for i in range(3000):
    del(train_data[i][len(train_data[i])-1])
first=[]
target_xlabel=[]
for i in range(3000):
    target_xlabel.append(target[i].split(',')[0])
move_data=[]
for i in range(3000):
    for j in range(len(train_data[i])):
        first.extend(train_data[i][j].split(','))
    move_data.append(first)
    first=[]
#存放移动过程中的x坐标
move_data_xlabel=[]
for i in range(3000):
    k=0
    for j in range(int(len(move_data[i])/3)):
        first.extend(move_data[i][k].split(','))
        k=k+3
    move_data_xlabel.append(first)
    first=[]
#存放移动过程中的时刻
move_data_time=[]
for i in range(3000):
    k=2
    for j in range(int(len(move_data[i])/3)):
        first.extend(move_data[i][k].split(','))
        k=k+3
    move_data_time.append(first)
    first=[]

#计算第一个特征,坐标点误差,并存于first_feature
first_feature=[]
for i in range(3000):
    first_feature.append(abs(float(move_data[i][-3])-float(target_xlabel[i])))
#计算第二个特征,移动速度的方差
#现将x坐标差值和时间差值保存到两个列表中以便于之后的计算
difference_xlabel=[]
difference_time=[]
for i in range(3000):
    first=[]
    second=[]
    for j in range(len(move_data_time[i])-1):
        first.append(abs(float(move_data_time[i][j+1])-float(move_data_time[i][j])))
        second.append(abs(float(move_data_xlabel[i][j+1])-float(move_data_xlabel[i][j])))
    difference_xlabel.append(second)
    difference_time.append(first)
velocity=[]
#将时间为0的值换为0.1
for i in range(3000):
    m=len(difference_xlabel[i])
    for j in range(m):
        if(difference_time[i][j]==0):difference_time[i][j]=0.1
for i in range(3000):
    first=[]
    for j in range(len(difference_xlabel[i])):
        first.append(difference_xlabel[i][j]/difference_time[i][j])
    velocity.append(first)
#计算方差
second_feature=[]
average=[]
velocity_differfence=[]
for i in range(3000):
    m=len(velocity[i])
    if(m==0):m=1
    average.append(sum(velocity[i])/m)
for i in range(3000):
    m=len(velocity[i])
    first=[]
    for j in range(m):
        first.append(abs(velocity[i][j]-average[i])**2)
    velocity_differfence.append(first)
for i in range(3000):
    m=len(velocity_differfence[i])
    if(m==0):m=1
    second_feature.append(sum(velocity_differfence[i])/m)
ff=open('tezheng.txt','w')
for i in range(3000):
    ff.write(str(second_feature[i])+'\t'+str(first_feature[i])+'\t'+label[i]+'\n')
ff.close()
        

下面我们看看效果,我们处理后的样子,前两列是特征,最后一列类别标签,这样就很容易代入模型啦


我们对比一下原始数据,原始数据看到就很头大


嗯就是这样,下面我们直接可以带入K_邻近算法(参见第一篇博文)试试效果,我们用训练集的部分数据作为验证,部分作为训练

运行结果如下


好像还不错的样子...

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值