Dẫn nhập
Trong bài xích trước, chúng ta đang khám phá vềHÀMJ(θ) CHO LINEAR REGRESSION.
Bạn đang xem: Gradient descent là gì
Ở bài này Kteam sẽ trình làng mang lại chúng ta Thuật toán thù Gradient Descent đến Linear Regression.
Nội dung
Để quan sát và theo dõi bài bác này tốt nhất có thể chúng ta cần có kiến thức và kỹ năng về:
Trong bài này chúng ta vẫn cùng mày mò về:
Gradient Descent là gì?Công thức Gradient Descent.Công thức Gradient Descent cho Linear Regression.Lập trình Gradient Descent mang đến Linear Regression.Lưu ý về Gradient Descent.Gradient Descent là gì ?
Qua các bài xích trước, bọn họ vẫn biết được cách dự đoán thù kết quả cùng với parameter bao gồm sẵn, review được độ đúng chuẩn của bộ parameter đó. Gradient Descent đó là thuật toán được sử dụng để “tìm” ra bộ parameter trong số những bài trước.
Nlỗi vào bài HÀMJ(θ) CHO LINEAR REGRESSIONcơ mà Kteam đã giới thiệu, nếu ta vẽ biểu vật của hàm J(θ) của Linear Regression, ta sẽ được biểu đồ lõm:

Nhiệm vụ của thuật toán thù Gradient Descent là sút J(θ) xuống nhỏ nhất, cùng với biểu trang bị trên thì cũng đồng nghĩa tương quan với việc tìm kiếm mặt đường mang đến khu vực phải chăng độc nhất vô nhị vào biểu thiết bị.
Cách thuật toán thù triển khai là dùng giải tích nhằm tính độ dốc (slope) của điểm hiện nay trên biểu vật rồi dịch chuyển mang đến nơi rẻ rộng từng bước một một.

Sở parameter Theta về tối ưu duy nhất đang nằm tại vị trí chỗ gồm J(θ) phải chăng nhất. Gradient Descent đã tạm dừng khi tới điểm phải chăng độc nhất.
Công thức Gradient Descent
Gradient Descent thực hiện phương thức giải tích nhằm tra cứu parameter Theta, cách làm thông thường của Gradient Descent là:

Nhìn bình thường, Gradient Descent sẽ kiểm soát và điều chỉnh parameter Theta theo



Toàn bộ thuật toán sẽ là:
Repeat until

Qua từng vòng lặp Gradient Descent, J(θ) càng ngày càng đúng đắn rộng.
Gradient Descent đến Linear Regression
Kteam sẽ tính sẵn cách làm Gradient Descent mang lại chúng ta. Nếu bạn biết giải tích, chúng ta có thể tự bản thân giải

Công thức:

Để luôn tiện rộng mang đến vấn đề lập trình, ta có thể rút gọn gàng


Vì Khi nhân ma trận, hiệu quả vẫn là tổng của các tích yêu cầu chúng ta không phải thực hiện tổng

