Thuật toán học máy từ đầu github

Cam kết này không thuộc về bất kỳ nhánh nào trên kho lưu trữ này và có thể thuộc về một nhánh bên ngoài kho lưu trữ

Bạn không thể thực hiện hành động đó vào lúc này

Bạn đã đăng nhập bằng tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn. Bạn đã đăng xuất trong một tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn

Cam kết này không thuộc về bất kỳ nhánh nào trên kho lưu trữ này và có thể thuộc về một nhánh bên ngoài kho lưu trữ

Bạn không thể thực hiện hành động đó vào lúc này

Bạn đã đăng nhập bằng tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn. Bạn đã đăng xuất trong một tab hoặc cửa sổ khác. Tải lại để làm mới phiên của bạn

Mục đích của dự án này là triển khai một tập hợp các thuật toán học máy từ đầu chỉ sử dụng NumPy và thư viện chuẩn Python

Việc triển khai này tập trung vào việc viết mã dễ hiểu và dễ truy cập, như một bài tập học tập để người đọc hiểu rõ hơn về hoạt động bên trong của các thuật toán học máy phổ biến

Tất cả các thuật toán được trình bày trong kho lưu trữ này đều có mã nhận xét rộng rãi, các chức năng có thể sử dụng lại, giải thích lý thuyết trong README này và đã được kiểm tra đối với các triển khai scikit-learning

Mục lục

Cài đặt

với conda

$ git clone https://github.com/harjotsodhi/ML-from-scratch.git
$ cd ML-from-scratch
$ conda env create -f environment.yml
$ conda activate ml_from_scratch_env

Triển khai

Học có giám sát

hồi quy tuyến tính

Hồi quy tuyến tính là một kỹ thuật học có giám sát được sử dụng để lập mô hình biến phản hồi liên tục dưới dạng hàm tuyến tính của một hoặc nhiều tính năng giải thích và tham số ước tính. Nó có thể được chính thức hóa toán học như sau

Trong đó véc tơ Y (N x 1) chứa biến phản ứng liên tục cho mỗi trong số N quan sát, véc tơ X (N x M+1) chứa M đặc điểm giải thích cộng với một cột đại diện cho "độ lệch" (i. e. , phần chặn) và vectơ (M+1 x 1) w chứa các tham số ước tính (i. e. , các hệ số) của mô hình hồi quy tuyến tính

Trong hồi quy tuyến tính, các tham số mô hình có thể được ước tính một cách phân tích thông qua phương pháp bình phương nhỏ nhất thông thường hoặc thông qua các phương pháp số như Độ dốc gốc. Việc triển khai hồi quy tuyến tính của dự án này bao gồm các tùy chọn để giải quyết theo cả hai cách

Việc triển khai hồi quy tuyến tính của dự án này khiến việc ước tính các tham số mô hình và đưa ra dự đoán trở nên dễ dàng. Một ví dụ thực hiện được cung cấp dưới đây

from supervised.linear_regression import Linear_regression
# example of fitting the model through gradient descent
model = Linear_regression(method="gradient_descent", normalized=False,
                          learning_rate=0.01, max_iter=10000, abs_tol=1e-9)
model.fit(X, y)
y_pred = model.predict(Z)

Thư mục con "mlfromscratch\examples" cung cấp nhiều cách triển khai mẫu với dữ liệu thực. Ví dụ hồi quy tuyến tính cho thấy trường hợp hồi quy tuyến tính trong đó chúng tôi quan tâm đến việc dự đoán phản hồi của mình chỉ dựa trên một tính năng giải thích. Mô hình kết quả có thể được nhìn thấy trực quan bên dưới

$ python -m mlfromscratch.examples.linear_reg

Thuật toán học máy từ đầu github

