Làm thế nào để bạn hình dung một khu rừng ngẫu nhiên trong python?

Trong hướng dẫn này, bạn sẽ tìm hiểu rừng ngẫu nhiên trong Scikit-Learn là gì và cách sử dụng chúng để phân loại dữ liệu. Cây quyết định có thể là cách cực kỳ hữu ích và trực quan để phân loại dữ liệu. Tuy nhiên, chúng cũng có thể dễ bị quá khớp, dẫn đến hiệu suất trên dữ liệu mới. Một cách dễ dàng để giảm trang bị thừa là sử dụng thuật toán học máy có tên là rừng ngẫu nhiên

Đến cuối hướng dẫn này, bạn sẽ học được

  • Các thuật toán phân loại rừng ngẫu nhiên là gì
  • Cách xử lý dữ liệu bị thiếu và phân loại trong Scikit-Learn
  • Cách tạo rừng ngẫu nhiên trong Scikit-Learn
  • Làm thế nào để hình dung các khu rừng ngẫu nhiên
  • Cách đánh giá hiệu suất của một khu rừng ngẫu nhiên

Mục lục

Tóm tắt về Trình phân loại cây quyết định

Trình phân loại cây quyết định là một dạng học máy có giám sát, dự đoán một biến mục tiêu bằng cách học các quyết định đơn giản được suy ra từ các tính năng của dữ liệu. Tất cả các quyết định đều được chia thành các quyết định nhị phân [có hoặc không] cho đến khi tính toán nhãn. Hãy xem hình ảnh bên dưới để biết cây quyết định mà bạn đã tạo trong bài học trước

Một cây quyết định đơn giản trong Scikit-Learn

Trong cây này, bạn có thể thấy rằng ở nút đầu tiên, mô hình nhìn vào chiều dài cánh hoa. Nếu chiều dài tính bằng centimet nhỏ hơn hoặc bằng 2. 5 cm, dữ liệu di chuyển vào nút khác. Ở bên trái, một nhãn được đạt và cây con kết thúc. Ở bên phải, quá trình phân tách dữ liệu tiếp tục, lần này nhìn vào chiều rộng cánh hoa

Khi xây dựng thuật toán cây quyết định, bạn có thể đặt nhiều tham số khác nhau, bao gồm độ sâu của cây. Một cây sâu hơn có thể có nghĩa là hiệu suất cao hơn cho dữ liệu huấn luyện, nhưng nó có thể dẫn đến trang bị quá mức. Điều này có nghĩa là mô hình hoạt động rất tốt với dữ liệu huấn luyện, nhưng có thể không hoạt động tốt với dữ liệu thử nghiệm

Đây là nơi phân loại rừng ngẫu nhiên phát huy tác dụng. Trong phần tiếp theo, bạn sẽ tìm hiểu những thuật toán phân loại này là gì và cách chúng giúp bạn giải quyết vấn đề khớp quá mức mô hình của bạn

Tổng quan về phân loại rừng ngẫu nhiên

Trình phân loại rừng ngẫu nhiên được gọi là thuật toán tập hợp. Lý do cho điều này là nó tận dụng nhiều phiên bản của thuật toán khác cùng một lúc để tìm ra kết quả. Hãy nhớ rằng, cây quyết định dễ bị quá khớp. Tuy nhiên, bạn có thể loại bỏ vấn đề này bằng cách đơn giản là trồng thêm cây xanh

Ý tưởng đằng sau là một khu rừng ngẫu nhiên là việc xử lý tự động tạo ra nhiều cây quyết định hơn. Mỗi cây nhận được một phiếu bầu về cách phân loại. Một số phiếu bầu này sẽ được trang bị quá nhiều và không chính xác. Tuy nhiên, bằng cách tạo ra hàng trăm cây, sự phân loại được nhiều cây nhất trả về rất có thể là chính xác nhất

Hình ảnh dưới đây cho thấy năm cây quyết định khác nhau được tạo. Mỗi cây trong số này nhận được một phiếu bầu và phân loại có nhiều phiếu bầu nhất là cây được trả lại

Nhiều cây quyết định phù hợp với một bộ phân loại rừng ngẫu nhiên

