Bài tập Python AI

Bài đăng này là một phần của loạt bài bao gồm các bài tập từ lớp học máy của Andrew Ng trên Coursera. Mã gốc, văn bản bài tập và tệp dữ liệu cho bài đăng này có sẵn tại đây

Phần 1 — Hồi quy tuyến tính đơn giản
Phần 2 — Hồi quy tuyến tính đa biến
Phần 3 — Hồi quy logistic
Phần
Part 5 — Neural Networks
Part 6 — Support Vector Machines
Part 7 — K-Means Clustering & PCA
Part 8 — Anomaly Detection & Recommendation

Trong phần 1 của loạt bài về học máy bằng Python, chúng ta đã xem phần đầu tiên của bài tập 1 trong lớp Học máy của Andrew Ng. Trong bài đăng này, chúng tôi sẽ kết thúc bài tập 1 bằng cách hoàn thành phần 2 của bài tập. Nếu bạn còn nhớ, trong phần 1, chúng ta đã thực hiện hồi quy tuyến tính để dự đoán lợi nhuận của một chiếc xe bán thức ăn mới dựa trên dân số của thành phố mà chiếc xe tải đó sẽ được đặt vào. Đối với phần 2, chúng tôi có một nhiệm vụ mới - dự đoán giá mà một ngôi nhà sẽ bán. Sự khác biệt lần này là chúng ta có nhiều hơn một biến phụ thuộc. Chúng tôi đã cung cấp cả kích thước của ngôi nhà tính bằng feet vuông và số phòng ngủ trong nhà. Chúng ta có thể dễ dàng mở rộng mã trước đây của mình để xử lý hồi quy tuyến tính đa biến không?

Đầu tiên chúng ta hãy xem dữ liệu

path = os.getcwd[] + '\data\ex1data2.txt'  
data2 = pd.read_csv[path, header=None, names=['Size', 'Bedrooms', 'Price']]
data2.head[]

[Ghi chú. Phương tiện không thể kết xuất bảng — ví dụ đầy đủ ở đây]

Lưu ý rằng quy mô của các giá trị cho mỗi biến là rất khác nhau. Một ngôi nhà thường sẽ có 2–5 phòng ngủ nhưng có thể có từ hàng trăm đến hàng nghìn mét vuông. Nếu chúng tôi chạy thuật toán hồi quy của mình trên dữ liệu này như hiện tại, thì biến "kích thước" sẽ có trọng số quá nặng và cuối cùng sẽ làm giảm bất kỳ đóng góp nào từ tính năng "số lượng phòng ngủ". Để khắc phục điều này, chúng ta cần thực hiện một thứ gọi là “chuẩn hóa tính năng”. Tức là chúng ta cần điều chỉnh quy mô của các tính năng để tạo sân chơi bình đẳng. Một cách để làm điều này là lấy giá trị trung bình của đối tượng đó trừ đi giá trị trung bình của từng giá trị trong một đối tượng địa lý, sau đó chia cho độ lệch chuẩn. May mắn thay, đây là một dòng mã sử dụng gấu trúc

data2 = [data2 - data2.mean[]] / data2.std[]  
data2.head[]

[Ghi chú. Phương tiện không thể kết xuất bảng — ví dụ đầy đủ ở đây]

Tiếp theo, chúng ta cần sửa đổi cách triển khai hồi quy tuyến tính từ phần 1 để xử lý nhiều hơn 1 biến phụ thuộc. Hay chúng ta?

def gradientDescent[X, y, theta, alpha, iters]:  
temp = np.matrix[np.zeros[theta.shape]]
parameters = int[theta.ravel[].shape[1]]
cost = np.zeros[iters]
for i in range[iters]:
error = [X * theta.T] - y
for j in range[parameters]:
term = np.multiply[error, X[:,j]]
temp[0,j] = theta[0,j] - [[alpha / len[X]] * np.sum[term]]
theta = temp
cost[i] = computeCost[X, y, theta]
return theta, cost

Nhìn kỹ vào dòng mã tính thuật ngữ lỗi. lỗi = [X * theta. T] — y. Lúc đầu có thể không rõ ràng nhưng chúng tôi đang sử dụng tất cả các phép toán ma trận. Đây là sức mạnh của đại số tuyến tính tại nơi làm việc. Mã này sẽ hoạt động chính xác cho dù có bao nhiêu biến [cột] trong X, miễn là số lượng tham số trong theta phù hợp. Tương tự, nó sẽ tính toán lỗi cho mọi hàng trong X miễn là số lượng hàng trong y bằng nhau. Trên hết, đó là một phép tính rất hiệu quả. Đây là một cách mạnh mẽ để áp dụng BẤT KỲ biểu thức nào cho một số lượng lớn các phiên bản cùng một lúc

Vì cả hàm giảm độ dốc và hàm chi phí của chúng tôi đều đang sử dụng các phép toán ma trận, nên trên thực tế, không có thay đổi nào đối với mã cần thiết để xử lý hồi quy tuyến tính đa biến. Hãy thử nghiệm nó. Trước tiên chúng ta cần thực hiện một vài thao tác khởi tạo để tạo các ma trận thích hợp để chuyển đến các hàm của chúng ta

# add ones column
data2.insert[0, 'Ones', 1]
# set X [training data] and y [target variable]
cols = data2.shape[1]
X2 = data2.iloc[:,0:cols-1]
y2 = data2.iloc[:,cols-1:cols]
# convert to matrices and initialize theta
X2 = np.matrix[X2.values]
y2 = np.matrix[y2.values]
theta2 = np.matrix[np.array[[0,0,0]]]

