Lee-ML-Homework1
徐徐 抱歉选手

加载数据

使用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.

  • 使用droptrain_data.drop(['Date', 'stations', 'observation'], axis=1, inplace=True)。需要确定的源数据中的行列名称(labels),以及行还是列(axis=0 — index/ axis=1 — column)

非数据项转换

存在一些文字表示的数据项,如果取值为二元就可以转换成0或1的布尔值。

data[data == 'NR'] = 0

矩阵操作

reshape && -1

StackOverflow的解答

-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
2
3
4
5
6
7
8
9
10
with open('predict.csv', mode = 'w', newline='') as file:
csv_writer = csv.writer(file)
header = ['id', 'PM2.5']
csv_writer.writerow(header)
for i in range(240):
if int(test_y[i][0]) > 0:
row = ['id_'+str(i), str(int(test_y[i][0]))]
else:
row = ['id_'+str(i), '0']
csv_writer.writerow(row)

参考

MrSun Blog

CSDN 意疏

  • 本文标题:Lee-ML-Homework1
  • 本文作者:徐徐
  • 创建时间:2020-10-29 22:09:35
  • 本文链接:https://machacroissant.github.io/2020/10/29/MLHW1-tips/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论