1. Trang chủ
  2. » Giáo án - Bài giảng

Cẩm nang máy học với Python: Chương 4: xử lý dữ liệu định lượng

28 52 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Xử Lý Dữ Liệu Định Lượng
Trường học Trường Đại Học
Chuyên ngành Máy Học
Thể loại Sách
Định dạng
Số trang 28
Dung lượng 81,39 KB
File đính kèm chapter 4_Handling numerical data.rar (77 KB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Dữ liệu định lượng là thước đo của một điều gì đó—cho dù quy mô lớp học, doanh số hàng tháng hay điểm số của học sinh. Cách tự nhiên để biểu diễn những số lượng này là bằng số (ví dụ: 29 sinh viên, doanh thu là 529.392 USD). Trong chương này, chúng tôi sẽ đề cập đến nhiều chiến lược để chuyển đổi dữ liệu số thô thành các tính năng được xây dựng có mục đích cho các thuật toán học máy.

Trang 1

CHƯƠNG 4 XỬ LÝ DỮ LIỆU SỐ

Giới thiệu

Dữ liệu định lượng là thước đo của một điều gì đó—cho dùquy mô lớp học, doanh số hàng tháng hay điểm số của học sinh.Cách tự nhiên để biểu diễn những số lượng này là bằng số (vídụ: 29 sinh viên, doanh thu là 529.392 USD) Trong chương này,chúng tôi sẽ đề cập đến nhiều chiến lược để chuyển đổi dữ liệu

số thô thành các tính năng được xây dựng có mục đích cho cácthuật toán học máy

Thay đổi thang đo một thuộc tính

Sử dụng MinMaxScaler của scikit-learn để thay đổi tỷ lệmột mảng tính năng:

Trang 2

trong đó

x là vectơ thuộc tính,

xi là một giá trị của thuộc tính x

và x’ chính là giá trị chuyển đổi thang đo

Trong ví dụ trên, chúng ta có thể thấy từ thuộc tínhfeature đã được đổi thành thang đo từ 0-1:

Trang 3

tính toán giá trị tối thiểu và tối đa của thuộc tính, sau đó sửdụng transform để định lại thang đo cho thuộc tính Tùy chọnthứ hai là sử dụng fit_transform để thực hiện cả hai thao táccùng một lúc Không có sự khác biệt về mặt toán học giữa haitùy chọn, nhưng đôi khi có lợi ích thực tế khi giữ các thao tácriêng biệt vì nó cho phép chúng ta áp dụng cùng một phép biếnđổi cho các bộ dữ liệu khác nhau.

Chuẩn hóa một thuộc tính

StandardScaler của scikit-learn thực hiện cả hai phépbiến đổi chuyển trung bình của thuộc tính định lượng thành 0 và

scaler = preprocessing StandardScaler ()

# Transform the feature

standardized = scaler fit_transform ( )

Trang 4

[ 1.97516685]])

Một giải pháp thay thế phổ biến cho việc thay đổi thang

đo tối thiểu-tối đa là thay đổi thang đo thuộc tính để có phân bốgần đúng phân phối chuẩn Để đạt được điều này, chúng tôi sửdụng phương pháp tiêu chuẩn hóa để chuyển đổi dữ liệu saocho nó có giá trị trung bình bằng 0 và độ lệch chuẩn = 1 Cụthể, mỗi giá trị của thuộc tính được chuyển đổi sao cho:

Trong đó

x’ chính là giá trị đã tiêu chuẩn hóa của x Thuộc tính đượcchuyển đổi biểu thị số độ lệch chuẩn của giá trị ban đầu so vớigiá trị trung bình của thuộc tính (còn được gọi là điểm z trongthống kê)

Tiêu chuẩn hóa là một phương pháp thay đổi thang đophổ biến trong tiền xử lý máy học và theo kinh nghiệm của tôi,

nó được sử dụng thường xuyên hơn so với thay đổi thang đo tốithiểu-tối đa Tuy nhiên, nó phụ thuộc vào thuật toán học tập Ví

