Show
Tìm hiểu cách chuẩn bị và xử lý trước dữ liệu của bạn cho các thuật toán học máyẢnh của Ashwini Chaudhary trên unplashỞ đó, chỉ có một trục trặc nhỏ bé này trước khi bạn đi sâu vào thế giới lạ mắt của các thuật toán học máy (ML), theo đó bạn cố gắng dự đoán tương lai: chuẩn bị dữ liệu hoặc tiền xử lý dữ liệu.Data Preparation or Data Preprocessing. Chuẩn bị dữ liệu là một phần không chính đáng của công việc quyến rũ nhất của thế kỷ 21. Huấn luyện các thuật toán ML và sử dụng chúng để dự đoán biến mục tiêu là một chút dễ dàng, nhờ các thư viện và gói chuyên dụng khác nhau có sẵn trong Python và R. Khoa học và thế giới ML. Các hoạt động chuẩn bị dữ liệu chuyển đổi dữ liệu thô thành một hình thức, hình dạng và định dạng có thể được sử dụng hiệu quả và hiệu quả bởi các thuật toán ML. Nó tạo thành một thành phần quan trọng của đường ống ML và có thể thực hiện hoặc phá vỡ quy trình ML.
Làm sạch dữ liệu chỉ là một thành phần của các hoạt động chuẩn bị dữ liệu cũng bao gồm lựa chọn tính năng, chuyển đổi dữ liệu, kỹ thuật tính năng và giảm kích thước. is just one component of data preparation activities that also include feature selection, data transformation, feature engineering, and dimensionality reduction. Các hoạt động xử lý dữ liệu và làm sạch dữ liệu theo định nghĩa, là duy nhất cho từng bộ dữ liệu thô được cung cấp các đặc thù riêng lẻ vốn có trong một dự án ML thực tế. Mặc dù vậy, một số hoạt động nhất định là tiêu chuẩn hộp và nên được áp dụng, hoặc ít nhất là được kiểm tra dữ liệu thô trước khi đào tạo mô hình.
Warning!Một lời cảnh báo trước khi chúng tôi khám phá các hoạt động làm sạch dữ liệu tiêu chuẩn khác nhau. Như đã lưu ý trong một trong các bài viết trước của tôi: Tất cả các hoạt động sau đây nên được thực hiện trên bộ dữ liệu đào tạo bằng số sau khi chia toàn bộ dữ liệu của bạn thành các tập hợp con/kiểm tra/xác thực để tránh rò rỉ dữ liệu. Chỉ sau đó khi bạn có một bộ dữ liệu đào tạo sạch, hãy lặp lại cùng một tập hợp các hoạt động trong các bộ dữ liệu kiểm tra (và xác thực) và trên các biến mục tiêu, nếu được yêu cầu. Trong tất cả các đoạn mã bên dưới và tuân theo ký hiệu thông thường, Làm sạch dữ liệu cơ bảnCác hoạt động sau đây sẽ tạo thành điểm khởi đầu của dự án ML của bạn, để được áp dụng cho mọi dữ liệu mà bạn có được. Xác định và xóa các yếu tố dự đoán không biến đổi khôngCác yếu tố dự đoán không biến đổi không đề cập đến các tính năng đầu vào có chứa một giá trị duy nhất trên toàn bộ phổ quan sát. Theo đó, họ không thêm bất kỳ giá trị nào vào thuật toán dự đoán vì biến đích không bị ảnh hưởng bởi giá trị đầu vào, khiến chúng trở nên dư thừa. Một số thuật toán ML cũng có thể gặp lỗi bất ngờ hoặc kết quả sai đầu ra. Pandas cung cấp một chức năng ngắn và ngọt ngào để đếm và liệt kê số lượng các giá trị duy nhất trong mỗi cột của Pandas DataFrame: X_train.nunique() Việc bỏ các cột cụ thể từ một khung dữ liệu gấu trúc là đủ đơn giản thông qua X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 0 khi không có nhiều cột bị bỏ. Một cách mạnh mẽ hơn để đạt được kết quả tương tự với nhiều cột vô cảm không phải là:X_train.drop(columns = X_train.columns[X_train.nunique() == 1], Mã trên sẽ giảm tất cả các cột có một giá trị duy nhất và cập nhật DataFrame Đánh giá các cột với rất ít giá trị duy nhấtCần xem xét đặc biệt cho các cột có rất ít số lượng giá trị duy nhất (còn gọi là phương sai thấp hoặc phương sai gần bằng không). Các cột như vậy không phải là ứng cử viên tự động bị loại khỏi bộ dữ liệu. Ví dụ, các cột thứ tự hoặc phân loại, theo thiết kế, dự kiến sẽ không có số lượng giá trị duy nhất cao. Theo trực giác, chúng ta có thể vô sinh thả các cột biến thể thấp, nhưng điều gì sẽ xảy ra nếu những người dự đoán như vậy thực sự có nhiều thông tin cho việc học mô hình? Ví dụ: giả sử rằng một tính năng nhị phân trong một vấn đề phân loại có rất nhiều số 0 và một số ít (dự đoán phương sai gần bằng 0). Biến đích luôn giống nhau khi tính năng đầu vào này bằng một; Tuy nhiên, nó có thể là một trong các giá trị mục tiêu có thể trong trường hợp tính năng này bằng không. Nó chắc chắn là hợp lý để giữ cột này như một trong những dự đoán của chúng tôi. Do đó, các cân nhắc theo ngữ cảnh và kiến thức miền nên được sử dụng để đánh giá xem các cột phương sai thấp đó có nên được loại bỏ khỏi bộ dữ liệu của chúng tôi hay không. Ví dụ:
Chúng ta có thể tính toán thủ công số lượng giá trị duy nhất trong mỗi cột theo tỷ lệ phần trăm của tổng số quan sát như dưới đây: from numpy import uniquefor i in range(X_traain.shape[1]): Mã trên sẽ in ra một danh sách tất cả các cột, cùng với số lượng các giá trị duy nhất và tỷ lệ phần trăm của nó cho tổng số quan sát. Hoặc, chúng ta có thể sử dụng thư viện Scikit-learn X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 2Class để xác định và thả các cột biến thể thấp. Tập thể dục cực kỳ thận trọng khi sử dụng lớp X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 3, vì nó được thiết kế để thả các cột dưới ngưỡng tham số hóa.and drop low-variance columns. Exercise extreme caution when using X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 3 class, as it is designed to drop columns that are below the parameterized threshold.
Đối phó với dữ liệu trùng lặpCác hàng trùng lặp, rất có thể, sẽ bị loại khỏi dữ liệu của bạn, vì dù sao chúng cũng rất có thể sẽ là dự phòng. Pandas cung cấp một chức năng đơn giản để kiểm tra bất kỳ hàng trùng lặp nào trong DataFrame. Lưu ý rằng điều này sẽ chỉ hiển thị hàng thứ hai (và bất kỳ thứ tự cao hơn), vì hàng đầu tiên được nhân đôi không được coi là trùng lặp. X_train[X_train.duplicated()] Nếu, sau khi phân tích các bản ghi trùng lặp, bạn muốn tiến hành bỏ chúng, một dòng mã duy nhất có thể đạt được điều này: X_train.drop_duplicates(inplace = True) Phát hiện ngoại viCác ngoại lệ là bất kỳ điểm dữ liệu nào có vẻ hiếm hoặc không thể xảy ra trong bối cảnh của một bộ dữ liệu nhất định. Kiến thức miền và chuyên môn về chủ đề có ích để xác định các ngoại lệ. Mặc dù không có định nghĩa tiêu chuẩn về các ngoại lệ với bản chất theo ngữ cảnh của chúng, các biện pháp thống kê và âm mưu khác nhau có thể được sử dụng để xác định và giải quyết một cách thích hợp với chúng. Tương tự như các cột biến thể thấp, các quan sát ngoại lệ không phải là ứng cử viên tự động để giảm. Thay vào đó, những điều này nên được phân tích thêm để xác định xem chúng có thực sự bất thường hay không. Vẽ hộp và râu ria là một cách đơn giản và cơ bản để trực quan hóa các ngoại lệ số trong DataFrame của bạn: X_train.boxplot() Bây giờ chúng ta hãy xem một số kỹ thuật thống kê để xác định các ngoại lệ. Sử dụng độ lệch chuẩn (SD)Các kỹ thuật SD để phát hiện ngoại lệ có thể được áp dụng cho tất cả các tính năng số thể hiện sự phân phối giống như Gaussian hoặc Gaussian. Như một sự bồi dưỡng, hãy nhớ lại rằng:
Các dòng mã sau đây sẽ chọn và thả tất cả các hàng với các giá trị lớn hơn SDX được chỉ định của mỗi cột số. 3 SDS là ngưỡng tiêu chuẩn; Tuy nhiên, 2 SDS có thể được sử dụng cho các bộ dữ liệu nhỏ và 4 SD cho các bộ dữ liệu tương đối lớn. Sử dụng phạm vi liên vùng (IQR)Chúng ta có thể sử dụng IQR để xác định các ngoại lệ trong một tính năng đầu vào không tuân theo phân phối bình thường hoặc giống như bình thường. Các giá trị nằm ngoài một ngưỡng được chỉ định (thường là 1,5 lần IQR so với phần trăm thứ 75 và dưới phần trăm thứ 25) được lọc ra để phân tích thêm. Đoạn mã sau sẽ lọc ra các ngoại lệ từ tất cả các cột số với ngưỡng 1,5. Yếu tố ngoại lệ địa phương (LOF)Từ tài liệu của Scikit-Learn, thuật toán LoF là một phương pháp phát hiện bất thường không giám sát, tính toán độ lệch mật độ cục bộ của một điểm dữ liệu nhất định đối với các nước láng giềng. Nó coi là ngoại lệ các mẫu có mật độ thấp hơn đáng kể so với hàng xóm của họ. Giấy ban đầu có thể được tìm thấy ở đây. Phương thức ________ 14 của X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 5 dự đoán liệu mỗi hàng trong một khung dữ liệu có bao gồm các ngoại lệ số (-1) hay không (1). Các hàng có ngoại lệ được đánh dấu là -1 và là 1 nếu không. Một ví dụ đơn giản, thực tế được hiển thị dưới đây:Một lời cảnh báo với LOF: Nó không cho phép các giá trị null hoặc bị thiếu trong dữ liệu được truyền đến phương thức dự đoán. Về mặt thống kê áp đặt các giá trị thiếuChỉ để nhắc lại các giá trị rõ ràng, thiếu không phải là sự xuất hiện hiếm hoi trong dữ liệu thực tế. Hầu hết các thuật toán ML không thể xử lý các giá trị bị thiếu và sẽ đưa ra một lỗi trong quá trình đào tạo mô hình. Do đó, các giá trị bị thiếu như vậy trong một bộ dữ liệu phải được bỏ qua (cách ngây thơ nhất và để tránh càng nhiều càng tốt - dữ liệu là loại tiền tệ mới!) Hoặc bằng cách nào đó được đưa ra một cách hợp lý. Một số thống kê mô tả hiệu quả nhất định thường được áp dụng cho việc cắt bỏ như vậy bao gồm:
Một vài cách đơn giản để tìm và phát hiện các giá trị thiếu hoặc null là bằng cách thực hiện một trong các chức năng sau: # display the count of non-null values in each column of a DF Các giá trị bị thiếu thống kê là khá đơn giản bằng cách sử dụng các hàm tích hợp Python. Các hàm sau đây tính toán thống kê mô tả cho mỗi cột và sử dụng thống kê được tính toán để điền vào tất cả các giá trị trống trong cột cụ thể đó: # using mean to fill missing values Tuy nhiên, hãy nhớ rằng thống kê mô tả chỉ nên được tính toán trên bộ dữ liệu đào tạo; Và sau đó, cùng một thống kê nên được sử dụng để áp đặt bất kỳ giá trị bị thiếu nào trong cả dữ liệu đào tạo và kiểm tra. Cách tiếp cận trên hoạt động tốt với việc phân chia tàu/thử nghiệm đơn giản; Tuy nhiên, thực tế trở nên không thể khi đánh giá một mô hình sử dụng xác thực chéo gấp K-vì việc chia tách được thực hiện và lặp lại nhiều lần trong một cuộc gọi hàm. Scikit-Learn từ X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 6 và X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7 đến giải cứu của chúng tôi ở đây.Thực hiện độc lập X_train.drop(columns = X_train.columns[X_train.nunique() == 1], inplace = True)7Lớp X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7 tiến hành chuyển đổi dữ liệu thông qua các bước sau:
Một cuộc biểu tình đơn giản sau: Thực hiện máy tính đơn giản với đường ốngĐường ống Scikit-Learn, cho phép chúng tôi thực hiện nhiều phép biến đổi dữ liệu một cách tuần tự trước khi áp dụng mô hình ước tính cuối cùng trong một bước duy nhất. Điều này ngăn chặn rò rỉ dữ liệu từ dữ liệu thử nghiệm vào mô hình được đào tạo trong xác thực chéo, bằng cách đảm bảo rằng các mẫu tương tự được sử dụng để đào tạo các máy biến áp và dự đoán (từ tài liệu). Đó là cách thực hành tốt nhất để sử dụng đường ống khi sử dụng xác thực chéo, như đã được trình bày dưới đây: Một vòng lặp from numpy import uniquefor i in range(X_traain.shape[1]):0 đơn giản cũng có thể được sử dụng để phân tích tất cả bốn chiến lược cắt bỏ khác nhau có sẵn trong X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7:Trên đây sẽ liệt kê các điểm chính xác trung bình của từng chiến lược cắt bỏ. Dự đoán biến mục tiêu với dữ liệu mới, trực tiếp với các giá trị bị thiếu tiềm năng đạt được như sau sử dụng đường ống: # define pipeline KNN cắt bỏ các giá trị bị thiếuKhác với việc sử dụng số liệu thống kê mô tả để áp đặt các giá trị bị thiếu, thuật toán ML cũng có thể được sử dụng để dự đoán chúng. Một mô hình hồi quy đơn giản có thể được sử dụng để dự đoán các giá trị bị thiếu; Tuy nhiên, mô hình hàng xóm K-New nhất (KNN) cũng được tìm thấy là có hiệu quả trong thực tế. Lớp Scikit-Learn từ from numpy import uniquefor i in range(X_traain.shape[1]):2 hỗ trợ KNN Imptution-rất giống với X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7 trong việc sử dụng của nó. Giống như X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7 trước tiên tôi sẽ chứng minh cách sử dụng độc lập của ____ 22 trước khi thực hiện nó trong một đường ống.Thực hiện Knnimpter với đường ốngBây giờ hãy để chúng tôi xem làm thế nào nó có thể được thực hiện trong một đường ống để xác nhận hiệu quả: Chúng tôi cũng có thể áp dụng vòng lặp from numpy import uniquefor i in range(X_traain.shape[1]):0 để xem qua nhiều tham số from numpy import uniquefor i in range(X_traain.shape[1]):7 để xác định cái tốt nhất dựa trên số liệu chính xác của chúng tôi: Dự đoán biến mục tiêu với dữ liệu trực tiếp mới có chứa các giá trị bị thiếu đạt được bằng các phương tiện tương tự như đã được trình bày ở trên với X_train.drop(columns = X_train.columns[X_train.nunique() == 1], 7.Sự kết luậnĐó là từ tôi lần này đối với các nhiệm vụ làm sạch dữ liệu cụ thể trong Python cho các dự án học máy. Hãy liên hệ với tôi nếu bạn muốn thảo luận bất cứ điều gì liên quan đến phân tích dữ liệu và học máy. Cho đến lần sau - Rock On! Cảm hứng và tài liệu tham khảoJason Brownlee của Machine Learning Mastery [1] Zheng, A., & Casari, A. (2018). Lời nói đầu. Trong kỹ thuật tính năng cho học máy: Nguyên tắc và kỹ thuật cho các nhà khoa học dữ liệu (tr. VII). Sebastopol, CA: O hèReilly. [2] Ilyas, I. F., & Chu, X. (2019). Giới thiệu. Trong làm sạch dữ liệu (trang 1). NY: Hiệp hội cho máy móc máy tính. |