Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L2 và L1...9 2.2.1.Mô hình dữ liệu x theo dạng bậc 6 2 biến cho hai tập dữ liệu.
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ
MINHKHOA ĐIỆN – ĐIỆN TỬBỘ MÔN TỰ ĐỘNG ĐIỀU KHIỂN
-⸙∆⸙ -TIỂU LUẬN MÔN HỌC
(Regularization)
GVHD: Trần Vũ Hoàng
i
Trang 2ii | 19
Trang 3Note: chỉ lấy tập train để tìm theta thôi, hiện tại bài
làm dùng 2 theta khác nhau.Phần trị tuyệt đối tại vị trí theta dùng hàm sign()
còn phần cost function dùng hàm abs
3
Trang 42.1.1.Thực hiện đọc dữ liệu từ file ex5data.txt lên python và biểu diễn dữ liệu 7
2.1.2.Thực hiện chia dữ liệu thành 2 tập 9
2.1.3.Thực hiện kiểm tra các matran 9
2.2 Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L2 và L1 9
2.2.1.Mô hình dữ liệu x theo dạng bậc 6 2 biến cho hai tập dữ liệu 9
2.2.2.Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L2 11
2.2.3.Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L1 12
2.3 Tính J ở mỗi vòng lặp cho cả hai tập dữ liệu, chọn điểm dừng phù hợp 13
Trang 5Danh Sách Ảnh
Hình 2-1: Đồ thị biểu diễn dữ liệu 8Hình 2-3: Đồ thị tương quan giữa hàm chi phí và hệ số lamda 16
5 | 19
Trang 6Danh Sách BảngNo table of figures entries found.
6 | 19
Trang 7Chương 1: Yêu cầu.
Các bạn sử dụng tập dữ liệu của bài tập 5, mô hình dữ liệu x theo dạng bậc 6 và làm các công việc sau:
1 Chia dữ liệu ra thành 2 tập: training (70%) và validation (30%) Phải đảm bảo việc chia dữ liệu là ngẫu nhiên và tỷ lệ positive và negative cân bằng
2 Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L2 và L1
3 Tính J ở mỗi vòng lặp cho cả hai tập, chọn điểm dừng phù hợp.4 Thay đổi lamda và tính J cho mỗi lamda tương ứng cho cả hai tập Vẽ biểu đồ
quan hệ giữa J và lamda từ đó lựa chọn lamda phù hợp
7 | 19
Trang 8Chương 2: Thực hiện2.1.Chia dữ liệu ra thành 2 tập: training (70%) và validation (30%)
Phải đảm bảo việc chia dữ liệu là ngẫu nhiên và tỷ lệ positive và negative cân bằng.
2.1.1.Thực hiện đọc dữ liệu từ file ex5data.txt lên python và biểu diễn dữ liệu.
8 | 19
#Sử dụng các thư viện numpy, pandas, matplotlib
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltdf = pd.read_csv("ex5data.txt",header = None, sep=",")x = df.values[:,:-1]
y = df.values[:,-1]m = len(y)
x_pos = x[y==1,:]x_neg = x[y==0,:]plt.scatter(x_pos[:,0],x_pos[:,1],c='r')plt.scatter(x_neg[:,0],x_neg[:,1],c='k')
Trang 9Hình 2-1: Đồ thị biểu diễn dữ liệu.
9 | 19
Trang 102.1.2.Thực hiện chia dữ liệu thành 2 tập.
2.1.3.Thực hiện kiểm tra các matran
2.2.Viết chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có sử dụng regularization L2 và L1.
2.2.1.Mô hình dữ liệu x theo dạng bậc 6 2 biến cho hai tập dữ liệu.
#Lấy ngẫu nhiên possitive 70% cho tập trainning========================
m_val=len(y_val)
#Thực hiện kiểm tra matran
x_tr.shape,x_val.shape,y_tr.shape,y_val.shape
Trang 1111 | 19
#Mô hình dữ liệu x theo dạng bậc 6 hai biến như hình bên cạnh
def mapfeature(x1,x2,m,degree): X = np.ones((m,1))
for i in range(1,degree+1): for j in range(i+1): X = np.concatenate((X,np.reshape((x1**(i-j))*x2**j,(m,1))),1) return X
degree = 6X_tr = mapfeature(x_tr[:,0],x_tr[:,1],m_tr,degree)X_val = mapfeature(x_val[:,0],x_val[:,1],m_val,degree)print(X_tr shape,X_val.shape)
Trang 122.2.2.Viết chương trình cho phép học các tham số của mô hình phânloại phi tuyến trên có sử dụng regularization L2.
12 | 19
#Chuyển ma trận x_temp sang x_new như mong đợi
ite = 10000lr = 1lamda=0.5J_tr=np.zeros(ite)J_val=np.zeros(ite)y_tr = np.reshape(y_tr,(len(y_tr),1))y_val = np.reshape(y_val,(len(y_val),1))np.random.seed(2)
theta_tr = np.random.rand(X_tr.shape[1],1)theta_tr_temp=np.copy(theta_tr)
theta_tr_temp[0]=0theta_val = np.random.rand(X_val.shape[1],1)theta_val_temp=np.copy(theta_val)
theta_val_temp[0]=0z_tr = np.dot(X_tr,theta_tr)z_val = np.dot(X_val,theta_val)h_tr = 1.0/(1.0+np.exp(-z_tr))h_val = 1.0/(1.0+np.exp(-z_val))
Trang 132.2.3.Viết chương trình cho phép học các tham số của mô hình phânloại phi tuyến trên có sử dụng regularization L1.
13 | 19
#
for i in range(ite): theta_tr = theta_tr - (lr/m_tr)*(np.dot((X_tr.T),(h_tr-y_tr)))+(lr*lamda/m_tr)*theta_tr_temp
z_tr = np.dot(X_tr,theta_tr) h_tr = 1.0/(1.0+np.exp(-z_tr)) J_tr[i]=np.mean(-y_tr*np.log(h_tr)-(1-y_tr)*np.log(1-h_tr))
theta_val = theta_val - (lr/m_val)*(np.dot((X_val.T),(h_val-y_val)))+(lr*lamda/m_val)*theta_val_temp
z_val = np.dot(X_val,theta_val) h_val = 1.0/(1.0+np.exp(-z_val)) J_val[i]=np.mean(-y_val*np.log(h_val)-(1-y_val)*np.log(1-h_val))
# chương trình cho phép học các tham số của mô hình phân loại phi tuyến trên có #sử dụng regularization L1
#Đạo hàm trị tuyệt đối theta ra dấu của theta
for i in range(ite): theta_tr = theta_tr - (lr/m_tr)*(np.dot((X_tr.T),(h_tr-y_tr)))+(lr*lamda/m_tr)*np.sign(theta_tr_temp)*theta_tr_temp
z_tr = np.dot(X_tr,theta_tr) h_tr = 1.0/(1.0+np.exp(-z_tr)) J_tr[i]=np.mean(-y_tr*np.log(h_tr)-(1-y_tr)*np.log(1-h_tr))
theta_val = theta_val - (lr/m_val)*(np.dot((X_val.T),(h_val-y_val)))+(lr*lamda/
z_val = np.dot(X_val,theta_val) h_val = 1.0/(1.0+np.exp(-z_val)) J_val[i]=np.mean(-y_val*np.log(h_val)-(1-y_val)*np.log(1-h_val))
Trang 142.3.Tính J ở mỗi vòng lặp cho cả hai tập dữ liệu, chọn điểm dừng phù hợp.
h_tr = 1.0/(1.0+np.exp(-z_tr)) J_tr[i]=np.mean(-y_tr*np.log(h_tr)-(1-y_tr)*np.log(1-h_tr))
theta_val = theta_val - (lr/m_val)*(np.dot((X_val.T),(h_val-y_val)))+(lr*lamda/m_val)*theta_val_temp
z_val = np.dot(X_val,theta_val) h_val = 1.0/(1.0+np.exp(-z_val))
#Chọn điểm dừng phù hợp
np.min(J_val)
Trang 152.4.Thay đổi lamda và tính J ở mỗi vòng lặp tương ứng cho 2 tập dữ liệu Vẽ đồ thị tương quan giữa J và lamda từ lựa chọn lamda phù hợp đó.
15 | 19
#Thay đổi lamda và tính J ở mỗi vòng lặp cho 2 tập dữ liệu
ite = 10000lr = 1lamda=0.26875102012186747J_tr=np.zeros(ite)
J_val=np.zeros(ite)y_tr = np.reshape(y_tr,(len(y_tr),1))y_val = np.reshape(y_val,(len(y_val),1))np.random.seed(2)
theta_tr = np.random.rand(X_tr.shape[1],1)theta_tr_temp=np.copy(theta_tr)
theta_tr_temp[0]=0theta_val = np.random.rand(X_val.shape[1],1)theta_val_temp=np.copy(theta_val)
theta_val_temp[0]=0z_tr = np.dot(X_tr,theta_tr)z_val = np.dot(X_val,theta_val)h_tr = 1.0/(1.0+np.exp(-z_tr))h_val = 1.0/(1.0+np.exp(-z_val))
Trang 1616 | 19
#Vẽ đồ thị tương quan giữa J và lamda
for i in range(ite): theta_tr = theta_tr - (lr/m_tr)*(np.dot((X_tr.T),(h_tr-y_tr)))+(lr*lamda/m_tr)*theta_tr_temp z_tr = np.dot(X_tr,theta_tr)
h_tr = 1.0/(1.0+np.exp(-z_tr)) J_tr[i]=np.mean(-y_tr*np.log(h_tr)-(1-y_tr)*np.log(1-h_tr))
theta_val = theta_val - (lr/m_val)*(np.dot((X_val.T),(h_val-y_val)))+(lr*lamda/m_val)*theta_val_temp
z_val = np.dot(X_val,theta_val) h_val = 1.0/(1.0+np.exp(-z_val)) J_val[i]=np.mean(-y_val*np.log(h_val)-(1-y_val)*np.log(1-h_val))plt.plot(J_tr,c='r',label = "Cost function")
plt.plot(J_val,c='b',label = "Lamda")plt.legend()
plt.title("Đồ thị tương quan giữa hàm chi phí J và hệ số lamda")plt.xlabel("X-axis")
plt.ylabel("Y-axis")
Trang 17Hình 2-2: Đồ thị tương quan giữa hàm chi phí và hệ số lamda.
17 | 19
Trang 18Tài Liệu Tham Khảo
[1]https://www.google.com/
18 | 19
Trang 19Phụ Lục
19 | 19