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
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
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
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ế
- Họ không thể làm việc với dữ liệu bị thiếu và
- 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ẫnXử 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ếuMặ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
- Áp đặt các giá trị còn thiếu
- 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
- Chúng tôi áp đặt lớp
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# 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
- Chúng tôi đã khởi tạo một đối tượng
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# 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
- Sau đó, chúng tôi sử dụng phương pháp
8 và chuyển vào cộ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
- Cuối cùng, chúng tôi sử dụng phương thức
9 để chuyển các giá trị được gán cho các cột tương ứ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
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]]
4Giá 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 raMộ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
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
- Chúng tôi đã nhập lớp
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# 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]]
- Sau đó, chúng tôi đã tạo một đối tượng
8,# 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# Dropping missing records in the sex column df = df.dropna[subset=['sex']]
- Phương pháp
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# Dropping missing records in the sex column df = df.dropna[subset=['sex']]
- 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
6 chứa một danh sách chứa một mảng các tên thuộc tính# Dropping missing records in the sex column df = df.dropna[subset=['sex']]
- Đối tượng
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# Dropping missing records in the sex column df = df.dropna[subset=['sex']]
- Thuộc tính
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
0Hãy cùng khám phá những gì chúng tôi đã làm trong đoạn mã trên
- Chúng tôi đã nhập các lớp cần thiết
- Chúng tôi đã tạo các tính năng DataFrame,
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# 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
- Dữ liệu được chia tách bằng hàm
2# 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
- Cuối cùng, chúng tôi khởi tạo mô hình của mình,
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# 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
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
3Trong đ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 taHai 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]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ó
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