李巨集毅 機器學習HW1

2021-09-26 10:38:08 字數 3272 閱讀 4203

這是乙個線性回歸的例子,先讀取資料,將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...