Nếu chưa, thì hãy nhớ rằng làm sạch dữ liệu là bánh mì và bơ của quy trình khoa học dữ liệu. Vì con người là những gì họ ăn [một câu nói nổi tiếng khác], các mô hình học máy hoạt động theo dữ liệu bạn cung cấp cho nó. Tóm lại, dữ liệu lộn xộn gây ra hiệu suất kém, trong khi dữ liệu sạch là điều kiện tiên quyết để có hiệu suất mô hình tốt. Tất nhiên, dữ liệu sạch không có nghĩa là lúc nào cũng hoạt động tốt, việc lựa chọn đúng mô hình [10% còn lại] cũng rất quan trọng, nhưng không có dữ liệu sạch thì mô hình lý tưởng cũng không thể hoạt động ở mức mong muốn
Trong blog này, tôi sẽ liệt kê các vấn đề được giải quyết trong quá trình làm sạch dữ liệu và đưa ra các giải pháp khả thi.
Hy vọng bạn sẽ thích nó
Dữ liệu bị mất
Khi thiếu dữ liệu trong tập dữ liệu, tốt hơn hết bạn đừng vội điền vào. Bởi vì vị trí của các ô trống có thể cho bạn biết điều gì đó hữu ích. Ví dụ
- Các giá trị NA chỉ quay lại với nhau ở phần đuôi hoặc ở giữa tập dữ liệu. Điều này có nghĩa là, có thể có sự cố kỹ thuật trong quá trình thu thập dữ liệu. Sau đó, bạn phân tích quy trình thu thập dữ liệu cho chuỗi mẫu cụ thể đó và cố gắng tìm ra nguồn gốc của vấn đề
- Nếu hơn 70–80% cột là NA, bạn có thể bỏ cột
- Nếu các giá trị NA nằm trong cột là câu hỏi tùy chọn trong biểu mẫu, cột đó có thể được giải mã như người dùng đã trả lời [1] hoặc không trả lời [0]
Thư viện python chúng ta sẽ sử dụng để kiểm tra các trường hợp trên là missingno.
matrix
chức năng của thư viện này rất tiện dụng cho cách này. Các đường màu trắng trong biểu đồ là các NA
import missingno as msno
msno.matrix[df]
Đến với quy nạp, có rất nhiều cách như
- trung bình, trung bình, chế độ;
- kNN;
- không hoặc hằng số và vv
Các phương pháp khác nhau có những ưu điểm và nhược điểm của nhau và không có kỹ thuật “tốt nhất” cho tất cả các trường hợp. Bài viết dưới đây là một trong những tài nguyên tốt nhất cho cả lý thuyết và triển khai mã của các kỹ thuật quy nạp
6 cách khác nhau để bù dữ liệu bị thiếu [ví dụ về nhập dữ liệu]
hướng tới khoa học dữ liệu. com
ngoại lệNgoại lệ là các giá trị cực lớn hoặc nhỏ so với các điểm khác của tập dữ liệu. Sự tồn tại của chúng ảnh hưởng đáng kể đến hiệu suất của các mô hình toán học. Hãy xem ví dụ đơn giản này để hiểu lý do đằng sau việc hạ cấp hiệu suất
Trong biểu đồ bên trái, không có ngoại lệ và đường khá khớp với các điểm dữ liệu. Tuy nhiên, trong biểu đồ bên phải, có một ngoại lệ và khi đường cố gắng bao phủ tất cả các điểm của tập dữ liệu, sự hiện diện của một ngoại lệ sẽ thay đổi vị trí của đường và nó không khớp với ít nhất một nửa số điểm
Như chúng ta đã biết tại sao các ngoại lệ không tốt cho tập dữ liệu, hãy chuyển sang một số khái niệm toán học. Thứ nhất, cần xác định thế nào là “cực kỳ” lớn hay nhỏ
Các giá trị 1. 5 x IQR [interquartile range] cao hơn/nhỏ hơn Q3/Q1 được gọi là ngoại lệ. IQR là sự khác biệt giữa Q3 và Q1 [IQR = Q3-Q1]
Tôi đã viết hàm bên dưới để kiểm tra số lượng ngoại lệ trong tập dữ liệu
Một cách để xử lý các ngoại lệ là làm cho chúng bằng Q3 hoặc Q1. Bằng cách sử dụng pandas và thư viện numpy, chức năng dưới đây thực hiện nhiệm vụ này. Đây. Hàm lower_upper_range
tìm phạm vi có bên ngoài là ngoại lệ. Sau đó, với chức năng clip numpy, các giá trị được cắt thành các phạm vi
Vấn đề ngoại lệ là về các tính năng số, bây giờ hãy nói về các cột chuỗi. Dữ liệu không nhất quán có nghĩa là các lớp duy nhất của một cột có các biểu diễn khác nhau. Ví dụ ở cột giới tính có cả nam/nữ và M/F. Trong trường hợp này, sẽ có 4 lớp, nhưng thực tế có hai lớp
Như bạn đã dự đoán, không có tự động hóa cho nhiệm vụ này, do đó chúng tôi cần phân tích các lớp theo cách thủ công. Chức năng unique
của gấu trúc là dành cho mục đích này. Hãy xem ví dụ về cột tên của dữ liệu dự đoán giá xe hơi
Đây, mazda-mazda, Nissan-nissan, porsche-porsche, toyota-toyota, v.v. là minh họa cho vấn đề dữ liệu không nhất quán. Tôi thích sử dụng chức năng pandas loc để giải quyết nó
Dữ liệu không hợp lệDanh mục này chứa các giá trị đơn giản là không đúng về mặt logic. Ví dụ,
- tuổi của ai đó là 560;
- thời gian sử dụng là -8 giờ;
- chiều cao của một người là 1200 cm-s và v.v.
Đối với các cột số, chức năng mô tả gấu trúc có thể được sử dụng để xác định các lỗi đó
df.describe[]
Có thể có hai loại lý do dẫn đến dữ liệu không hợp lệ
- Lỗi thu thập dữ liệu
Kỹ sư dữ liệu có thể gõ 1799 thay vì 179 cho cột chiều cao. Loại lỗi ngẫu nhiên này có thể được coi là giá trị null và được quy cho cùng với các NA khác
2. Lỗi thao tác dữ liệu
Một số cột của tập dữ liệu có thể là đầu ra của các hàm do nhà phát triển mã hóa. Ví dụ: một hàm tính tuổi từ ngày sinh và kết quả là âm. Nó có nghĩa là phương trình không chính xác
Sao chép dữ liệuKhi có các hàng giống hệt nhau trong tập dữ liệu, đó là sự cố dữ liệu trùng lặp. Điều này có thể xảy ra do lỗi kết hợp dữ liệu [cùng một hàng đến từ nhiều nguồn], người dùng có thể gửi câu trả lời của mình hai lần, v.v. Cách lý tưởng để xử lý sự cố chỉ là xóa các hàng sao chép
Để kiểm tra thời tiết có hàng trùng lặp hay không, có thể sử dụng chức năng sao chép gấu trúc
df.loc[df.duplicated[]]
Sau khi xác định sự tồn tại của các bản sao, chức năng pandas drop_duplicates
sẽ loại bỏ các hàng trùng lặp
df.drop_duplicates[]
Kiểu dữ liệuBạn đã bao giờ gặp lỗi chuỗi kỳ lạ khi làm việc với cột tuổi chưa? . Do đó, nên kiểm tra kiểu dữ liệu của tất cả các cột bằng hàm pandas dtype
Ngoài ra, tôi thực sự khuyên bạn nên xem bài viết này về việc sử dụng bộ nhớ của các loại dữ liệu khác nhau và tăng tốc các quy trình bằng cách chọn đúng loại
Giảm sử dụng bộ nhớ. Làm điều này trước khi bạn bắt đầu bất kỳ Dự án khoa học dữ liệu nào
www. linkin. com
Thưởng. Vấn đề rò rỉ dữ liệuTrước khi xây dựng mô hình, tập dữ liệu được chia thành tập huấn luyện và tập kiểm tra. Bộ kiểm tra là dữ liệu chưa nhìn thấy và được sử dụng để đánh giá hiệu suất của mô hình. Nếu bộ kiểm tra bằng cách nào đó được mô hình “nhìn thấy” trong các bước làm sạch dữ liệu hoặc tiền xử lý dữ liệu, thì đó được gọi là rò rỉ dữ liệu. Đó là lý do tại sao, dữ liệu nên được phân tách trước các bước làm sạch và tiền xử lý
Hãy chọn cách quy nạp giá trị còn thiếu làm ví dụ. Có NA trong cột số và nó được gán bằng phương pháp trung bình. Khi nó được thực hiện trước khi chia, giá trị trung bình của toàn bộ tập dữ liệu được sử dụng, nhưng nếu nó được thực hiện sau khi chia, giá trị trung bình của huấn luyện và kiểm tra riêng sẽ được sử dụng
Vấn đề với kịch bản đầu tiên là, các giá trị được gán trong tập kiểm tra sẽ liên quan đến tập huấn luyện, bởi vì giá trị trung bình là của toàn bộ tập dữ liệu. Vì vậy, khi mô hình được xây dựng với tập tàu, nó cũng sẽ “thấy” tập kiểm tra. Nhưng mục tiêu của chúng tôi trong việc phân tách là giữ cho bộ thử nghiệm hoàn toàn mới và sử dụng nó như dữ liệu mới để đánh giá hiệu suất. Đó là lý do tại sao, tập dữ liệu phải được phân tách trước khi hoạt động
Như chúng ta đã thảo luận tại sao kịch bản thứ hai là đúng, bây giờ hãy chuyển sang cách nó sẽ được triển khai trong mã. Từ những ấn tượng đầu tiên, bạn có thể nói rằng, nó không hiệu quả và nó có thể đúng. Nhưng vì vấn đề rò rỉ dữ liệu rất quan trọng và được ưu tiên, đó là cách bạn nên làm. Để làm cho nó hiệu quả, thư viện sklearn cung cấp các đường ống dẫn. Đơn giản, đường ống là sự kết hợp của tất cả các bước thao tác mà bạn gửi dữ liệu dưới dạng đầu vào và đầu ra là dữ liệu sạch. Để biết chi tiết về việc xây dựng đường ống, bạn có thể tham khảo blog này