dụ, phân tích thành phần chính thường hoạt động tốt hơn khi sửdụng tiêu chuẩn hóa, trong khi thay đổi thang đo tối thiểu-tối đathường được khuyến nghị cho các mạng thần kinh (cả hai thuậttoán sẽ được thảo luận sau trong cuốn sách này) Theo nguyêntắc chung, tôi khuyên bạn nên đặt mặc định là tiêu chuẩn hóatrừ khi bạn có lý do cụ thể để sử dụng giải pháp thay thế

Chúng ta có thể thấy tác động của việc tiêu chuẩn hóabằng cách xem xét giá trị trung bình và độ lệch chuẩn của kếtquả đầu ra của giải pháp tiêu chuẩn hóa:

# Print mean and standard deviation

print ( "Mean:" , round ( standardized mean ()))

print ( "Standard deviation:" , standardized std ())

Mean: 0.0

Trang 5

Standard deviation: 1.0

Nếu dữ liệu của chúng ta có các giá trị ngoại lai, nó cóthể tác động tiêu cực đến việc tiêu chuẩn hóa của chúng tôibằng cách ảnh hưởng đến giá trị trung bình và phương sai củathuộc tính Trong trường hợp này, việc thay đổi thang đo thuộctính bằng cách sử dụng trung vị và khoảng tứ phân vị thườnghữu ích Trong scikit-learn, chúng tôi thực hiện việc này bằngphương pháp RobustScaler:

Bình thường hóa các quan sát

Bạn muốn rescale các giá trị đặc trưng của quan sát để cóđịnh mức đơn vị (tổng độ dài là 1) Chúng ta sử dụng Normalizervới đối số norm

# Load libraries

from sklearn.preprocessing import Normalizer

# Create feature matrix

