2014.2.17 - 贷款预测第六天

Posted on 2014-02-23 23:03  SnakeHunt2012  阅读(175)  评论(0)    收藏  举报
经历过昨天的打击,今天上午我把数剧又重新整理了一遍。
 
在网上看说如果用load("")的方法可以载入的数据量大一些,所以我就打算直接从.csv文件转化到.mat文件,首先我随便写了个矩阵存在.mat文件中:
 
octave> x = [1 2, 3, 4; 5, 6, 7, 8]
x =

   1   2   3   4
   5   6   7   8

octave> save("x.mat", "x")

然后用文本的方式把这个x.mat文件打开是这样的:
 
# Created by Octave 3.6.2, Mon Feb 17 12:27:52 2014 CST <snakehunt2012@Linux>
# name: x
# type: matrix
# rows: 2
# columns: 4
 1 2 3 4
 5 6 7 8

然后我就照着这个模样写了个脚本convert_all.sh把.csv文件硬转化为.mat文件:
 
#!/bin/bash

# 全复制
cat train_v2.csv > train_v2.mat_0

# 去掉第一行
sed "1 d" train_v2.mat_0 > train_v2.mat_1

# 去掉第一列
sed "s/[^,]*,//" train_v2.mat_1 > train_v2.mat_2

# 替换NULL->0
sed "s/NULL/0/g" train_v2.mat_2 > train_v2.mat_3

# 替换,->空格
sed "s/,/ /g" train_v2.mat_3 > train_v2.mat_4

# 添加一列空格
sed "s/^/ /" train_v2.mat_4 > train_v2.mat_5

# 第一行插入
sed "1 i # Created by Octave 3.6.2, Mon Feb 17 08:55:04 2014 CST <snakehunt2012@Linux>" train_v2.mat_5 > train_v2.mat_6

# 第二行插入#!/bin/bash

# 全复制
cat train_v2.csv > train_v2.mat_0

# 去掉第一行
sed "1 d" train_v2.mat_0 > train_v2.mat_1

# 去掉第一列
sed "s/[^,]*,//" train_v2.mat_1 > train_v2.mat_2

# 替换NULL->0
sed "s/NULL/0/g" train_v2.mat_2 > train_v2.mat_3

# 替换,->空格
sed "s/,/ /g" train_v2.mat_3 > train_v2.mat_4

# 添加一列空格
sed "s/^/ /" train_v2.mat_4 > train_v2.mat_5

# 第一行插入
sed "1 i # Created by Octave 3.6.2, Mon Feb 17 08:55:04 2014 CST <snakehunt2012@Linux>" train_v2.mat_5 > train_v2.mat_6

# 第二行插入
sed "2 i # name: train_v2" train_v2.mat_6 > train_v2.mat_7

# 第三行插入
sed "3 i # type: matrix" train_v2.mat_7 > train_v2.mat_8

# 第四行插入
sed "4 i # rows: 105471" train_v2.mat_8 > train_v2.mat_9

# 第五行插入
sed "5 i # columns: 770" train_v2.mat_9 > train_v2.mat_10

# 全复制
cat train_v2.mat_10 > train_v2.mat
sed "2 i # name: train_v2" train_v2.mat_6 > train_v2.mat_7

# 第三行插入
sed "3 i # type: matrix" train_v2.mat_7 > train_v2.mat_8

# 第四行插入
sed "4 i # rows: 105471" train_v2.mat_8 > train_v2.mat_9

# 第五行插入
sed "5 i # columns: 770" train_v2.mat_9 > train_v2.mat_10

# 全复制
cat train_v2.mat_10 > train_v2.mat

不试不知到,原来特征数量是770个,但是csv文件中是从f1到f776,他特征命名有跳过去的数,不知到这是故意的还是怎么回事,太损了,就为这个中间错了好几次,这个脚本改了好几遍,本来笔记本内存就小,花了好长时间。。。
 
然后发现果然就可以全部载入仅octave了,然后我把这个数据换了个名字data_all存在data_all.mat中了。然后我又索性把纯用来训练的训练集也用这样的方法分隔出来了,脚本convert_train.sh:
 
#!/bin/bash

sed -n '1, 80005p' data_all.mat > train_set.mat
sed 's/: 105471/: 80000/g' train_set.mat > train.set.mat_new
sed 's/data_all/train_set/g' train_set.mat_new > train_set.mat_new_new
diff train_set.mat train_set.mat_new_new
rm train_set.mat
mv train_set.mat_new_new train_set.mat
rm train_set.mat_new
 

diff结果说明只改变了行数和名称,说明没有改错别的东西,我就想改这两行:
 
2c2
< # name: data_all
---
> # name: train_set
4c4
< # rows: 105471
---
> # rows: 80000

然后