Tuy nhiên, trong nhiều trường hợp, có hơn 5 cây được tạo ra. Ví dụ, trong ví dụ bạn sẽ thực hiện bên dưới, bạn sẽ tạo một khu rừng ngẫu nhiên với một trăm cây

Đang tải tập dữ liệu mẫu

Hãy bắt đầu bằng cách tải một tập dữ liệu mẫu. Trong ví dụ này, bạn sẽ tìm hiểu cách tạo bộ phân loại rừng ngẫu nhiên bằng bộ dữ liệu chim cánh cụt là một phần của thư viện Seaborn. Bộ dữ liệu cung cấp thông tin về ba loài chim cánh cụt khác nhau, chim cánh cụt Adelie, Gentoo và Chinstrap. Hình ảnh dưới đây cho thấy một con chim cánh cụt Adelie

Một chú chim cánh cụt Adelie mà bạn sẽ học cách phân loại trong Scikit-Learn.

Hãy tải tập dữ liệu để xem bạn đang làm việc với cái gì

# Loading the Penguins Dataset from Seaborn
import seaborn as sns
import pandas as pd

df = sns.load_dataset['penguins']
print[df.head[]]

# Returns:
#   species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex
# 0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    Male
# 1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  Female
# 2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  Female
# 3  Adelie  Torgersen             NaN            NaN                NaN          NaN     NaN
# 4  Adelie  Torgersen            36.7           19.3              193.0       3450.0  Female

Bộ dữ liệu cung cấp một số cột dữ liệu, một số trong số đó là số và một số khác là phân loại. Cuối cùng, bạn sẽ muốn dự đoán một con chim cánh cụt

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
4 bằng cách sử dụng các tính năng khác nhau trong bộ dữ liệu. Chúng ta hãy xem một số cột này

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None

Các mô hình học máy có một số hạn chế

  1. Họ không thể làm việc với dữ liệu bị thiếu và
  2. Chúng không thể hoạt động với dữ liệu chuỗi, phân loại

Bằng cách xem xét thông tin được trả về bởi phương thức

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
5, bạn có thể thấy rằng cả hai vấn đề này đều tồn tại trong tập dữ liệu. Để có thể sử dụng tập dữ liệu này để phân loại, trước tiên bạn cần tìm cách xử lý dữ liệu bị thiếu và phân loại. Đây chính xác là những gì bạn sẽ học trong hai phần tiếp theo của hướng dẫn

Xử lý dữ liệu bị thiếu trong Scikit-Learn

Trước tiên, hãy xem dữ liệu bị thiếu. Nhiều mô hình học máy không thể xử lý dữ liệu bị thiếu. Trên thực tế, việc cố gắng xây dựng một cây quyết định với dữ liệu bị thiếu [và nói rộng ra là một khu rừng ngẫu nhiên] dẫn đến việc tăng

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
6. Vì điều này, chúng ta cần tìm ra cách xử lý dữ liệu bị thiếu

Mặc dù phương thức

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
5 cho chúng ta biết một chút về dữ liệu không null, nhưng điều này thường khó diễn giải hơn. Hãy tính số lượng giá trị bị thiếu trong mỗi cột bằng cách xâu chuỗi các phương thức
# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
8 và
# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
9

________số 8_______

Khi xử lý các giá trị bị thiếu, bạn có hai tùy chọn chính

  1. Áp đặt các giá trị còn thiếu
  2. Bỏ các bản ghi bị thiếu [theo cột hoặc theo hàng]

Phần lớn, phần lớn dữ liệu ở đó. Scikit-Learn đi kèm với một lớp,

# Seeing missing data
print[df.isnull[].sum[]]

# Returns:
# species               0
# island                0
# bill_length_mm        2
# bill_depth_mm         2
# flipper_length_mm     2
# body_mass_g           2
# sex                  11
# dtype: int64
0, cho phép bạn chuyển qua một chiến lược để quy các giá trị còn thiếu. Ví dụ, chúng ta có thể coi bất kỳ giá trị còn thiếu nào là giá trị trung bình của cột đó. Hãy xem làm thế nào điều này có thể được thực hiện bằng Scikit-Learn

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]