features = np.array([[0.5, 0.5],

[1.1, 3.4],

[1.5, 20.2],

[1.63, 34.4],

Trang 6

sẽ định lại tỷ lệ các giá trị trên các quan sát riêng lẻ để có địnhmức đơn vị (tổng độ dài của chúng là 1) Kiểu thay đổi tỷ lệ nàythường được sử dụng khi chúng ta có nhiều biến tương đương(ví dụ: phân loại văn bản khi mỗi từ hoặc nhóm n từ là mộtbiến).

Normalizer cung cấp ba tùy chọn chuẩn với chuẩn Euclide(thường được gọi là L2) là đối số mặc định:

trong đó x là một quan sát riêng lẻ và xn là giá trị của quan sát

đó đối với đặc điểm thứ n

# Transform feature matrix

features_l2_norm = Normalizer(norm="l2").transform(features)

# Show feature matrix

features_l2_norm

Trang 7

Còn không, chúng ta sử dụng chuẩn Manhattan norm (L1):

# Transform feature matrix

features_l1_norm = Normalizer(norm="l1").transform(features)

# Show feature matrix

đó là lý do tại sao nó được gọi là “chuẩn Manhattan” hoặc

“chuẩn Taxicab”

Trên thực tế, hãy lưu ý rằng norm="l1" thay đổi tỷ lệ cácgiá trị của quan sát để chúng có tổng bằng 1, đôi khi có thể làchất lượng mong muốn:

# Print sum

print("Sum of the first observation\'s values:",

features_l1_norm[0, 0] + features_l1_norm[0, 1])

Trang 8

Sum of the first observation's values: 1.0

Tạo các biến đa thức và tương tác

Mặc dù một số người chọn tạo các tính năng đa thức vàtương tác theo cách thủ công, nhưng scikit-learn cung cấp mộtphương pháp tích hợp sẵn:

# Load libraries

from sklearn.preprocessing import PolynomialFeatures

# Create feature matrix

# Create polynomial features

trong khi degree =3 sẽ tạo ra các tính năng mới được nânglên lũy thừa bậc hai và thứ ba:

Trang 9

Ngoài ra theo mặc định PolynomialFeatures bao gồm luôn

cả tương tác của các đặc tính:

Chúng ta có thể hạn chế các tính năng được tạo chỉ ở cáctính năng tương tác bằng cách đặt interaction_only thành True:interaction = PolynomialFeatures(degree=2,

interaction_only=True, include_bias=False)

Ngoài ra, chúng ta thường gặp phải tình huống trong đótác dụng của một biến này này phụ thuộc vào biến khác Một ví

dụ đơn giản là nếu chúng ta đang cố gắng dự đoán xem cà phêcủa mình có ngọt hay không và chúng ta có hai đặc điểm: (1) càphê có được khuấy hay không và (2) chúng ta có thêm đườnghay không Riêng lẻ, mỗi đặc điểm không dự đoán được độ ngọtcủa cà phê, nhưng sự kết hợp tác dụng của chúng thì có Nghĩa

Trang 10

là cà phê chỉ có vị ngọt nếu cà phê có đường và được khuấyđều Tác động của từng đặc tính lên mục tiêu (vị ngọt) phụthuộc lẫn nhau Chúng ta có thể mã hóa mối quan hệ đó bằngcách đưa vào một đặc tính tương tác là tích của các đặc tínhriêng lẻ.

Chuyển đổi biến số

Bạn muốn thực hiện chuyển đổi tùy chỉnh sang một hoặcnhiều tính năng Trong scikit-learn, hãy sử dụng hàmFunctionTransformer để áp dụng một hàm cho một tập hợp cácbiến số:

# Load libraries

from sklearn.preprocessing import FunctionTransformer

# Create feature matrix

features = np.array([[2, 3],

[2, 3],

[2, 3]])

# Define a simple function

def add_ten(x: int) -> int:

Trang 11

Phát hiện các giá trị ngoại lai

Bạn muốn xác định những quan sát cực trị Thật khôngmay, việc phát hiện các giá trị ngoại lai là một nghệ thuật hơn

là một khoa học Tuy nhiên, một phương pháp phổ biến là giả sử

dữ liệu có phân phối chuẩn và dựa trên giả định đó, “vẽ” mộthình elip xung quanh dữ liệu, phân loại mọi quan sát bên trong

Trang 12

hình elip là nội bộ (được gắn nhãn là 1) và mọi quan sát bênngoài hình elip là một ngoại lệ (được gắn nhãn là -1):

# Load libraries

from sklearn.covariance import EllipticEnvelope

from sklearn.datasets import make_blobs

# Create simulated data

Trong các mảng này, giá trị -1 đề cập đến các giá trị ngoại

lệ trong khi giá trị 1 đề cập đến các giá trị nội bộ Hạn chế chínhcủa phương pháp này là cần phải xác định thông sốcontamination, tức là tỷ lệ các quan sát nằm ngoài phạm vi giátrị ngoại lệ—một giá trị mà chúng ta không biết Hãy coicontamination là ước tính của chúng ta về độ sạch của dữ liệu.Nếu chúng tôi kỳ vọng dữ liệu của mình có ít ngoại lệ, chúng tôi

có thể đặt contamination ở mức nhỏ Tuy nhiên, nếu chúng tôi

Trang 13

tin rằng dữ liệu có khả năng có nhiều ngoại lệ, chúng tôi có thểđặt contamination ở giá trị cao hơn.

Thay vì xem xét các quan sát một cách tổng thể, chúng ta

có thể xem xét các đặc điểm riêng lẻ và xác định các giá trị cựctrị trong các đặc điểm đó bằng cách sử dụng khoảng tứ phân vị(IQR):

# Create one feature

feature = features[:,0]

# Create a function to return index of outliers

def indicies_of_outliers(x: int) -> np.array(int):

IQR is the difference between the first and third quartile of a set

of data You can think of IQR as the spread of the bulk of thedata, with outliers being observations far from the mainconcentration of data Outliers are commonly defined as anyvalue 1.5 IQRs less than the first quartile, or 1.5 IQRs greaterthan the third quartile

IQR là hiệu giữa tứ phân vị thứ nhất và thứ ba của một tậphợp dữ liệu Bạn có thể coi IQR là sự phân tán của phần lớn dữliệu, với các giá trị ngoại lệ là những quan sát nằm xa nơi tậptrung dữ liệu chính Các số ngoại lai thường được định nghĩa làbất kỳ giá trị nào nhỏ hơn 1,5 IQR so với tứ phân vị thứ nhấthoặc lớn hơn 1,5 IQR so với tứ phân vị thứ ba

Trang 14

Không có một kỹ thuật tốt nhất nào để phát hiện các giá trịngoại lai Thay vào đó, chúng ta có một tập hợp các kỹ thuật,tất cả đều có ưu điểm và nhược điểm riêng Chiến lược tốt nhấtcủa chúng ta thường là thử nhiều kỹ thuật (ví dụ: phát hiệnbằng EllipticEnvelope và IQR) và xem xét kết quả một cáchtổng thể.

Nếu có thể, chúng ta nên xem xét những quan sát màchúng ta phát hiện là những giá trị ngoại lai và cố gắng hiểuchúng Ví dụ: nếu chúng ta có một tập dữ liệu về các ngôi nhà

và một biến là số phòng, thì một giá trị ngoại lai có 100 phòng

có thực sự là một ngôi nhà hay nó thực sự là một khách sạn đã

bị phân loại sai?

Xử lý các giá trị ngoại lai

Bạn có giá trị ngoại lai trong dữ liệu mà bạn muốn xác định

và sau đó giảm tác động của chúng đến phân phối dữ liệu.Thông thường chúng ta có thể sử dụng ba chiến lược để xử lýcác ngoại lệ Đầu tiên, chúng ta có thể loại bỏ chúng:

Trang 15

Price Bathroo

ms

Square_F eet

Outli er

Trang 16

Price Bathroo

ms

Square_F eet

Outli er

Outli er

Log_Of_Square_ Feet

Trang 17

cảm biến bị hỏng hoặc giá trị bị mã hóa sai, thì chúng ta có thểloại bỏ quan sát hoặc thay thế các giá trị ngoại lệ bằng NaN vìchúng tôi không thể tin cậy những giá trị đó Tuy nhiên, nếuchúng ta tin rằng các giá trị ngoại lai là những giá trị cực kỳthực sự (ví dụ: một ngôi nhà [biệt thự] có 200 phòng tắm), thìviệc đánh dấu chúng là các giá trị ngoại lệ hoặc chuyển đổi giátrị của chúng sẽ phù hợp hơn.

Thứ hai, cách chúng ta xử lý các ngoại lệ phải dựa trênmục tiêu máy học của chúng ta Ví dụ: nếu muốn dự đoán giánhà dựa trên đặc điểm của ngôi nhà, chúng ta có thể giả địnhmột cách hợp lý rằng giá của những biệt thự có hơn 100 phòngtắm được thúc đẩy bởi một động lực khác với những ngôi nhàgia đình thông thường Hơn nữa, nếu chúng ta đang đào tạomột mô hình để sử dụng như một phần của ứng dụng web chovay mua nhà trực tuyến, chúng tôi có thể cho rằng người dùngtiềm năng của chúng tôi sẽ không bao gồm các tỷ phú đang tìmmua biệt thự

Vậy chúng ta nên làm gì nếu có ngoại lệ? Hãy suy nghĩ về

lý do tại sao chúng là các ngoại lệ, có mục tiêu cuối cùng cho

dữ liệu và quan trọng nhất là hãy nhớ rằng việc không đưa raquyết định giải quyết các giá trị ngoại lai tự nó đã là một quyếtđịnh có hàm ý

Một điểm bổ sung: nếu bạn có các giá trị ngoại lai, chuẩnhóa có thể không phù hợp vì giá trị trung bình và phương sai cóthể bị ảnh hưởng nhiều bởi các giá trị ngoại lai Trong trườnghợp này, hãy sử dụng phương pháp thay đổi tỷ lệ mạnh mẽ hơn

để chống lại các giá trị ngoại lệ, như RobustScaler

Trang 18

Phân nhóm biến định lượng bằng cách sử dụng Rời rạc hóa

Bạn có một biến định lượng và muốn chia nó thành các phần rời rạc Tùy thuộc vào cách chúng ta muốn chia nhỏ dữ liệu, có hai kỹ thuật chúng ta có thể sử dụng Đầu tiên, chúng ta

có thể nhị phân hóa biến theo một số ngưỡng:

# Load libraries

from sklearn.preprocessing import Binarizer

# Create feature

age = np.array([[6],

[12],

[20],

[36],

[65]])

# Create binarizer binarizer = Binarizer(threshold=18) # Transform feature binarizer.fit_transform(age) array([[0], [0],

[1],

[1],

[1]])

