加载数据
使用pandas
库,import pandas as pd
。
data = pd.read_csv('path');
在加载数据的时候默认第一行就是列号,但是出现第一行就是数据的情况需要添加pd.read_csv('./Dataset/test.csv', header=None)
。
数据预处理
无关行/列处理
如果存在不是数据,只是辅助信息的多余的列,需要剔除。
- 使用
iloc
,即data.iloc[:, 3:]
表示保留所有行,列从第三列开始保留。
与python中slice的区别
Note that contrary to usual python slices, both the start and the stop are included.
- 使用
drop
,train_data.drop(['Date', 'stations', 'observation'], axis=1, inplace=True)
。需要确定的源数据中的行列名称(labels),以及行还是列(axis=0 — index/ axis=1 — column)
非数据项转换
存在一些文字表示的数据项,如果取值为二元就可以转换成0或1的布尔值。
data[data == 'NR'] = 0
矩阵操作
reshape
&& -1
-1
意味着未知的维度,需要numpy
依据传入的另外一个参数值进行自行计算。计算遵循的原则是前后数据不能有损失,即‘The new shape should be compatible with the original shape’。
reshape(1, -1)
转换成一个行向量;reshape(-1, 1)
转换成一个列向量。
np.concatenate
在线性回归中有一个bias项要添加到x中去,使用np.concatenate((np.ones([row, column]), x), axis=1)
声明/更改数组数据类型
一般在声明一个空数组,全1数组的时候会使用dtype=float
之类的命令。
如:test_y = np.empty([240, 1], dtype=float)
在对已有的数组进行拼接/截取操作,或从某个文件读取数据到CSV,会使用.astye(float)
之类的命令强制类型转换。
如test_x = np.concatenate((np.ones([240, 1]), test_x),axis=1).astype(float)
模型训练
模型训练是在定义并初始化相关参数以及学习率之后,执行for循环。
主要内容
for循环的次数是iter_time。for循环内部需要有output_value y,每次迭代得到的loss function的结果,对loss function求gradient的结果,最后更新参数即可。
参数更新
如果使用adagrad用到了前面求的梯度,还要专门开设一个变量存放中间结果。
如果参数更新的表达式,后面的负的gradient的式子中存在分式且分母有可能为0,需要在分母上添加一个eps极小值,目的是保证分式子有意义。
模型评估
参数传递
在train的.py文件中保存好模型参数,并输出到当前路径。np.save('weight.npy', w)
在test的.py文件中读入权重。w = np.load('weight.npy')
结果输出
把test的结果输出到CSV文件,前两行通用写法,然后开始定义header并写header;之后开始用for循环写数据,写一次数据就调用一次csv_writer.writerow(content-you-want-write)
。
1 | with open('predict.csv', mode = 'w', newline='') as file: |
参考
- 本文标题:Lee-ML-Homework1
- 本文作者:徐徐
- 创建时间:2020-10-29 22:09:35
- 本文链接:https://machacroissant.github.io/2020/10/29/MLHW1-tips/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!