Hãy khám phá những gì chúng tôi đã làm ở đây

  1. Chúng tôi áp đặt lớp
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    0 từ
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    2 và
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    3
  2. Chúng tôi đã khởi tạo một đối tượng
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    0 đang tìm kiếm các giá trị còn thiếu được đại diện bởi
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    5 và yêu cầu Scikit-Learn sử dụng
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    6 làm chiến lược của nó. Điều này có nghĩa là bất kỳ giá trị
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    5 nào sẽ được quy cho giá trị trung bình của cột
  3. Sau đó, chúng tôi sử dụng phương pháp
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    8 và chuyển vào cột
  4. Cuối cùng, chúng tôi sử dụng phương thức
    # Seeing missing data
    print[df.isnull[].sum[]]
    
    # Returns:
    # species               0
    # island                0
    # bill_length_mm        2
    # bill_depth_mm         2
    # flipper_length_mm     2
    # body_mass_g           2
    # sex                  11
    # dtype: int64
    9 để chuyển các giá trị được gán cho các cột tương ứng

Việc tính toán dữ liệu phân loại có thể phức tạp hơn rất nhiều, đặc biệt là khi xử lý các bản phân phối nhị phân. Vì điều này, chúng tôi sẽ loại bỏ bất kỳ bản ghi nào bị thiếu

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
0

# Dropping missing records in the sex column
df = df.dropna[subset=['sex']]

Bây giờ, chúng tôi có thể đảm bảo không có thành phần dữ liệu nào bị thiếu trong DataFrame bằng cách chạy lại mã trước đó của chúng tôi

# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64

Trong phần tiếp theo, bạn sẽ học cách làm việc với dữ liệu phân loại trong Scikit-Learn

Xử lý dữ liệu phân loại trong Scikit-Learn

Tương tự như việc xử lý các giá trị bị thiếu, các mô hình máy học thường chỉ có thể hoạt động với dữ liệu số. Do đó, chúng tôi cần chuyển đổi dữ liệu phân loại của mình thành dữ liệu số. Trước tiên hãy giải quyết biến giới tính. Vì biến giới tính là nhị phân [nam hoặc nữ], chúng ta có thể gán giá trị là 1 hoặc 0, tùy thuộc vào giới tính. Điều này có thể được thực hiện dễ dàng với phương pháp Chuỗi

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
1

# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]

Trong đoạn mã trên, bạn đã chuyển một từ điển vào phương thức

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
1. Từ điển chứa một ánh xạ nhị phân cho
# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
3 hoặc
# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
4

Giá trị phân loại khác là tính năng

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
5. Hãy xem các giá trị duy nhất trong cột này là gì

# Checking unique values in the island feature
print[df['island'].unique[]]

# Returns: ['Torgersen' 'Biscoe' 'Dream']

Trong trường hợp của tính năng

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
5, có ba giá trị. Vì điều này, chúng tôi không thể đơn giản chuyển vào ánh xạ nhị phân. Tương tự, việc chuyển các giá trị của
# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
7 cũng sẽ gây ra sự cố, bởi vì các giá trị không thực sự bao hàm một hệ thống phân cấp. Sự khác biệt giữa 0 và 2 sẽ khuếch đại bất kỳ quyết định nào mà khu rừng ngẫu nhiên của chúng tôi sẽ đưa ra

Một cách đơn giản để giải quyết vấn đề này là sử dụng quy trình được gọi là mã hóa một lần nóng. Các giá trị duy nhất của cột đó được sử dụng để tạo các cột có giá trị 0 hoặc 1 được gán. Hình ảnh dưới đây cho thấy quá trình này trông như thế nào

Cách mã hóa một lần hoạt động trong Scikit-Learn của Python

Scikit-Learn đi kèm với một lớp hữu ích để giúp bạn mã hóa nhanh dữ liệu phân loại của mình. Lớp này được gọi là

# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
8 và là một phần của mô-đun
# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
9. Hãy xem cách bạn có thể sử dụng lớp này để mã hóa một lần tính năng
# Imputing missing numerical data
from sklearn.impute import SimpleImputer
import numpy as np