Cách thứ hai chúng ta có thể chia biến số thành nhiều ngưỡng: # Bin feature np.digitize(age, bins=[20,30,64]) array([[0], [0],

Trang 19

Rời rạc hóa có thể là một chiến lược hiệu quả khi chúng ta

có lý do để tin rằng một biến số sẽ hoạt động giống một biếnphân loại hơn Ví dụ, chúng ta có thể tin rằng có rất ít sự khácbiệt trong thói quen chi tiêu của thanh niên 19 và 20 tuổi,nhưng có sự khác biệt đáng kể giữa thanh niên 20 và 21 tuổi(độ tuổi ở Hoa Kỳ mà thanh niên có thể tiêu dùng rượu bia).Trong ví dụ đó, có thể hữu ích khi chia các cá nhân trong dữ liệucủa chúng ta thành những người có thể uống rượu và nhữngngười không thể Tương tự, trong các trường hợp khác, việcphân tách dữ liệu của chúng ta thành ba bin trở lên có thể hữuích

Trong ví dụ trên, chúng tôi thấy có hai phương pháp rời rạchóa—Binarizer của scikit-learn chia thành hai bin và digitize của NumPy cho ba bin trở lên—tuy nhiên, chúng ta cũng có thể

sử dụng digitize để nhị phân hóa các tính năng như Binarizerbằng cách chỉ định một ngưỡng duy nhất:

