Lớp numpy
v = np.array[[[2],[1],[3]]]1 được sử dụng để biểu diễn cả ma trận và vectơ. Để xây dựng một ma trận trong numpy, chúng ta liệt kê các hàng của ma trận trong một danh sách và chuyển danh sách đó tới hàm tạo mảng numpy
Ví dụ, để xây dựng một mảng numpy tương ứng với ma trận
chúng tôi sẽ làm
A = np.array[[[1,-1,2],[3,2,0]]]
Các vectơ chỉ là các mảng có một cột. Ví dụ, để xây dựng một véc tơ
chúng tôi sẽ làm
v = np.array[[[2],[1],[3]]]
Một cách tiếp cận thuận tiện hơn là hoán vị vectơ hàng tương ứng. Ví dụ: để tạo vectơ ở trên, thay vào đó, chúng ta có thể hoán vị vectơ hàng
Mã cho điều này là
v = np.transpose[np.array[[[2,1,3]]]]
numpy làm quá tải chỉ mục mảng và các ký hiệu cắt để truy cập các phần của ma trận. Ví dụ: để in mục dưới cùng bên phải trong ma trận A, chúng tôi sẽ thực hiện
print[A[1,2]]
Để cắt cột thứ hai trong ma trận A, chúng ta sẽ làm
col = A[:,1:2]
Phần đầu tiên chọn tất cả các hàng trong A, trong khi phần thứ hai chỉ chọn mục ở giữa trong mỗi hàng
Để thực hiện phép nhân ma trận hoặc phép nhân vectơ-ma trận, chúng ta sử dụng phương thức
v = np.array[[[2],[1],[3]]]2
w = np.dot[A,v]
Giải hệ phương trình với numpy
Một trong những vấn đề phổ biến hơn trong đại số tuyến tính là giải phương trình vectơ-ma trận. Đây là một ví dụ. Chúng tôi tìm kiếm vectơ x giải phương trình
x = b
ở đâu
Chúng tôi bắt đầu bằng cách xây dựng các mảng cho A và b
Để giải hệ ta làm
x = np.linalg.solve[A,b]
Ứng dụng. hồi quy tuyến tính bội
Trong một vấn đề hồi quy bội, chúng tôi tìm kiếm một hàm có thể ánh xạ các điểm dữ liệu đầu vào thành các giá trị kết quả. Mỗi điểm dữ liệu là một vectơ đặc trưng [x1 , x2 , …, xm] bao gồm hai hoặc nhiều giá trị dữ liệu nắm bắt các đặc điểm khác nhau của đầu vào. Để biểu diễn tất cả dữ liệu đầu vào cùng với vectơ giá trị đầu ra, chúng tôi thiết lập ma trận đầu vào X và vectơ đầu ra y
Trong một mô hình hồi quy tuyến tính bình phương nhỏ nhất đơn giản, chúng ta tìm kiếm một véc tơ β sao cho tích Xβ gần đúng nhất với véc tơ kết quả y
Khi chúng tôi đã xây dựng vectơ β, chúng tôi có thể sử dụng nó để ánh xạ dữ liệu đầu vào thành kết quả dự đoán. Đưa ra một vectơ đầu vào ở dạng
chúng ta có thể tính toán một giá trị kết quả dự đoán
Công thức tính vectơ β là
β = [XT X]-1 XT y
Trong chương trình ví dụ tiếp theo của chúng ta, tôi sẽ sử dụng numpy để xây dựng các ma trận và vectơ thích hợp và giải tìm vectơ β. Khi chúng tôi đã giải được β, chúng tôi sẽ sử dụng nó để đưa ra dự đoán cho một số điểm dữ liệu thử nghiệm mà ban đầu chúng tôi đã loại bỏ khỏi tập dữ liệu đầu vào của mình
Giả sử chúng ta đã xây dựng ma trận đầu vào X và vectơ kết quả y ở dạng numpy, đoạn mã sau sẽ tính toán vectơ β
Xt = np.transpose[X] XtX = np.dot[Xt,X] Xty = np.dot[Xt,y] beta = np.linalg.solve[XtX,Xty]
Dòng cuối cùng sử dụng
v = np.array[[[2],[1],[3]]]3 để tính β, vì phương trình
β = [XT X]-1 XT y
về mặt toán học tương đương với hệ phương trình
[XT X] β = XT y
Tập dữ liệu tôi sẽ sử dụng cho ví dụ này là tập dữ liệu giá nhà ở Windsor, tập dữ liệu này chứa thông tin về doanh số bán nhà ở khu vực Windsor, Ontario. Các biến đầu vào bao gồm một loạt các yếu tố có khả năng ảnh hưởng đến giá nhà, chẳng hạn như diện tích lô đất, số phòng ngủ và sự hiện diện của các tiện nghi khác nhau. Tệp CSV với bộ dữ liệu đầy đủ có sẵn tại đây. Tôi đã tải xuống bộ dữ liệu từ trang web này, nơi cung cấp một số lượng lớn các bộ dữ liệu bao gồm nhiều chủ đề
Bây giờ đây là mã nguồn cho chương trình ví dụ
import csv import numpy as np def readData[]: X = [] y = [] with open['Housing.csv'] as f: rdr = csv.reader[f] # Skip the header row next[rdr] # Read X and y for line in rdr: xline = [1.0] for s in line[:-1]: xline.append[float[s]] X.append[xline] y.append[float[line[-1]]] return [X,y] X0,y0 = readData[] # Convert all but the last 10 rows of the raw data to numpy arrays d = len[X0]-10 X = np.array[X0[:d]] y = np.transpose[np.array[[y0[:d]]]] # Compute beta Xt = np.transpose[X] XtX = np.dot[Xt,X] Xty = np.dot[Xt,y] beta = np.linalg.solve[XtX,Xty] print[beta] # Make predictions for the last 10 rows in the data set for data,actual in zip[X0[d:],y0[d:]]: x = np.array[[data]] prediction = np.dot[x,beta] print['prediction = '+str[prediction[0,0]]+' actual = '+str[actual]]
Bộ dữ liệu gốc bao gồm hơn 500 mục. Để kiểm tra tính chính xác của các dự đoán do mô hình hồi quy tuyến tính đưa ra, chúng tôi sử dụng tất cả trừ 10 mục nhập dữ liệu cuối cùng để xây dựng mô hình hồi quy và tính toán β. Khi chúng tôi đã xây dựng vectơ β, chúng tôi sử dụng nó để đưa ra dự đoán cho 10 giá trị đầu vào cuối cùng và sau đó so sánh giá nhà dự đoán với giá nhà thực tế từ tập dữ liệu
Đây là kết quả đầu ra của chương trình
v = np.array[[[2],[1],[3]]]0
Nhìn chung, các dự đoán không tốt một cách ngoạn mục, nhưng một số dự đoán gần như đúng. Đưa ra dự đoán tốt hơn từ dữ liệu này sẽ là chủ đề của hướng dẫn học kỳ mùa đông về máy học