# Create a SimpleImputer Class
imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']

# Fit the columns to the object
columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
imputer=imputer.fit[df[columns]]

# Transform the DataFrames column with the fitted data
df[columns]=imputer.transform[df[columns]]
5

# One-hot Encoding the Island Feature
from sklearn.preprocessing import OneHotEncoder
one_hot = OneHotEncoder[]
encoded = one_hot.fit_transform[df[['island']]]
df[one_hot.categories_[0]] = encoded.toarray[]

Hãy phá vỡ những gì chúng tôi đã làm ở đây

  1. Chúng tôi đã nhập lớp
    # Imputing missing numerical data
    from sklearn.impute import SimpleImputer
    import numpy as np
    
    # Create a SimpleImputer Class
    imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']
    
    # Fit the columns to the object
    columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
    imputer=imputer.fit[df[columns]]
    
    # Transform the DataFrames column with the fitted data
    df[columns]=imputer.transform[df[columns]]
    8 từ mô-đun
    # Imputing missing numerical data
    from sklearn.impute import SimpleImputer
    import numpy as np
    
    # Create a SimpleImputer Class
    imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']
    
    # Fit the columns to the object
    columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
    imputer=imputer.fit[df[columns]]
    
    # Transform the DataFrames column with the fitted data
    df[columns]=imputer.transform[df[columns]]
    9
  2. Sau đó, chúng tôi đã tạo một đối tượng
    # Imputing missing numerical data
    from sklearn.impute import SimpleImputer
    import numpy as np
    
    # Create a SimpleImputer Class
    imputer = SimpleImputer[missing_values=np.NaN, strategy='mean']
    
    # Fit the columns to the object
    columns = ['bill_depth_mm', 'bill_length_mm', 'flipper_length_mm', 'body_mass_g']
    imputer=imputer.fit[df[columns]]
    
    # Transform the DataFrames column with the fitted data
    df[columns]=imputer.transform[df[columns]]
    8,
    # Dropping missing records in the sex column
    df = df.dropna[subset=['sex']]
    4
  3. Phương pháp
    # Dropping missing records in the sex column
    df = df.dropna[subset=['sex']]
    5 cho phép bạn điều chỉnh đồng thời và chuyển đổi một cột thành phiên bản được mã hóa một chiều
  4. Dòng cuối cùng đã tạo một tập hợp các cột DataFrame mới
    • Thuộc tính
      # Dropping missing records in the sex column
      df = df.dropna[subset=['sex']]
      6 chứa một danh sách chứa một mảng các tên thuộc tính
    • Đối tượng
      # Dropping missing records in the sex column
      df = df.dropna[subset=['sex']]
      7 chứa mảng mã hóa one-hot. Bằng cách chuyển đổi nó thành một mảng rõ ràng, dữ liệu có thể được ánh xạ tới các cột DataFrame

Bây giờ bạn đã xử lý dữ liệu bị thiếu và phân loại, các cột ban đầu có thể bị xóa khỏi DataFrame. Hãy làm điều này ngay bây giờ

# Dropping Unnecessary Columns
df = df.drop[columns=['island', 'sex']]

Trong phần tiếp theo, bạn sẽ tìm hiểu cách sử dụng DataFrame mới được làm sạch này để xây dựng thuật toán rừng ngẫu nhiên nhằm dự đoán loài chim cánh cụt

Tạo khu rừng ngẫu nhiên đầu tiên của bạn. Phân loại chim cánh cụt

Bây giờ, hãy đi sâu vào cách tạo bộ phân loại rừng ngẫu nhiên bằng Scikit-Learn trong Python. Hãy nhớ rằng, một khu rừng ngẫu nhiên được tạo thành từ các cây quyết định. Nhưng điều đó không có nghĩa là bạn cần thực sự tạo bất kỳ cây quyết định nào. Scikit-Learn có thể xử lý việc này bằng cách sử dụng lớp

# Dropping missing records in the sex column
df = df.dropna[subset=['sex']]
8 từ mô-đun
# Dropping missing records in the sex column
df = df.dropna[subset=['sex']]
9. Hãy bắt đầu bằng cách nhập các lớp cần thiết

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
0

