Chúng ta đang chứng kiến việc sử dụng mạnh mẽ các phương pháp số trong các lĩnh vực khoa học và công nghệ hiện đại khác nhau
Tại sao?
Ví dụ, khi giải các bài toán kỹ thuật, người ta thường sử dụng phép tính đạo hàm của một hàm số.
Trong khoa học dữ liệu, nó không khác. Thông thường, các giá trị đầu vào của các hàm được chỉ định dưới dạng một cặp đối số-giá trị, trong các mảng dữ liệu lớn, có thể sử dụng nhiều dữ liệu đáng kể để xử lý. May mắn thay, nhiều vấn đề sẽ dễ giải quyết hơn nhiều nếu bạn sử dụng đạo hàm của một hàm, giúp ích cho nhiều lĩnh vực khác nhau như kinh tế, xử lý hình ảnh, phân tích tiếp thị, v.v.
Tính toán đạo hàm thường được sử dụng trong phân tích dữ liệu. Chẳng hạn, khi tìm giá trị tối ưu của các hàm. Việc tính toán đạo hàm cũng được sử dụng cho phương pháp gradient khi huấn luyện mạng nơ-ron
Trong bài đăng này, chúng tôi kiểm tra cách bạn có thể tính giá trị của đạo hàm bằng các phương pháp số trong Python
Nguyên tắc phân biệt số
Phân biệt số dựa trên phép tính gần đúng của hàm mà từ đó đạo hàm được lấy bởi một đa thức nội suy. Tất cả các công thức cơ bản để phân biệt số có thể thu được bằng cách sử dụng đa thức nội suy đầu tiên của Newton
Công thức chung để tính đạo hàm là
Ở đây, các hệ số aj và b phụ thuộc vào bậc n của đa thức nội suy được sử dụng, tức là vào độ chính xác cần thiết. Các hệ số lên đến bậc 5 có thể được trình bày dưới dạng bảng
Bạn có thể dễ dàng nhận được công thức tính đạo hàm số của một hàm tại một điểm bằng cách thay thế các giá trị cần thiết của các hệ số
Ví dụ, phương pháp Euler, phương pháp số đơn giản nhất để giải các hệ phương trình vi phân thông thường, sẽ như thế này
Phương pháp của Euler có thể được biểu diễn bằng đồ họa như sau
Phương pháp Python để phân biệt số
Chẳng hạn, hãy lấy hàm y = f [x], y = x2. Sau đó, hãy đặt giá trị hàm ở dạng cặp x, y với bước 0. 01 cho phạm vi của x từ 0 đến 4
Chúng ta sẽ sử dụng đạo hàm scipy để tính đạo hàm bậc nhất của hàm. Vui lòng không viết mã của riêng bạn để tính đạo hàm của một hàm cho đến khi bạn biết tại sao bạn cần nó. scipy cung cấp triển khai nhanh các phương thức số và nó được biên dịch trước và thử nghiệm trên nhiều trường hợp sử dụng
import numpy
import matplotlib.pyplot as plt
def f[x]:
return x*x
x = numpy.arange[0,4,0.01]
y = f[x]
plt.figure[figsize=[10,5]]
plt.plot[x, y, 'b']
plt.grid[axis = 'both']
plt.show[]
Bây giờ, hãy lấy một chức năng từ scipy. thư viện misc và tính giá trị của đạo hàm tại điểm x = 1. Hãy đặt bước dẫn xuất của phương thức thành 0. 001
Để biết thêm thông tin về scipy. linh tinh. phái sinh, vui lòng tham khảo sách hướng dẫn này. Nó cho phép bạn tính đạo hàm bậc nhất, đạo hàm bậc hai, v.v. Nó chấp nhận các hàm làm đầu vào và hàm này có thể được biểu diễn dưới dạng hàm Python. Cũng có thể cung cấp tham số "khoảng cách" dx, điều này sẽ cung cấp cho bạn khả năng thiết lập bước của các khoảng đạo hàm
# //docs.scipy.org/doc/scipy-0.18.0/reference/generated/scipy.misc.derivative.html
#
from scipy.misc import derivative
d = derivative[f, 1.0, dx=1e-3]
print [d]
1.9999999999998352
Ngoài ra, bạn có thể sử dụng thư viện numpy để tính toán tất cả các giá trị đạo hàm trong phạm vi x = 0. 4 với bước 0. 01 như chúng ta đã đặt trong chức năng nhập liệu. Sau đó, bạn có thể sử dụng np. phương pháp gradient.
import numpy as np
dy = np.gradient[y]
dx = np.gradient[x]
d = dy/dx
d
array[[0.01, 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,
0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,
0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,
...
7.26, 7.28, 7.3 , 7.32, 7.34, 7.36, 7.38, 7.4 , 7.42, 7.44, 7.46,
7.48, 7.5 , 7.52, 7.54, 7.56, 7.58, 7.6 , 7.62, 7.64, 7.66, 7.68,
7.7 , 7.72, 7.74, 7.76, 7.78, 7.8 , 7.82, 7.84, 7.86, 7.88, 7.9 ,
7.92, 7.94, 7.96, 7.97]]
Bạn cũng có thể sử dụng tùy chọn này để có kết quả chính xác hơn một chút so với tùy chọn trước đó
import numpy as np
np.gradient[y, x]
array[[0.01, 0.02, 0.04, 0.06, 0.08, 0.1 , 0.12, 0.14, 0.16, 0.18, 0.2 ,
0.22, 0.24, 0.26, 0.28, 0.3 , 0.32, 0.34, 0.36, 0.38, 0.4 , 0.42,
0.44, 0.46, 0.48, 0.5 , 0.52, 0.54, 0.56, 0.58, 0.6 , 0.62, 0.64,
...
7.26, 7.28, 7.3 , 7.32, 7.34, 7.36, 7.38, 7.4 , 7.42, 7.44, 7.46,
7.48, 7.5 , 7.52, 7.54, 7.56, 7.58, 7.6 , 7.62, 7.64, 7.66, 7.68,
7.7 , 7.72, 7.74, 7.76, 7.78, 7.8 , 7.82, 7.84, 7.86, 7.88, 7.9 ,
7.92, 7.94, 7.96, 7.98, 7.99]]
Nếu bạn nhìn vào đồ thị của hàm đạo hàm, bạn sẽ có dạng sau
Ước tính lỗi với một hình thức phân tích vi phân
Ước tính lỗi để tính giá trị số của đạo hàm có thể được thực hiện bằng cách tính công thức cho đạo hàm theo cách giải tích và thay thế giá trị tại một điểm mong muốn
Ví dụ: đối với hàm chúng tôi đang xem xét trong ví dụ này, bạn có thể tính toán phân tích công thức như sau
y = x2
y ‘ = 2 x
Sau đó, tại điểm x = 4, bạn sẽ nhận được giá trị của đạo hàm 8. Các phương pháp số từ trước mang lại 7. 97 và 7. 99 kết quả, đó là do tính gần đúng của đạo hàm
Giá trị được tính bằng các phương pháp trên có thể khác nhau khoảng 0. 01. Lý do cho sự khác biệt này là gì?
Trước tiên, bạn cần chọn đúng giá trị lấy mẫu cho hàm. Bước càng nhỏ, giá trị tính toán sẽ càng chính xác
Thứ hai, bạn phải chọn bậc của hàm tích phân giống với bậc của đa thức của hàm được phân biệt
Bạn cũng cần xem xét vùng ổn định tuyệt đối cho các phương pháp phân biệt số đã cho. Chẳng hạn, các phương pháp Euler ngược và xuôi có thể hiển thị các vùng ổn định khác nhau, i. e. , cần có bước khác biệt hóa nhỏ. Vui lòng tìm thêm thông tin tại đây
Ngoài phân biệt scipy, bạn cũng có thể sử dụng phân biệt phân tích trong Python. Gói SymPy cho phép bạn thực hiện các phép tính ở dạng phân tích của một công cụ phái sinh. Trong một số trường hợp, bạn cần có công thức giải tích đạo hàm để có kết quả chính xác hơn. Các dạng tính toán tượng trưng có thể chậm đối với một số hàm, tuy nhiên trong quá trình nghiên cứu có những trường hợp dạng giải tích chiếm ưu thế hơn so với phương pháp số
Phần kết luận
Lĩnh vực khoa học dữ liệu và học máy đang phát triển nhanh chóng đòi hỏi các chuyên gia lĩnh vực nắm vững các thuật toán và phương pháp tính toán
Python là một đồng minh tuyệt vời khi giải quyết các loại vấn đề này nhờ mạng lưới thư viện và khung phát triển của nó
Kiến thức về các phương pháp số cơ bản là cần thiết trong quá trình này. Các chuyên gia của Hệ thống Svitla có kiến thức sâu rộng trong lĩnh vực này và có nhiều kinh nghiệm thực tế trong việc giải quyết vấn đề trong lĩnh vực khoa học dữ liệu và máy học
Yêu cầu sự trợ giúp của chuyên gia và phát triển dự án tại Svitla Systems, nơi bạn sẽ luôn nhận được các dịch vụ chất lượng và sản phẩm chất lượng