Mô hình thống kê trong python

Mô hình thống kê là một phần quan trọng của phân tích rủi ro và an toàn trong các lĩnh vực kỹ thuật khác nhau [kỹ thuật cơ khí, kỹ thuật hạt nhân], trong quản lý các mối nguy tự nhiên, kiểm soát chất lượng và tài chính.

Trong Blog này, tôi sẽ giải thích 2 chủ đề quan trọng của Mô hình thống kê, tôi. e Hồi quy tuyến tính và ANOVA sử dụng mô hình Thống kê

Keras được sử dụng bởi CERN, NASA, NIH và nhiều tổ chức khoa học khác trên thế giới [và vâng, Keras được sử dụng tại LHC]. Keras có tính linh hoạt cấp thấp để thực hiện các ý tưởng nghiên cứu tùy ý trong khi cung cấp các tính năng tiện lợi cấp cao tùy chọn để tăng tốc chu kỳ thử nghiệm

Chẳng hạn, trong ví dụ bên dưới, cây quyết định học từ dữ liệu để tính gần đúng một đường cong hình sin với một bộ quy tắc quyết định if-then-else. Cây càng sâu, các quy tắc quyết định càng phức tạp và mô hình càng phù hợp

Một số ưu điểm của cây quyết định là

  • Đơn giản để hiểu và giải thích. Cây cối có thể được hình dung

  • Yêu cầu chuẩn bị ít dữ liệu. Các kỹ thuật khác thường yêu cầu chuẩn hóa dữ liệu, cần tạo các biến giả và xóa các giá trị trống. Tuy nhiên, xin lưu ý rằng mô-đun này không hỗ trợ các giá trị bị thiếu

  • Chi phí sử dụng cây [i. e. , dự đoán dữ liệu] là logarit của số lượng điểm dữ liệu được sử dụng để huấn luyện cây

  • Có thể xử lý cả dữ liệu số và dữ liệu phân loại. Tuy nhiên, hiện tại việc triển khai scikit-learning không hỗ trợ các biến phân loại. Các kỹ thuật khác thường chuyên phân tích các tập dữ liệu chỉ có một loại biến. Xem thuật toán để biết thêm thông tin.

  • Có thể xử lý các vấn đề đa đầu ra

  • Sử dụng mô hình hộp trắng. Nếu một tình huống nhất định có thể quan sát được trong một mô hình, thì lời giải thích cho điều kiện đó dễ dàng được giải thích bằng logic boolean. Ngược lại, trong một mô hình hộp đen [e. g. , trong mạng thần kinh nhân tạo], kết quả có thể khó diễn giải hơn

  • Có thể xác thực một mô hình bằng các kiểm tra thống kê. Điều đó làm cho nó có thể tính đến độ tin cậy của mô hình

  • Hoạt động tốt ngay cả khi các giả định của nó bị vi phạm phần nào bởi mô hình thực mà từ đó dữ liệu được tạo ra

Nhược điểm của cây quyết định bao gồm

  • Người học cây quyết định có thể tạo cây quá phức tạp không tổng quát hóa dữ liệu tốt. Điều này được gọi là trang bị quá mức. Các cơ chế như cắt tỉa, đặt số lượng mẫu tối thiểu cần thiết tại một nút lá hoặc đặt độ sâu tối đa của cây là cần thiết để tránh vấn đề này

  • Cây quyết định có thể không ổn định vì các biến thể nhỏ trong dữ liệu có thể dẫn đến việc tạo ra một cây hoàn toàn khác. Vấn đề này được giảm thiểu bằng cách sử dụng cây quyết định trong một tập hợp

  • Các dự đoán của cây quyết định không trơn tru cũng không liên tục, mà là các phép tính xấp xỉ liên tục từng phần như trong hình trên. Do đó, họ không giỏi ngoại suy

  • Vấn đề học một cây quyết định tối ưu được biết là NP-đầy đủ dưới một số khía cạnh của sự tối ưu và ngay cả đối với các khái niệm đơn giản. Do đó, các thuật toán học cây quyết định thực tế dựa trên các thuật toán heuristic như thuật toán tham lam trong đó các quyết định tối ưu cục bộ được thực hiện tại mỗi nút. Các thuật toán như vậy không thể đảm bảo trả về cây quyết định tối ưu toàn cầu. Điều này có thể được giảm thiểu bằng cách đào tạo nhiều cây trong một bộ học tập, trong đó các tính năng và mẫu được lấy mẫu ngẫu nhiên bằng cách thay thế

  • Có những khái niệm khó học vì cây quyết định không diễn đạt chúng một cách dễ dàng, chẳng hạn như các vấn đề về XOR, chẵn lẻ hoặc bộ ghép kênh

  • Người học cây quyết định tạo cây thiên vị nếu một số lớp chiếm ưu thế. Do đó, nên cân bằng tập dữ liệu trước khi khớp với cây quyết định

