文件类型
原始数据给的是CSV格式,但是经过助教整理,解压缩后是不带后缀名的UNIX可执行文件。
如何确定一个文件的类型?在终端使用file <path>
命令就可以获得文件类型。终端显示助教给的文件是ASCII text,是用ASCII编码的纯文本文件,可以用任何文本编辑器打开。
同时打开txt文本编辑器,把文件拖动到其中就可以获得文件路径。
从文件提取数据
首先保存数据路径,再从用with open(Path-for-XY) as f
读取数据。
保存数据路径,可以给定路径,也可以用{}
表示不定路径,在使用不定路径的时候一定要format语句with open(output_path.format('logistic'), 'w') as f:
。
1 | X_test_fpath = './Dataset2/X_test' |
读取数据要对数据的换行符和分隔符做处理,才能把数据放到numpy array中。strip
在每一笔数据之间删除换行符;split
函数在每一笔数据中删除每一个维度/feature上的分隔符。
在读取数据的时候要注意是否存在head,next(f)
就是跳过头部。
1 | with open(X_train_fpath) as f: |
训练TIPS
交叉验证集
利用矩阵的slice实现验证集和交叉集的分割,从dev_ratio
获得train_size
。
在完成分割后检查一下X_train/Y_train/X_dev/Y_dev的size和dim,调用shape函数,该函数返回一个list。
1 | test_size = X_test.shape[0] |
Shuffling
目的是把每笔数据的顺序打乱,标签还是对应原来数据的。
最后return的是用一个索引去索引另一个索引。 numpy-array[numpy-array] or numpy-array[list]
是可行的,但list[numpy-array]
就会报错,索引时尽可能使用numpy数组。
参考TypeError: only integer scalar arrays can be converted to a scalar index的处理方法
1 | def _shuffle(X, Y): |
截断防溢出
1 | np.clip(1 / (1.0 + np.exp(-z)), 1e-8, 1 - (1e-8)) |
对有逼近/渐近线的函数做截断。
预测输出的转换
在求解交叉熵的时候用的是最原始的预测输出(也就是通过sigmoid function后的01范围内的概率),但是在计算预测准确度的时候,要把预测输出用round转换为布尔值。
1 | y_dev_pred = _f(X_dev, w, b) |
数组操作
转置
- 使用
X.T
属性,适用于一维和二维数组 - 使用
X.transpose()
方法,对于高维数组需要由轴编号组成的元组才能依据轴转置。
相乘
np.dot(X1, X2)
或者X1.dot(X2)
参考
- 本文标题:MLHW2-tips
- 本文作者:徐徐
- 创建时间:2020-11-08 20:08:40
- 本文链接:https://machacroissant.github.io/2020/11/08/MLHW2-tips/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!