Hình 1. Mô hình hồi quy tuyến tính áp dụng cho bộ dữ liệu Bệnh tiểu đường (https. // trang web. standford. edu/~hastie/Papers/LARS/LeastAngle_2002. pdf)

Hồi quy logistic

Hồi quy logistic là một kỹ thuật học có giám sát được sử dụng để lập mô hình biến phản hồi phân loại dưới dạng hàm của một hoặc nhiều tính năng giải thích. Vì, không giống như trong hồi quy tuyến tính, chúng ta đang lập mô hình một biến phản hồi rời rạc chứ không phải liên tục, nhiệm vụ dự đoán được gọi là "phân loại. "

Hồi quy logistic chia sẻ một số điểm tương đồng chính với hồi quy tuyến tính. Trong hồi quy logistic, chúng tôi quan tâm đến việc ước tính xác suất có điều kiện P(y=n. X_i) quan sát đó X_i sẽ là thành viên của lớp n. Chúng tôi không cho rằng các tính năng giải thích X_j là một hàm tuyến tính của xác suất này. Thay vào đó, chúng tôi giả định rằng logit của xác suất này là một hàm tuyến tính với các đặc điểm giải thích và tham số ước tính

Các quan sát được dự đoán thuộc về lớp có xác suất dự đoán cao nhất. Ý nghĩa của logit của xác suất là một hàm tuyến tính, các tính năng giải thích và nhiệm vụ dự đoán các tham số ước tính là chúng ta có được một ranh giới quyết định tuyến tính

Hồi quy logistic có thể được khái quát hóa thành các nhiệm vụ phân loại có nhiều hơn hai lớp. Dự án này sử dụng One-vs. phương pháp -rest (OvR) để xử lý phân loại đa lớp. Cách tiếp cận này về cơ bản chia vấn đề thành k vấn đề phân loại nhị phân riêng biệt, trong đó k là số lớp bao gồm biến phản hồi

Trong hồi quy logistic, các tham số mô hình phải được ước tính thông qua các phương pháp số như Độ dốc gốc

Việc triển khai hồi quy logistic của dự án này khiến việc ước tính các tham số mô hình và đưa ra dự đoán trở nên dễ dàng. Một ví dụ thực hiện được cung cấp dưới đây

from supervised.logistic_regression import Logistic_regression
# example of fitting the model through gradient descent
model = Logistic_regression(method="gradient_descent", normalized=False,
                            learning_rate=0.01, max_iter=1000, abs_tol=1e-9)
model.fit(X, y)
y_pred = model.predict(Z)

Thư mục con "mlfromscratch\examples" cung cấp nhiều cách triển khai mẫu với dữ liệu thực. Ví dụ hồi quy logistic cho thấy trường hợp hồi quy logistic trong đó chúng tôi quan tâm đến việc dự đoán phản hồi đa lớp (k > 2) dựa trên hai tính năng giải thích. Mô hình kết quả có thể được nhìn thấy trực quan bên dưới

$ python -m mlfromscratch.examples.logistic_reg

Thuật toán học máy từ đầu github

Hình 2. Mô hình hồi quy logistic được áp dụng cho bộ dữ liệu thực vật Iris (Fisher, R. A. “Việc sử dụng nhiều phép đo trong các vấn đề phân loại” Thuyết ưu sinh hàng năm, 7, Phần II, 179-188 (1936))

XE ĐẨY

GIỎ HÀNG (cây phân loại và hồi quy) là một kỹ thuật học có giám sát được sử dụng để mô hình hóa phản hồi rời rạc (trong trường hợp cây phân loại) hoặc phản hồi liên tục (trong trường hợp cây hồi quy) thông qua cây quyết định

Các mô hình GIỎ HÀNG rất đơn giản về mặt khái niệm. Các tính năng, X, được chia tuần tự thành hai "nhánh" cho đến khi các quan sát được chia thành các nhóm đủ đồng nhất (hoặc đạt đến độ sâu tối đa được chỉ định). Các mô hình GIỎ HÀNG được coi là thuật toán học phi tham số, vì số lượng tham số trong mô hình không được chỉ định trước mà dựa trên dữ liệu và thường sẽ tăng lên khi kích thước của dữ liệu huấn luyện tăng lên

Có nhiều tiêu chí phân tách khác nhau để xác định tính năng nào sẽ phân chia tập dữ liệu thành phần tiếp theo. Nói chung, chúng tôi muốn sử dụng một tiêu chí phân chia tối đa hóa việc giảm độ không chắc chắn và do đó "tốt nhất. " Đối với cây phân loại, thường được sử dụng và được sử dụng trong triển khai này

Các mô hình GIỎ HÀNG thường sẽ làm rất tốt trong việc dự đoán dữ liệu đào tạo (đặc biệt là khi mô hình không có giới hạn về số lượng phân tách tối đa) nhưng có xu hướng bị quá khớp

Trong triển khai này, các mô hình GIỎ HÀNG được xây dựng theo cách đệ quy. Sử dụng chúng rất dễ dàng, một ví dụ triển khai cây phân loại được cung cấp bên dưới

from supervised.cart import Classification_tree
# example of fitting the classification tree
clf = Classification_tree(leaf_size=1)
clf.fit(X, y)
y_pred = clf.predict(Z)

rừng ngẫu nhiên

Random Forest là một kỹ thuật học tập có giám sát, được xây dựng dựa trên các mô hình GIỎ HÀNG. Trong thuật toán Rừng ngẫu nhiên, N cây quyết định được huấn luyện dựa trên M phiên bản khởi động của tập dữ liệu gốc. Để phân loại, dự đoán tổng thể sau đó là chế độ của N cây quyết định. Đối với hồi quy, dự đoán tổng thể là dự đoán trung bình của N cây quyết định

Rừng ngẫu nhiên giải quyết sự thiếu hụt lớn nhất của cây quyết định. trang bị quá nhiều. Rừng ngẫu nhiên có xu hướng hoạt động ngoài mẫu tốt hơn so với cây quyết định vì mỗi cây đã được huấn luyện trên một phiên bản dữ liệu huấn luyện khác nhau và do đó, phương sai của mô hình tổng thể sẽ giảm khi lấy trung bình trên N cây

Trong triển khai này, các mô hình Rừng ngẫu nhiên được xây dựng bằng N mô hình GIỎ HÀNG được xác định và triển khai trong phần trước. Một ví dụ triển khai Rừng ngẫu nhiên được xây dựng bằng 100 cây quyết định được cung cấp bên dưới

from supervised.random_forest import Random_forest
# example of fitting the Random Forest
rf = Random_forest(num_trees=100)
rf.fit(X_train,y_train)
y_pred = rf.predict(X_test)

Học không giám sát

K-có nghĩa là

K-mean là một kỹ thuật học không giám sát được sử dụng để phân chia các quan sát thành các cụm K. Mục tiêu của K-means là nhóm các quan sát thành các nhóm "gần" nhất có thể. Trong đó "đóng" là khoảng cách của mỗi quan sát đến giá trị trung bình của cụm của nó (tâm)

Các tham số của mô hình K-means (i. e. , các trọng tâm) trong quá trình triển khai này được giải quyết thông qua thuật toán của Lloyd, đây là một cách tiếp cận lặp theo đó các cụm được tinh chỉnh sau khi lặp lại sau khi khởi tạo ngẫu nhiên