Bạn đang gặp rắc rối với mã của mình vì bạn đang cố gắng tính toán zscore
trên các cột phân loại.
Để tránh điều này, trước tiên bạn nên tách tàu của mình thành các phần với các tính năng số và phân loại:
num_train = train.select_dtypes[include=["number"]]
cat_train = train.select_dtypes[exclude=["number"]]
và chỉ sau đó tính toán chỉ số của các hàng để giữ:
idx = np.all[stats.zscore[num_train] < 3, axis=1]
Và cuối cùng thêm hai mảnh lại với nhau:
train_cleaned = pd.concat[[num_train.loc[idx], cat_train.loc[idx]], axis=1]
Cho phần IQR:
Q1 = num_train.quantile[0.02]
Q3 = num_train.quantile[0.98]
IQR = Q3 - Q1
idx = ~[[num_train < [Q1 - 1.5 * IQR]] | [num_train > [Q3 + 1.5 * IQR]]].any[axis=1]
train_cleaned = pd.concat[[num_train.loc[idx], cat_train.loc[idx]], axis=1]
Xin vui lòng cho chúng tôi biết nếu bạn có thêm câu hỏi.
PS
Đồng thời, bạn có thể xem xét thêm một cách tiếp cận để xử lý các ngoại lệ bằng pandas.dataframe.clip, sẽ cắt các ngoại lệ trên cơ sở từng trường hợp thay vì thả hoàn toàn một hàng.
$ \ beingroup $
Tôi đã tự hỏi những gì là thực hành tốt nhất để loại bỏ các ngoại lệ khỏi dữ liệu. Vẽ vẽ một boxplot cho mỗi tính năng [cột của bộ dữ liệu] và loại bỏ dữ liệu nằm ngoài râu có vẻ như là một cách tiếp cận ngây thơ và có vấn đề. Ví dụ: giả sử bạn có nhiều cá nhân có nhãn 'giới tính' và nhãn 'thu nhập'. Cũng cho rằng có nhiều người đàn ông trong bộ dữ liệu hơn phụ nữ. Thật không may, do sự chênh lệch về thu nhập, chúng ta có thể thấy rằng phụ nữ nhận được mức lương thấp hơn nam giới, vì vậy nếu chúng ta chỉ đơn giản là vẽ một boxplot trên tính năng thu nhập và loại bỏ các ngoại lệ, chúng ta sẽ không tính đến một số trong những điều đó đến từ Nhóm khác nhau [và hơn nữa, giả định của nhiều đàn ông hơn phụ nữ có nghĩa là chúng ta có thể sẽ loại bỏ rất nhiều phụ nữ khỏi bộ dữ liệu].
Có vẻ như một cách tiếp cận tốt hơn sẽ là loại bỏ các ngoại lệ trên cơ sở từng nhóm, tức là, thực hiện phân tích ngoại lệ trên các cá nhân có chung các "định danh" các loại. Có cách nào để làm điều này trong Python không?
Tôi vẫn đang học khoa học dữ liệu vì vậy tôi chắc chắn rằng điều này có một thuật ngữ mà tôi không biết. Bất kỳ cái nhìn sâu sắc hoặc liên kết đến các nguồn lực tốt sẽ được đánh giá rất cao.
Đã hỏi ngày 23 tháng 1 lúc 17:34Jan 23 at 17:34
$ \ endgroup $
$ \ beingroup $
Vâng, vấn đề mất cân bằng thực sự là chính hãng trong khi xử lý trước. Không có quy tắc cứng và nhanh để loại bỏ các ngoại lệ, nhưng các phương pháp chung [phần trăm, boxplot, z-score, v.v.]. Giống như giới tính, nếu bạn lấy tiền lương của tất cả các nhân viên thì việc loại bỏ các ngoại lệ có nghĩa là loại bỏ tất cả các nhân viên được trả lương cao. Điều đó sẽ làm cho mô hình của bạn tìm hiểu thêm về các nhà tuyển dụng trung bình/trung bình [xử lý ngoại lệ]. Nhưng sau đó nếu bạn giữ chúng, chúng sẽ ảnh hưởng và mô hình sẽ tìm hiểu ít hơn về nhân viên lương trung bình.
Các giải pháp thường dễ bị khách quan và đào tạo mà chúng tôi muốn đưa ra. Sau khi xử lý trước, sự mất cân bằng [như giới tính] trong dữ liệu có thể được bù bằng cách lấy mẫu hoặc lấy mẫu. [Chúng ta có thể nhận được nhiều dữ liệu hơn: đừng lo lắng về điều đó]. Nhưng hãy chắc chắn trước khi bỏ bất kỳ dữ liệu nào có sẵn !! Lấy một vài cột [tính năng tương tự] tại một thời điểm để xử lý và xử lý chúng, thay vì áp dụng một hoạt động chung trong các nhóm, thường có thể hoạt động.
//machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/
//towardsdatascience.com/a-brief-overview-of-outlier-detection-techniques-1e0b2c19e561 Những thứ này có thể hữu ích.
Đã trả lời ngày 23 tháng 1 lúc 20:29Jan 23 at 20:29
$ \ endgroup $
$ \ beingroup $
Vâng, vấn đề mất cân bằng thực sự là chính hãng trong khi xử lý trước. Không có quy tắc cứng và nhanh để loại bỏ các ngoại lệ, nhưng các phương pháp chung [phần trăm, boxplot, z-score, v.v.]. Giống như giới tính, nếu bạn lấy tiền lương của tất cả các nhân viên thì việc loại bỏ các ngoại lệ có nghĩa là loại bỏ tất cả các nhân viên được trả lương cao. Điều đó sẽ làm cho mô hình của bạn tìm hiểu thêm về các nhà tuyển dụng trung bình/trung bình [xử lý ngoại lệ]. Nhưng sau đó nếu bạn giữ chúng, chúng sẽ ảnh hưởng và mô hình sẽ tìm hiểu ít hơn về nhân viên lương trung bình.
Các giải pháp thường dễ bị khách quan và đào tạo mà chúng tôi muốn đưa ra. Sau khi xử lý trước, sự mất cân bằng [như giới tính] trong dữ liệu có thể được bù bằng cách lấy mẫu hoặc lấy mẫu. [Chúng ta có thể nhận được nhiều dữ liệu hơn: đừng lo lắng về điều đó]. Nhưng hãy chắc chắn trước khi bỏ bất kỳ dữ liệu nào có sẵn !! Lấy một vài cột [tính năng tương tự] tại một thời điểm để xử lý và xử lý chúng, thay vì áp dụng một hoạt động chung trong các nhóm, thường có thể hoạt động.Apr 8 at 18:35
$ \ endgroup $
3