李宏毅机器学习3(HW1)

    xiaoxiao2022-07-07  202

    文章目录

    作业1:预测PM2.5的值hw1要求:hw_best 要求:数据介绍:具体代码

    作业1:预测PM2.5的值

    在这个作业中,我们将用梯度下降方法预测PM2.5的值

    hw1要求:

    1、要求python3.5+ 2、只能用(1)numpy(2)scipy(3)pandas 3、请用梯度下降手写线性回归 4、最好的公共简单基线 5、对于想加载模型而并不想运行整个训练过程的人: 请上传训练代码并命名成 train.py 只要用梯度下降的代码就行了

    hw_best 要求:

    1.要求python3.5 2.任何库都可以使用 3.在kaggle上获得你选择的更高的分数

    数据介绍:

    本次作業使用豐原站的觀測記錄,分成train set跟test set,train set是豐原站每個月的前20天所有資料test set則是從豐原站剩下的資料中取樣出來。 train.csv:每個月前20天每個小時的氣象資料(每小時有18種測資)。共12個月。 test.csv:從剩下的資料當中取樣出連續的10小時為一筆,前九小時的所有觀測數據當作feature,第十小時的PM2.5當作answer。一共取出240筆不重複的test data,請根據feauure預測這240筆的PM2.5。

    具体代码

    import pandas as pd import numpy as np train_data = pd.read_csv('train.csv') PMdata = train_data[train_data['observation']=='PM2.5'] PMdata = PMdata.iloc[:, 3:] train_x = [] train_y = [] for i in range(15): x = PMdata.iloc[:, i:i+9] x.columns = np.array(range(9)) y = PMdata.iloc[:,i+9] y.columns = np.array(range(1)) train_x.append(x) train_y.append(y) train_x = pd.concat(train_x) train_y = pd.concat(train_y) train_x = np.array(train_x,float) train_y = np.array(train_y, float) train_x = np.concatenate((np.ones((train_x.shape[0], 1)),train_x),axis=1) #上面是数据的读取和简单的处理 w = np.zeros(len(train_x[0])) lr = 10 Iteration = 10000 sum_gra = np.zeros(len(train_x[0])) for i in range(Iteration): y_new = np.dot(train_x, w) loss = y_new-train_y gra = 2*np.dot(train_x.transpose(), loss) sum_gra += gra**2 ada = np.sqrt(sum_gra) w = w - lr*gra/ada #训练模型得到权重w test_data = pd.read_csv('test.csv') PMtest = test_data[test_data['AMB_TEMP'] == 'PM2.5'] PMtest = PMtest.iloc[:,2:] test_x = np.array(PMtest, float) test_x = np.concatenate((np.ones((test_x.shape[0],1)),test_x),axis=1) y_pre = np.dot(test_x, w) #同样的处理,以及让得到的模型权重w乘上特征x,来得到预测值y y_submit=pd.read_csv('sampleSubmission.csv') y_submit.value = y_pre y_submit.to_csv('ownSubmission.csv') #生成上交文件 real = pd.read_csv('answer.csv') error = abs(y_submit.value - real.value).sum()/len(real.value) #得到损失值
    最新回复(0)