1. 10. 1. Phân loại¶

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
7 là một lớp có khả năng thực hiện phân loại nhiều lớp trên tập dữ liệu

Cũng như các bộ phân loại khác,

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
7 lấy hai mảng đầu vào. một mảng X, thưa thớt hoặc dày đặc, có hình dạng _______01 chứa các mẫu đào tạo và một mảng Y có các giá trị nguyên, hình dạng _______02, chứa các nhãn lớp cho các mẫu đào tạo

>>> from sklearn import tree
>>> X = [[0, 0], [1, 1]]
>>> Y = [0, 1]
>>> clf = tree.DecisionTreeClassifier[]
>>> clf = clf.fit[X, Y]

Sau khi được trang bị, mô hình sau đó có thể được sử dụng để dự đoán loại mẫu

>>> clf.predict[[[2., 2.]]]
array[[1]]

Trong trường hợp có nhiều lớp có xác suất giống nhau và cao nhất, bộ phân loại sẽ dự đoán lớp có chỉ số thấp nhất trong số các lớp đó

Là một giải pháp thay thế cho việc xuất ra một lớp cụ thể, xác suất của mỗi lớp có thể được dự đoán, đó là tỷ lệ mẫu huấn luyện của lớp trong một chiếc lá

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
7 có khả năng phân loại nhị phân [trong đó nhãn là [-1, 1]] và phân loại đa lớp [trong đó nhãn là [0, …, K-1]]

Sử dụng bộ dữ liệu Iris, chúng ta có thể xây dựng một cây như sau

>>> from sklearn.datasets import load_iris
>>> from sklearn import tree
>>> iris = load_iris[]
>>> X, y = iris.data, iris.target
>>> clf = tree.DecisionTreeClassifier[]
>>> clf = clf.fit[X, y]

Sau khi được đào tạo, bạn có thể vẽ biểu đồ cây bằng hàm

>>> clf.predict[[[2., 2.]]]
array[[1]]
4

>>> tree.plot_tree[clf]
[...]

Chúng tôi cũng có thể xuất cây ở định dạng Graphviz bằng trình xuất

>>> clf.predict[[[2., 2.]]]
array[[1]]
5. Nếu bạn sử dụng trình quản lý gói conda, các tệp nhị phân graphviz và gói python có thể được cài đặt với
>>> clf.predict[[[2., 2.]]]
array[[1]]
6

Ngoài ra, có thể tải xuống các tệp nhị phân cho graphviz từ trang chủ của dự án graphviz và trình bao bọc Python được cài đặt từ pypi với

>>> clf.predict[[[2., 2.]]]
array[[1]]
7

Dưới đây là một ví dụ xuất graphviz của cây trên được đào tạo trên toàn bộ bộ dữ liệu iris;

>>> clf.predict[[[2., 2.]]]
array[[1]]
2

Trình xuất

>>> clf.predict[[[2., 2.]]]
array[[1]]
5 cũng hỗ trợ nhiều tùy chọn thẩm mỹ, bao gồm tô màu các nút theo lớp của chúng [hoặc giá trị cho hồi quy] và sử dụng tên lớp và biến rõ ràng nếu muốn. Sổ ghi chép Jupyter cũng tự động hiển thị các ô này trong dòng

>>> clf.predict[[[2., 2.]]]
array[[1]]
4

Ngoài ra, cây cũng có thể được xuất ở định dạng văn bản với chức năng

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
0. Phương pháp này không yêu cầu cài đặt các thư viện bên ngoài và nhỏ gọn hơn

