文章目录
作业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)
#得到损失值