Bây giờ chúng tôi đã sẵn sàng để thử. Hãy xem điều gì sẽ xảy ra

# perform linear regression on the data set
g2, cost2 = gradientDescent[X2, y2, theta2, alpha, iters]
# get the cost [error] of the model
computeCost[X2, y2, g2]

0. 13070336960771897

Trông đầy hứa hẹn. Chúng ta cũng có thể vẽ đồ thị tiến trình huấn luyện để xác nhận rằng trên thực tế, lỗi đã giảm dần với mỗi lần lặp lại quá trình giảm dần độ dốc

fig, ax = plt.subplots[figsize=[12,8]]  
ax.plot[np.arange[iters], cost2, 'r']
ax.set_xlabel['Iterations']
ax.set_ylabel['Cost']
ax.set_title['Error vs. Training Epoch']

Chi phí hoặc lỗi của giải pháp giảm xuống sau mỗi lần lặp lại liên tiếp cho đến khi chạm đáy. Đây chính xác là những gì chúng ta mong đợi sẽ xảy ra. Có vẻ như thuật toán của chúng tôi đã hoạt động

Điều đáng chú ý là chúng ta KHÔNG PHẢI triển khai bất kỳ thuật toán nào từ đầu để giải quyết vấn đề này. Điều tuyệt vời về Python là cộng đồng nhà phát triển khổng lồ và sự phong phú của phần mềm mã nguồn mở. Trong lĩnh vực máy học, thư viện Python hàng đầu là scikit-learning. Hãy xem cách chúng ta có thể xử lý tác vụ hồi quy tuyến tính đơn giản từ phần 1 bằng cách sử dụng lớp hồi quy tuyến tính của scikit-learn

from sklearn import linear_model  
model = linear_model.LinearRegression[]
model.fit[X, y]

Nó không dễ dàng hơn thế nhiều. Có rất nhiều tham số cho phương thức “phù hợp” mà chúng ta có thể điều chỉnh tùy thuộc vào cách chúng ta muốn thuật toán hoạt động, nhưng các giá trị mặc định đủ hợp lý cho vấn đề của chúng ta nên tôi để chúng yên. Hãy thử vẽ sơ đồ các tham số được trang bị để xem nó so sánh như thế nào với các kết quả trước đó của chúng tôi

x = np.array[X[:, 1].A1]  
f = model.predict[X].flatten[]
fig, ax = plt.subplots[figsize=[12,8]]
ax.plot[x, f, 'r', label='Prediction']
ax.scatter[data.Population, data.Profit, label='Traning Data']
ax.legend[loc=2]
ax.set_xlabel['Population']
ax.set_ylabel['Profit']
ax.set_title['Predicted Profit vs. Population Size']

Lưu ý rằng tôi đang sử dụng chức năng “dự đoán” để lấy các giá trị y được dự đoán để vẽ đường thẳng. Điều này dễ dàng hơn nhiều so với việc cố gắng thực hiện thủ công. Scikit-learning có API tuyệt vời với nhiều chức năng tiện lợi cho quy trình học máy điển hình. Chúng tôi sẽ khám phá một số trong số này chi tiết hơn trong các bài đăng trong tương lai

Điều này là dành cho hôm nay. Trong phần 3, chúng ta sẽ xem qua bài tập 2 và đi sâu vào một số nhiệm vụ phân loại bằng hồi quy logistic

Làm cách nào để đào tạo AI trong Python?

Trăn AI. Cách xây dựng mạng nơ-ron và đưa ra dự đoán .
Tính toán lỗi dự đoán
Hiểu cách giảm lỗi
Áp dụng quy tắc chuỗi
Điều chỉnh các tham số bằng Backpropagation
Tạo lớp mạng thần kinh
Đào tạo mạng với nhiều dữ liệu hơn
Thêm nhiều lớp hơn vào mạng lưới thần kinh

Python có tốt cho việc tạo AI không?

Python là ngôn ngữ mã chính cho AI và ML . Nó vượt qua Java về mức độ phổ biến và có nhiều lợi thế, chẳng hạn như hệ sinh thái thư viện tuyệt vời, Tùy chọn trực quan hóa tốt, Rào cản gia nhập thấp, Hỗ trợ cộng đồng, Tính linh hoạt, Khả năng đọc và Nền tảng độc lập.

Tôi có thể thực hành Python để học máy ở đâu?

9 tài nguyên miễn phí hàng đầu để học Python cho máy học .
1. Lớp Python của Google. .
2. Giới thiệu về Khoa học dữ liệu bằng Python. .
3. Khoa học dữ liệu, Học máy, Phân tích dữ liệu, Python & R. .
4. MatPlotLib với Python. .
5. Khoa học dữ liệu với phép loại suy, thuật toán và các vấn đề đã giải quyết. .
6. Máy học trong Python

Tôi có thể học AI trong 6 tháng không?

Nếu bạn đang bắt đầu từ đầu và học những kiến ​​thức cơ bản về AI, thì bạn sẽ có thể làm được điều đó trong khoảng sáu tháng . Tại thời điểm đó, bạn có thể bắt đầu tìm kiếm các vị trí cấp đầu vào. Nếu bạn đang học AI phức tạp hơn, chẳng hạn như khoa học dữ liệu, bạn có thể cần bằng cấp cao và sẽ mất vài năm để kiếm được.

Chủ Đề