Xem thêm: Cài Flash Player Sinhvienit, Download Phần Mềm Adobe Flash Player Full Crack
Lập trình Gradient Descent
Trong bài bác này họ chỉ thao tác cùng với Univariate Problem vị làm việc Multivariate Problem ta vẫn nên làm thêm một bước là feature normalize, Kteam đã khuyên bảo trong bài xích sau.
Import data
Kteam vẫn hỗ trợ sẵn resource của nội dung bài viết này tại:
Bài 5 - Resources
Tương tự các bài trước, thứ nhất ta đang load raw data, tiếp đến tách riêng rẽ X với y.
import numpy as np import matplotlib.pyplot as plt #thư viện vẽ biểu đồfrom functions import *#import toàn bộ tệp tin data.txtraw = np.loadtxt(‘data.txt’, delimiter = ",")#Tách mang XX = np.copy(raw)X<:,1> = X<:,0>#thêm bias 1X<:,0> = 1#Tách rước yy = raw<:,1>
Gradient Descent
Bây giờ chúng ta sẽ lập trình một hàm riêng biệt nhằm tiến hành :#tệp tin functions.py#define GradientDescentdef GradientDescent(X,y,alpha=0.02,iter=5000): #cực hiếm khoác định của alpha là 0.02, iter (số vòng lặp về tối đa) là 5000VariablesSet các vươn lên là bắt buộc dùng:
#Giá trị thuở đầu của theta = 0theta = np.zeros(np.size(X,1)) #số lượng theta bằng số cột của X#array giữ giàng các cực hiếm J vào quá trình lặpJ_hist = np.zeros((iter,2)) # kích thước là iter*2, cột đầu chỉ cần các số từ là 1 đến iter để luôn thể mang đến Việc plot. Kích thước được truyền vào qua một tupple#kích thước của training setm = np.size(y)#ma trận ngược (hòn đảo sản phẩm và cột) của XX_T = np.transpose(X)#trở nên lâm thời để khám nghiệm quá trình Gradient Descentpre_cost = computeCost(X,y,theta)Gradient Descent loopBắt đầu vòng lặp của Gradient Descent:
for i in range(0,iter): #tính không nên số (predict – y) error = predict(X,theta) – y #triển khai gradient descent nhằm biến đổi theta theta = theta – (alpha/m)*(X_T
error)Vậy là xong xuôi phần Gradient Descent cơ bản, dẫu vậy để thuật toán giỏi hơn, ta vẫn auto dừng lại Lúc đạt đến điểm buổi tối ưu. Cách nhận thấy là lúc qua 1 vòng lặp mà lại J(θ) không đổi khác những (Kteam lựa chọn mốc là -15).
#tính J hiện tại tạicost = computeCost(X,y,theta)#so sánh cùng với J của vòng lặp trước, đối chiếu 15 chữ số thập phânif np.round(cost,15) == np.round(pre_cost,15): #in ra vòng lặp hiện tại và J để dễ dàng debug print(‘Reach optima at I = %d ; J = %.6f’%(i,cost)) #thoát vòng lặp break#update pre_costpre_cost = costSave historyVậy là sẽ xong xuôi thuật tân oán Gradient Descent, ví như bạn muốn debug kĩ hơn nữa, bạn có thể lưu lại quá trình đổi khác của J(θ) trong khoảng lặp:
for i in range(0,iter): #vòng lặp gradient descent #... những cái lệnh sinh sống trên … #gìn giữ index vòng lặp bây chừ J_hist = i #giữ gìn J hiện nay J_hist = cost#--bên phía trong câu điều kiện đánh giá cost == pre_cost—#thêm toàn bộ các index còn lại sau thời điểm breakJ_hist
yield thetayield J_hist
Sử dụng Gradient Descent function
Ở trên họ vẫn load cùng phân chia data. Bây tiếng đang là bước sử dụng Gradient Descent để train – kiếm tìm theta.#file main.py#Train data
#Predictpredict = predict(X,Theta) * 10000#gửi về đơn vị người#Plot kết quảplt.figure(1)plt.plot(X<:,1>,y,’rx’)plt.plot(X<:,1>,predict/10000,’-b’) #đơn vị chức năng gốc: nghìn ngườiplt.show()#trường hợp bạn muốn vẽ thêm biểu vật J(θ), hàm show được hotline sau thời điểm vẽ biểu đồ vật J(θ)

Vẽ biểu đồ hàm J(θ)
Để debug, bạn cũng có thể vẽ hàm J(θ) nhỏng sau:
plt.figure(2)plt.plot(J_hist<:,0>,J_hist<:,1>,’-r’)plt.show() #chỉ call 1 lần vào chương trình để hiển thị các biểu đồ vật thuộc lúc