Hãy cùng khám phá những gì chúng tôi đã làm trong đoạn mã trên

  1. Chúng tôi đã nhập các lớp cần thiết
  2. Chúng tôi đã tạo các tính năng DataFrame,
    # Checking that no missing data exists
    print[df.isnull[].sum[]]
    
    # Returns:
    # species              0
    # island               0
    # bill_length_mm       0
    # bill_depth_mm        0
    # flipper_length_mm    0
    # body_mass_g          0
    # sex                  0
    # dtype: int64
    0 và Sê-ri taget của chúng tôi,
    # Checking that no missing data exists
    print[df.isnull[].sum[]]
    
    # Returns:
    # species              0
    # island               0
    # bill_length_mm       0
    # bill_depth_mm        0
    # flipper_length_mm    0
    # body_mass_g          0
    # sex                  0
    # dtype: int64
    1
  3. Dữ liệu được chia tách bằng hàm
    # Checking that no missing data exists
    print[df.isnull[].sum[]]
    
    # Returns:
    # species              0
    # island               0
    # bill_length_mm       0
    # bill_depth_mm        0
    # flipper_length_mm    0
    # body_mass_g          0
    # sex                  0
    # dtype: int64
    2
  4. Cuối cùng, chúng tôi khởi tạo mô hình của mình,
    # Checking that no missing data exists
    print[df.isnull[].sum[]]
    
    # Returns:
    # species              0
    # island               0
    # bill_length_mm       0
    # bill_depth_mm        0
    # flipper_length_mm    0
    # body_mass_g          0
    # sex                  0
    # dtype: int64
    3, bằng cách sử dụng
    # Checking that no missing data exists
    print[df.isnull[].sum[]]
    
    # Returns:
    # species              0
    # island               0
    # bill_length_mm       0
    # bill_depth_mm        0
    # flipper_length_mm    0
    # body_mass_g          0
    # sex                  0
    # dtype: int64
    4. Chúng tôi đã chỉ định tạo 100 cây quyết định khác nhau trong khu rừng của mình

Bây giờ là lúc khớp dữ liệu của chúng tôi với mô hình. Chúng ta có thể thực hiện việc này bằng cách sử dụng phương pháp có tên thích hợp là

# Seeing missing data
print[df.isnull[].sum[]]

# Returns:
# species               0
# island                0
# bill_length_mm        2
# bill_depth_mm         2
# flipper_length_mm     2
# body_mass_g           2
# sex                  11
# dtype: int64
8, phương pháp này lấy các tính năng và nhãn đào tạo làm đầu vào. Từ đó, chúng tôi có thể đưa ra dự đoán về dữ liệu thử nghiệm của mình bằng phương pháp
# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64
6, bằng cách chuyển vào các tính năng thử nghiệm

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
1

Đánh giá hiệu suất của một khu rừng ngẫu nhiên trong Scikit-Learn

Bởi vì chúng tôi đã có một mảng chứa các nhãn thực, chúng tôi có thể dễ dàng so sánh các dự đoán với mảng

# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64
7. Scikit-learning đi kèm với hàm
# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64
8 trả về tỷ lệ chính xác. Hãy xem cách nó hoạt động

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
2

Điều này cho thấy mô hình của chúng tôi đang hoạt động với độ chính xác 97%

Trực quan hóa cây quyết định rừng ngẫu nhiên trong Scikit-Learn

Một trong những khó khăn mà bạn có thể gặp phải trong hành trình học máy của mình là hộp đen học máy. Vì các thư viện như Scikit-Learn giúp việc tạo một khu rừng ngẫu nhiên trở nên đơn giản, nên bạn nên xem xét một số chi tiết về mô hình của mình

Một cách để làm điều này là thực sự phân tích các mẫu mà các cây quyết định tạo nên mô hình trông như thế nào. Có thể không thực tế nếu xem xét tất cả 100, nhưng hãy xem xét một vài trong số chúng

# Displaying Info on the Penguins Dataset
print[df.info[]]