>>> clf.predict[[[2., 2.]]]
array[[1]]
6

ví dụ

  • Vẽ bề mặt quyết định của cây quyết định được đào tạo trên bộ dữ liệu iris

  • Tìm hiểu cấu trúc cây quyết định

1. 10. 2. Hồi quy¶

Cây quyết định cũng có thể được áp dụng cho các bài toán hồi quy, sử dụng lớp

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
1

Như trong cài đặt phân loại, phương thức phù hợp sẽ nhận các mảng đối số X và y, chỉ có điều trong trường hợp này, y dự kiến ​​sẽ có các giá trị dấu phẩy động thay vì giá trị số nguyên

>>> clf.predict[[[2., 2.]]]
array[[1]]
8

ví dụ

  • Hồi quy cây quyết định

1. 10. 3. Các vấn đề về nhiều đầu ra¶

Bài toán nhiều đầu ra là một bài toán học có giám sát với một số đầu ra để dự đoán, đó là khi Y là một mảng 2d có dạng

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
2

Khi không có mối tương quan giữa các kết quả đầu ra, một cách rất đơn giản để giải quyết loại vấn đề này là xây dựng n mô hình độc lập, i. e. một cho mỗi đầu ra và sau đó sử dụng các mô hình đó để dự đoán độc lập từng đầu ra trong n đầu ra. Tuy nhiên, vì bản thân các giá trị đầu ra liên quan đến cùng một đầu vào có tương quan với nhau, nên cách tốt hơn thường là xây dựng một mô hình duy nhất có khả năng dự đoán đồng thời tất cả n đầu ra. Đầu tiên, nó yêu cầu thời gian đào tạo thấp hơn vì chỉ có một công cụ ước tính duy nhất được xây dựng. Thứ hai, độ chính xác tổng quát hóa của công cụ ước tính kết quả thường có thể tăng lên

Đối với cây quyết định, chiến lược này có thể dễ dàng được sử dụng để hỗ trợ các vấn đề đa đầu ra. Điều này yêu cầu những thay đổi sau

  • Lưu trữ n giá trị đầu ra trong lá, thay vì 1;

  • Sử dụng tiêu chí phân chia để tính toán mức giảm trung bình trên tất cả n đầu ra

Mô-đun này cung cấp hỗ trợ cho các vấn đề đa đầu ra bằng cách triển khai chiến lược này trong cả

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
7 và
>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
1. Nếu cây quyết định phù hợp với mảng đầu ra Y có hình dạng
>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
2 thì công cụ ước tính kết quả sẽ

  • Xuất các giá trị n_output theo

    >>> clf.predict_proba[[[2., 2.]]]
    array[[[0., 1.]]]
    
    6;

  • Xuất danh sách các mảng n_output của xác suất lớp khi

    >>> clf.predict_proba[[[2., 2.]]]
    array[[[0., 1.]]]
    
    7

Việc sử dụng cây đa đầu ra cho hồi quy được thể hiện trong Hồi quy cây quyết định đa đầu ra . Trong ví dụ này, đầu vào X là một giá trị thực duy nhất và đầu ra Y là sin và cosin của X.

Việc sử dụng cây nhiều đầu ra để phân loại được thể hiện trong Hoàn thiện khuôn mặt với công cụ ước tính nhiều đầu ra . Trong ví dụ này, đầu vào X là các pixel của nửa trên của các mặt và đầu ra Y là các pixel của nửa dưới của các mặt đó.

ví dụ

  • Hồi quy cây quyết định đa đầu ra

  • Hoàn thành khuôn mặt với một công cụ ước tính nhiều đầu ra

Người giới thiệu

  • M. Dumont et al, Chú thích hình ảnh nhiều lớp nhanh với các cửa sổ con ngẫu nhiên và nhiều cây ngẫu nhiên đầu ra, Hội nghị quốc tế về lý thuyết và ứng dụng thị giác máy tính 2009

1. 10. 4. Độ phức tạp¶