Bonus: progress bar
lúc train data, hoàn toàn có thể bạn đặt iter quá to làm cho bài toán chờ đợi dễ nản, vô vọng. Vì cầm, chúng ta cũng có thể define thêm một hàm để in progress bar nhằm biết được quá trình train:
#tệp tin functions.py#Kteam vẫn lập trính sẵn hàm printProgressBar, chúng ta cũng có thể tmê mẩn khảodef printProgressBar (iteration, total, suffix = ""): percent = ("0:." + str(1) + "f").format(100 * ((iteration+1) / float(total))) filledLength = int(50 * iteration // total) bar = "=" * filledLength + "-" * (50- filledLength) print(" Training: |%s| %s%%" % (bar, percent), kết thúc = " ") # Print New Line on Complete if iteration == total: print()Sử dụngĐể thực hiện, chỉ cần dùng hàm trong mỗi vòng lặp:
#file functions.py#--vòng lặp gradient descent—printProgressBar(i,iter)
Source code
Filefunctions.py#file functions.py#Kteam sẽ lập trính sẵn hàm printProgressBar, chúng ta cũng có thể tđắm đuối khảodef printProgressBar (iteration, total, suffix = ""): percent = ("0:." + str(1) + "f").format(100 * ((iteration+1) / float(total))) filledLength = int(50 * iteration // total) bar = "=" * filledLength + "-" * (length - filledLength) print(" Training: |%s| %s%%" % (bar, percent), end = " ") # Print New Line on Complete if iteration == total: print()def GradientDescent(X,y,alpha=0.02,iter=5000): #quý hiếm mặc định của alpha là 0.02, iter (số vòng lặp buổi tối đa) là 5000 #Giá trị lúc đầu của theta = 0 theta = np.zeros(np.size(X,1)) #số lượng theta bằng số cột của X #array giữ giàng các quý giá J vào quy trình lặp J_hist = np.zeros((iter,2)) # kích thước là iter*2, cột đầu chỉ cần những số từ 1 mang đến iter nhằm tiện mang đến Việc plot. Kích thước được truyền vào qua 1 tupple #kích cỡ của training set m = np.size(y) #ma trận ngược (hòn đảo mặt hàng và cột) của X X_T = np.transpose(X) #vươn lên là trợ thời để bình chọn quy trình Gradient Descent pre_cost = computeCost(X,y,theta) for i in range(0,iter): printProgressBar(i,iter) #tính không nên số (predict – y) error = predict(X,theta) – y #thực hiện gradient descent nhằm thay đổi theta theta = theta – (alpha/m)*(X_Terror) #tính J hiện thời cost = computeCost(X,y,theta) #đối chiếu với J của vòng lặp trước, đối chiếu 15 chữ số thập phân if np.round(cost,15) == np.round(pre_cost,15): #in ra vòng lặp hiện nay và J nhằm dễ dàng debug print(‘Reach optima at I = %d ; J = %.6f’%(i,cost)) #thêm toàn bộ các index còn lại sau khoản thời gian break J_hist
Lưu ý về Gradient Descent
Gradient Descent chỉ có thể tìm đến vị trí trũng gần nhất. Nếu các các loại hàm J(θ) có khá nhiều chỗ trũng thì hoàn toàn có thể bạn sẽ không tìm kiếm được Theta tối ưu duy nhất.
Gradient Descent cần phải có một


Resources
Các chúng ta có thể download những tệp tin text được thực hiện trong bài viết tại:
Bài 5 - Resources
Kết luận
Qua bài bác này bọn họ sẽ cùng mọi người trong nhà tìm hiểu về thuật toán thù Gradient Descent cho Linear Regression.
Tại bài bác sau, Kteam đang reviews về FEATURE NORMALIZE VÀ GRADIENT DESCENT CHO MULTIVARIATE PROBLEM.
Cảm ơn bạn đang theo dõi bài viết. Hãy để lại phản hồi hoặc góp ý của bản thân để cải tiến và phát triển bài viết tốt rộng. Đừng quên “Luyện tập – Thử thách – Không xấu hổ khó”.
Thảo luận
Nếu bạn gồm bất kỳ khó khăn xuất xắc vướng mắc gì về khóa đào tạo và huấn luyện, chớ ngần ngại đặt câu hỏi vào phần BÌNH LUẬN dưới hoặc vào mục HỎI & ĐÁPhường trên thư viện tekkenbasara.mobi.com để nhận ra sự cung cấp trường đoản cú cộng đồng.