# Returns:
# 
# RangeIndex: 344 entries, 0 to 343
# Data columns [total 7 columns]:
#  #   Column             Non-Null Count  Dtype  
# ---  ------             --------------  -----  
#  0   species            344 non-null    object 
#  1   island             344 non-null    object 
#  2   bill_length_mm     342 non-null    float64
#  3   bill_depth_mm      342 non-null    float64
#  4   flipper_length_mm  342 non-null    float64
#  5   body_mass_g        342 non-null    float64
#  6   sex                333 non-null    object 
# dtypes: float64[4], object[3]
# memory usage: 18.9+ KB
# None
3

Trong đoạn mã trên, chúng tôi đã nhập thư viện

# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64
9 và hàm
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
0. Hàm
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
1 yêu cầu chúng tôi cung cấp một cái cây để vẽ đồ thị. Ở đây, chúng ta có thể truy cập vào một cây từ khu rừng ngẫu nhiên của mình bằng cách sử dụng thuộc tính
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
2 chứa tất cả các cây.
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
3 là các cột trong DataFrame tính năng của chúng tôi,
# Checking that no missing data exists
print[df.isnull[].sum[]]

# Returns:
# species              0
# island               0
# bill_length_mm       0
# bill_depth_mm        0
# flipper_length_mm    0
# body_mass_g          0
# sex                  0
# dtype: int64
0.
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
5 là loài độc nhất của chúng ta

Hai hình ảnh bên dưới cho thấy cây thứ nhất [

# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
6] và cây thứ mười hai [
# Mapping the sex variable to binary values
df['sex int'] = df['sex'].map[{'Male': 0, 'Female': 1}]
7]

Cây quyết định mẫu từ một khu rừng ngẫu nhiên trong Scikit-Learn bằng Python

Hình ảnh dưới đây cho thấy cây quyết định thứ mười hai trong khu rừng ngẫu nhiên. Cây này sử dụng một tính năng hoàn toàn khác làm nút đầu tiên của nó

Một cây quyết định mẫu khác từ một khu rừng ngẫu nhiên trong Scikit-Learn bằng Python

Kết luận và tóm tắt

Trong hướng dẫn này, bạn đã học cách sử dụng trình phân loại rừng ngẫu nhiên trong Scikit-Learn bằng Python. Phần bên dưới cung cấp bản tóm tắt những gì bạn đã học

Làm cách nào để vẽ biểu đồ hồi quy rừng ngẫu nhiên trong Python?

Triển khai hồi quy rừng ngẫu nhiên bằng Python .
Nhập tập dữ liệu. .
tiền xử lý dữ liệu. .
Lắp hồi quy rừng ngẫu nhiên vào tập dữ liệu. .
Trực quan hóa kết quả. .
Giải thích biểu đồ trên. .
Dựng lại mô hình cho 100 cây. .
Tạo biểu đồ cho 100 cây. .
Làm lại mô hình cho 300 cây

Làm cách nào để trực quan hóa cây quyết định từ một khu rừng ngẫu nhiên trong Python bằng Scikit learn?

Cách Điều chỉnh Mô hình Cây Quyết định bằng Scikit-Learn .
Nhập thư viện
Tải tập dữ liệu
Tách dữ liệu thành các tập huấn luyện và kiểm tra
Mô hình lập mô hình 4 bước Scikit-learning
Xuất mô hình của bạn sang tệp chấm
Cài đặt và sử dụng Graphviz
Điều chỉnh mô hình rừng ngẫu nhiên bằng Scikit-Learn
Trực quan hóa công cụ ước tính của bạn

Chúng ta có thể vẽ sơ đồ rừng ngẫu nhiên không?

Biểu đồ cây . Vẽ đồ thị cho chúng về cơ bản linh cảm về cách một mô hình dự đoán giá trị của biến mục tiêu bằng cách học các quy tắc quyết định đơn giản được suy ra từ các tính năng dữ liệu. Mọi quyết định tại một nút được thực hiện bằng cách phân loại bằng tính năng duy nhất. Random forest works on several decision tree. Plotting them gives a hunch basically how a model predicts the value of a target variable by learning simple decision rules inferred from the data features. Every decision at a node is made by classification using single feature.

Chủ Đề