Nói chung, chi phí thời gian chạy để xây dựng cây nhị phân cân bằng là \[O[n_{samples}n_{features}\log[n_{samples}]]\ . Mặc dù thuật toán xây dựng cây cố gắng tạo ra các cây cân bằng, nhưng không phải lúc nào chúng cũng cân bằng. Giả sử rằng các cây con vẫn xấp xỉ cân bằng, chi phí tại mỗi nút bao gồm việc tìm kiếm thông qua and query time \[O[\log[n_{samples}]]\]. Although the tree construction algorithm attempts to generate balanced trees, they will not always be balanced. Assuming that the subtrees remain approximately balanced, the cost at each node consists of searching through \[O[n_{features}]\] để tìm đối tượng địa lý . g. mất nhật ký [tương đương với mức tăng thông tin]. Điều này có chi phí là \[O[n_{features}n_{samples}\log[n_{samples}]]\] tại mỗi nút, . \[O[n_{features}n_{samples}^{2}\log[n_{samples}]]\].

1. 10. 5. Mẹo sử dụng thực tế¶

  • Cây quyết định có xu hướng phù hợp với dữ liệu với số lượng lớn các tính năng. Có được tỷ lệ mẫu phù hợp với số lượng tính năng là rất quan trọng, vì một cây có ít mẫu trong không gian nhiều chiều rất có khả năng bị quá khớp

  • Cân nhắc thực hiện giảm kích thước [ PCA , ICA , . Feature selection] beforehand to give your tree a better chance of finding features that are discriminative.

  • Hiểu cấu trúc cây quyết định sẽ giúp hiểu rõ hơn về cách cây quyết định đưa ra dự đoán, điều này rất quan trọng để hiểu các tính năng quan trọng trong dữ liệu.

  • Trực quan hóa cây của bạn khi bạn đang đào tạo bằng cách sử dụng hàm

    >>> clf.predict_proba[[[2., 2.]]]
    array[[[0., 1.]]]
    
    8. Sử dụng
    >>> clf.predict_proba[[[2., 2.]]]
    array[[[0., 1.]]]
    
    9 làm độ sâu cây ban đầu để cảm nhận cách cây phù hợp với dữ liệu của bạn, sau đó tăng độ sâu

  • Hãy nhớ rằng số lượng mẫu cần thiết để tạo thành cây tăng gấp đôi cho mỗi cấp độ bổ sung mà cây phát triển. Sử dụng

    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    0 để kiểm soát kích thước của cây để tránh bị quá khớp

  • Sử dụng

    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    1 hoặc
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    2 để đảm bảo rằng nhiều mẫu cung cấp thông tin cho mọi quyết định trong cây, bằng cách kiểm soát việc phân tách nào sẽ được xem xét. Một số rất nhỏ thường có nghĩa là cây sẽ quá khớp, trong khi một số lớn sẽ ngăn cây học dữ liệu. Hãy thử
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    3 làm giá trị ban đầu. Nếu kích thước mẫu thay đổi nhiều, số float có thể được sử dụng dưới dạng phần trăm trong hai tham số này. Mặc dù
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    1 có thể tạo các lá nhỏ tùy ý, nhưng
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    2 đảm bảo rằng mỗi lá có kích thước tối thiểu, tránh các nút lá quá khớp, phương sai thấp trong các bài toán hồi quy. Đối với phân loại có ít lớp,
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    6 thường là lựa chọn tốt nhất

    Lưu ý rằng

    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    1 xem xét các mẫu trực tiếp và độc lập với
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    8, nếu được cung cấp [e. g. một nút có m mẫu có trọng số vẫn được coi là có chính xác m mẫu]. Xem xét
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    9 hoặc
    >>> tree.plot_tree[clf]
    [...]
    
    0 nếu việc tính toán trọng lượng mẫu được yêu cầu khi phân chia

  • Cân bằng tập dữ liệu của bạn trước khi đào tạo để cây không bị sai lệch về các lớp chiếm ưu thế. Cân bằng lớp có thể được thực hiện bằng cách lấy mẫu một số lượng mẫu bằng nhau từ mỗi lớp, hoặc tốt nhất là bằng cách chuẩn hóa tổng trọng số mẫu [

    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    8] cho mỗi lớp thành cùng một giá trị. Cũng lưu ý rằng các tiêu chí trước khi cắt tỉa dựa trên trọng số, chẳng hạn như
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    9, khi đó sẽ ít thiên về các lớp chiếm ưu thế hơn so với các tiêu chí không biết về trọng số mẫu, như
    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    2

  • Nếu các mẫu được tính theo trọng số, thì việc tối ưu hóa cấu trúc cây sẽ dễ dàng hơn bằng cách sử dụng tiêu chí trước khi cắt tỉa dựa trên trọng số, chẳng hạn như

    >>> from sklearn.datasets import load_iris
    >>> from sklearn import tree
    >>> iris = load_iris[]
    >>> X, y = iris.data, iris.target
    >>> clf = tree.DecisionTreeClassifier[]
    >>> clf = clf.fit[X, y]
    
    9, đảm bảo rằng các nút lá chứa ít nhất một phần tổng trọng số của mẫu

  • Tất cả các cây quyết định đều sử dụng mảng

    >>> tree.plot_tree[clf]
    [...]
    
    5 bên trong. Nếu dữ liệu đào tạo không ở định dạng này, một bản sao của tập dữ liệu sẽ được tạo

  • Nếu ma trận đầu vào X rất thưa thớt, nên chuyển đổi thành thưa thớt

    >>> tree.plot_tree[clf]
    [...]
    
    6 trước khi gọi phù hợp và thưa thớt
    >>> tree.plot_tree[clf]
    [...]
    
    7 trước khi gọi dự đoán. Thời gian đào tạo có thể nhanh hơn theo thứ tự cường độ đối với đầu vào ma trận thưa thớt so với ma trận dày đặc khi các tính năng có giá trị bằng 0 trong hầu hết các mẫu

1. 10. 6. Thuật toán cây. ID3, C4. 5, C5. 0 và GIỎ HÀNG¶

Tất cả các thuật toán cây quyết định khác nhau là gì và chúng khác nhau như thế nào?

ID3 [Iterative Dichotomiser 3] được phát triển vào năm 1986 bởi Ross Quinlan. Thuật toán tạo một cây nhiều đường, tìm cho mỗi nút [i. e. theo cách tham lam] tính năng phân loại sẽ mang lại mức tăng thông tin lớn nhất cho các mục tiêu phân loại. Cây được phát triển đến kích thước tối đa của chúng và sau đó, bước cắt tỉa thường được áp dụng để cải thiện khả năng khái quát hóa của cây đối với dữ liệu không nhìn thấy được

C4. 5 là phiên bản kế thừa của ID3 và đã loại bỏ hạn chế rằng các tính năng phải được phân loại bằng cách xác định động một thuộc tính riêng biệt [dựa trên các biến số] để phân vùng giá trị thuộc tính liên tục thành một tập hợp các khoảng riêng biệt. C4. 5 chuyển đổi các cây được huấn luyện [i. e. đầu ra của thuật toán ID3] thành các bộ quy tắc nếu-thì. Độ chính xác của từng quy tắc sau đó được đánh giá để xác định thứ tự áp dụng chúng. Cắt tỉa được thực hiện bằng cách loại bỏ điều kiện tiên quyết của quy tắc nếu độ chính xác của quy tắc được cải thiện mà không cần điều kiện đó

C5. 0 là phiên bản mới nhất của Quinlan được phát hành theo giấy phép độc quyền. Nó sử dụng ít bộ nhớ hơn và xây dựng các bộ quy tắc nhỏ hơn C4. 5 trong khi chính xác hơn

GIỎ HÀNG [Cây phân loại và hồi quy] rất giống với C4. 5, nhưng nó khác ở chỗ nó hỗ trợ các biến mục tiêu số [hồi quy] và không tính toán các bộ quy tắc. GIỎ HÀNG xây dựng cây nhị phân bằng cách sử dụng tính năng và ngưỡng mang lại mức tăng thông tin lớn nhất tại mỗi nút

scikit-learning sử dụng phiên bản thuật toán GIỎ HÀNG được tối ưu hóa;

1. 10. 7. Công thức toán học¶

Cho trước các vectơ huấn luyện \[x_i \in R^n\] , i=1,…, l và một vectơ nhãn \[y \in R^l\], a decision tree recursively partitions the feature space such that the samples with the same labels or similar target values are grouped together.

Để dữ liệu tại nút \[m\] được đại diện bởi \[Q_m\] . Đối với mỗi phần tách ứng cử viên with \[n_m\] samples. For each candidate split \[\theta = [j, t_m]\] bao gồm một đối tượng \[j and threshold \[t_m\], partition the data into \[Q_m^{left}[\theta]\] and \[Q_m^{right}[\theta]\] subsets

\[ \begin{align}\begin{aligned}Q_m^{left}[\theta] = \{[x, y]. x_j \leq t_m\}\\Q_m^{right}[\theta] = Q_m \setminus Q_m^{left}[\theta]\end{aligned}\end{align} \]

Chất lượng của một ứng cử viên tách nút \[m\] sau đó được tính bằng cách sử dụng hàm tạp chất hoặc hàm mất mát \[H[]\], the choice of which depends on the task being solved [classification or regression]

\[G[Q_m, \theta] = \frac{n_m^{left}}{n_m} H[Q_m^{left}[\theta]] + \frac{n_m^{right}}{n_m} H[Q_m

Chọn các thông số giảm thiểu tạp chất

\[\theta^* = \operatorname{argmin}_\theta G[Q_m, \theta]\]

Hồi quy cho các tập hợp con \[Q_m^{left}[\theta^*]\]\[Q_m^{right}[\theta^*]\] until the maximum allowable depth is reached, \[n_m < \min_{samples}\] or \[n_m = 1\].

1. 10. 7. 1. Tiêu chí phân loại¶

Nếu mục tiêu là kết quả phân loại nhận các giá trị 0,1,…,K-1, cho nút \[m\], let

\[p_{mk} = \frac{1}{n_m} \sum_{y \in Q_m} I[y = k]\]

là tỷ lệ quan sát lớp k trong nút \[m\] . Nếu \[m\] là nút cuối, thì

>>> clf.predict_proba[[[2., 2.]]]
array[[[0., 1.]]]
7 cho vùng này được đặt thành \[p_{mk . Các biện pháp phổ biến của tạp chất là như sau. . Common measures of impurity are the following.

Gini

\[H[Q_m] = \sum_k p_{mk} [1 - p_{mk}]\]

Mất nhật ký hoặc Entropy

\[H[Q_m] = - \sum_k p_{mk} \log[p_{mk}]\]

Ghi chú

Tiêu chí entropy tính toán entropy Shannon của các lớp có thể. Nó lấy tần số lớp của các điểm dữ liệu huấn luyện đạt đến một lá nhất định \[m\] làm xác suất của chúng. Sử dụng entropy Shannon làm tiêu chí phân tách nút cây tương đương với việc giảm thiểu mất nhật ký [còn được gọi là entropy chéo và độ lệch đa thức] giữa các nhãn thực \[y_i\] and the probalistic predictions \[T_k[x_i]\] of the tree model \[T\] for class \[k\].

Để thấy điều này, trước tiên hãy nhớ lại rằng việc mất nhật ký của mô hình cây \[T\] được tính trên tập dữ liệu \[D\] is defined as follows:

\[\mathrm{LL}[D, T] = -\frac{1}{n} \sum_{[x_i, y_i] \in D} \sum_k I[y_i = k] \log[T_k[x_i]]

trong đó \[D\] là tập dữ liệu huấn luyện của \[n\] pairs \[[x_i, y_i]\].

Trong cây phân loại, xác suất dự đoán của lớp trong các nút lá là không đổi, nghĩa là. với tất cả \[[x_i, y_i] \in Q_m\] , một người có. \[T_k[x_i] = p_{mk}\] cho mỗi lớp \[k\].

Thuộc tính này cho phép viết lại \[\mathrm{LL}[D, T]\] thành tổng của Shannon . \[T\] weighted by the number of training data points that reached each leaf:

\[\mathrm{LL}[D, T] = \sum_{m \in T} \frac{n_m}{n} H[Q_m]\]

1. 10. 7. 2. Tiêu chí hồi quy¶

Nếu mục tiêu là một giá trị liên tục, thì đối với nút \[m\] , tiêu chí chung để giảm thiểu để xác định vị trí cho tương lai . MSE và độ lệch Poisson đều đặt giá trị dự đoán của các nút đầu cuối thành giá trị trung bình đã học \[\bar{y}_m\] của nút trong khi . \[median[y]_m\].

Có nghĩa là lỗi bình phương

\[ \begin{align}\begin{aligned}\bar{y}_m = \frac{1}{n_m} \sum_{y \in Q_m} y\\H[Q_m] = \frac{1}{n_m

Độ lệch nửa Poisson

\[H[Q_ M] = \frac{1}{nm} \sum_{y \in Q_ M} [y \log\frac{y}{\bar{y}_m} - y + \bar{y}

Đặt

>>> tree.plot_tree[clf]
[...]
9 có thể là một lựa chọn tốt nếu mục tiêu của bạn là số lượng hoặc tần suất [số lượng trên một số đơn vị]. Trong mọi trường hợp, \[y >= 0\] là điều kiện cần để sử dụng tiêu chí này. Lưu ý rằng nó phù hợp chậm hơn nhiều so với tiêu chí MSE.

Có nghĩa là lỗi tuyệt đối

\[ \begin{align}\begin{aligned}median[y]_m = \underset{y \in Q_m}{\mathrm{median}}[y]\\H[Q_m] = \frac{1}{n_m . y - trung bình[y]_m. \end{aligned}\end{align} \]

Lưu ý rằng nó phù hợp chậm hơn nhiều so với tiêu chí MSE

1. 10. 8. Cắt tỉa phức tạp với chi phí tối thiểu¶

Tỉa bớt độ phức tạp với chi phí tối thiểu là một thuật toán được sử dụng để tỉa cây nhằm tránh quá khớp, được mô tả trong Chương 3 của [BRE] . Thuật toán này được tham số hóa bởi \[\alpha\ge0\] được gọi là tham số phức tạp. Tham số phức tạp được sử dụng để xác định phép đo chi phí-phức tạp, \[R_\alpha[T]\] của một cây nhất định \[T\]:

\[R_\alpha[T] = R[T] + \alpha. \widetilde{T}. \]

ở đâu \[. \widetilde{T}. \] là số nút đầu cuối trong \[T\]\[R[T]\] is traditionally defined as the total misclassification rate of the terminal nodes. Alternatively, scikit-learn uses the total sample weighted impurity of the terminal nodes for \[R[T]\] . Như đã trình bày ở trên, tạp chất của nút phụ thuộc vào tiêu chí. Cắt tỉa độ phức tạp chi phí tối thiểu tìm cây con của \[T\] để giảm thiểu \[R_\alpha[T . .

Đo lường độ phức tạp về chi phí của một nút là \[R_\alpha[t]=R[t]+\alpha\] . Nhánh, \[T_t\] , được định nghĩa là một cây nơi nút \[t\]< . Nói chung, tạp chất của một nút lớn hơn tổng tạp chất của các nút cuối của nó, is its root. In general, the impurity of a node is greater than the sum of impurities of its terminal nodes, \[R[T_t]. However, the cost complexity measure of a node, \[t\] và nhánh của nó, \[T_t . Chúng tôi xác định , can be equal depending on \[\alpha\]. We define the effective \[\alpha\] hiệu quả của một nút là giá trị mà chúng bằng nhau, \ . T. -1}\] or \[\alpha_{eff}[t]=\frac{R[t]-R[T_t]}{|T|-1}\] . Nút không phải đầu cuối có giá trị nhỏ nhất là \[\alpha_{eff}\] là liên kết yếu nhất và sẽ bị cắt bớt. Quá trình này dừng lại khi giá trị tối thiểu của cây bị cắt tỉa \[\alpha_{eff}\] lớn hơn tham số

>>> clf.predict[[[2., 2.]]]
array[[1]]
20.

ví dụ

  • Cây quyết định cắt tỉa bài với chi phí cắt tỉa phức tạp

Người giới thiệu

[ BRE ]

L. Breiman, J. Friedman, R. Olsen và C. Sỏi. Cây phân loại và hồi quy. Wadsworth, Belmont, CA, 1984

Chủ Đề