這是乙個線性回歸的例子,先讀取資料,將b整合到w中
import numpy as np
import csv
import pandas as pd
f=open(r'c:\users\lenovo\desktop\hw1\train.csv')
data=list(csv.reader(f))
index=[i[2]=='pm2.5' for i in data]
data=
for i in range(len(index)):
if index[i] is true:
data=np.array(data)
#每天24小時,每十個小時作為一條資料,其中第10個小時的資料作為**的y
#所以每天得到的樣本資料有24-9=15 15*240=3600
x=y=
for i in range(15):
tempx=data[:,i:i+9]
tempy=data[:,i+9]
x=np.array(x,dtype=float).reshape(-1,9)
y=np.array(y,dtype=float).reshape(-1)
x=np.hstack([x,np.ones((len(x),1))])
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.8)
接著採用各種算梯度的方法
1. gd
def gd(x, y, w, lr, iters, lambdal2):
loss_his=
for i in range(iters):
s=x.dot(w)
loss1=y-s
loss=np.sum(loss1**2)/len(x)
d=np.dot(-1*x.t,loss1)/len(x) + lambdal2*w
w=w-d*lr
return w,loss_his
w = np.zeros(len(x_train[0]))
w,loss=gd(x_train,y_train,w,0.0001,20000,0)
y_gd = np.dot(x_test, w)
sum(np.abs(y_gd-y_test)/len(y_test))
2. mini-batch gradient descent
import random
def batch_data(x,y,batch):
all_len=len(y)
l=list(range(all_len))
random.shuffle(l)
ll=l[:batch]
return x[ll],y[ll]
def sgd(x, y, w, lr, iters, lambdal2):
loss_his=
for i in range(iters):
batch_x,batch_y=batch_data(x,y,200)
s=x.dot(w)
loss1=y-s
loss=np.sum(loss1**2)/len(x)
d=np.dot(-1*x.t,loss1)/len(x) + lambdal2*w
w=w-d*lr
return w,loss_his
w = np.zeros(len(x_train[0]))
w,loss=sgd(x_train,y_train,w,0.0001,20000,0)
y_sgd = np.dot(x_test, w)
sum(np.abs(y_sgd-y_test)/len(y_test))
3. adagrad
def adagrad(x, y, w, lr, iters, lambdal2):
loss_his=
grad=np.zeros(w.shape)
for i in range (iters):
s=x.dot(w)
loss1=y-s
loss=np.sum(loss1**2)/len(x)#+lambdal2*np.sum(w*w)
d=np.dot(-1*x.t,loss1)/len(x) + lambdal2*w
grad=grad+d**2
ada=np.sqrt(grad)
w=w-lr*d/ada
return w,loss_his
w = np.zeros(len(x_train[0]))
w,loss=adagrad(x_train,y_train,w,0.0001,20000,0)
y_ada = np.dot(x_test, w)
sum(np.abs(y_ada-y_test)/len(y_test))
4. adam=帶動量的sdg+rmsprop
def adam(x, y, w, lr, iters, lambdal2,beta1,beta2):
loss_his=
first_moment=0
second_moment=0
for i in range(iters):
batch_x,batch_y=batch_data(x,y,200)
s=x.dot(w)
loss1=y-s
loss=np.sum(loss1**2)/len(x)
d=np.dot(-1*x.t,loss1)/len(x) + lambdal2*w
first_moment=first_moment*beta1+(1-beta2)*d
second_moment=second_moment*beta2+(1-beta2)*d*d
w=w-lr*first_moment/np.sqrt(second_moment+1e-7)
return w,loss_his
w = np.zeros(len(x_train[0]))
w,loss=adam(x_train,y_train,w,0.0001,20000,0,0.9,0.999)
y_adam = np.dot(x_test, w)
sum(np.abs(y_adam-y_test)/len(y_test))
拓展: 機器學習 HW1相關 李巨集毅教程
hw1主要是使用liner model 進行pm2.5的 作業連線 密碼 ooqn 作業要求 1.使用前9個小時的資料,出第十個小時的pm2.5的值是多少 2.提供2014年的12個月每個月的前20天的24小時資料作為train data 3.每小時有18組資料 so2 甲烷 之類的指標 下面解析 ...
李巨集毅機器學習3 HW1
在這個作業中,我們將用梯度下降方法 pm2.5的值 1 要求python3.5 2 只能用 1 numpy 2 scipy 3 pandas 3 請用梯度下降手寫線性回歸 4 最好的公共簡單基線 5 對於想載入模型而並不想執行整個訓練過程的人 請上傳訓練 並命名成 train.py 只要用梯度下降的...
李巨集毅機器學習課程筆記 1
機器學習 自動找函式 f input output 1.regression 輸出是乙個數值 2.classification 分類 二分類 多分類 rnn 迴圈神經網路 cnn 卷積神經網路translation 繪二次元圖4.supervised learning 監督學習labeled dat...