Trang 20

có thể sử dụng phân cụm k-means để nhóm các quan sát tương

tự và đưa ra một thuộc tính mới chứa thành viên nhóm của mỗiquan sát:

# Load libraries

from sklearn.datasets import make_blobs

from sklearn.cluster import KMeans

# Make simulated feature matrix

# Make k-means clusterer

clusterer = KMeans(3, random_state=0)

Trang 21

# Fit clusterer

clusterer.fit(features)

# Predict values

dataframe["group"] = clusterer.predict(features)

# View first few observations

dataframe.head(5)

feature

_1

feature _2

grou p

9.87755

4

–3.336145

2

Chúng tôi đang đi trước một chút và sẽ đi sâu hơn nhiều vềcác thuật toán phân cụm ở phần sau của cuốn sách Tuy nhiên,tôi muốn chỉ ra rằng chúng ta có thể sử dụng phân cụm như

Trang 22

một bước tiền xử lý Cụ thể, chúng ta sử dụng các thuật toánhọc không giám sát như k-mean để phân cụm các quan sátthành các nhóm Kết quả là một đặc điểm phân loại có nhữngquan sát tương tự là thành viên của cùng một nhóm.

Đừng lo lắng nếu bạn không hiểu tất cả những điều đó: chỉcần nhớ rằng phân cụm có thể được sử dụng trong quá trìnhtiền xử lý

Xóa các quan sát có giá trị bị thiếu

Bạn cần xóa các quan sát chứa các giá trị bị thiếu Việcxóa các quan sát có giá trị bị thiếu thật dễ dàng với dòngNumPy thông minh:

# Keep only observations that are not (denoted by ~) missing

features[~np.isnan(features).any(axis=1)]

Trang 23

Giải pháp đơn giản nhất là xóa mọi quan sát chứa mộthoặc nhiều giá trị bị thiếu, một nhiệm vụ được thực hiện nhanhchóng và dễ dàng bằng cách sử dụng NumPy hoặc pandas.

Điều đó có nghĩa là chúng ta nên cẩn thận khi xóa cácquan sát có giá trị bị thiếu Xóa chúng là tùy chọn cơ bản vìthuật toán của chúng ta mất quyền truy cập vào thông tin chứatrong các giá trị không thiếu của quan sát

Điều quan trọng không kém là tùy thuộc vào nguyên nhâncủa các giá trị bị thiếu, việc xóa các quan sát có thể gây sailệch cho dữ liệu của chúng ta Có ba loại dữ liệu bị thiếu:

Ngày đăng: 30/10/2023, 21:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w