Bagaimana untuk Mengekodkan Berbilang Lajur DataFrame dengan Cekap dengan Scikit-Learn?

Barbara Streisand
Lepaskan: 2024-11-25 10:23:11
asal
253 orang telah melayarinya

How to Efficiently Encode Multiple DataFrame Columns with Scikit-Learn?

Pengekodan Label Berbilang Lajur DataFrame dengan Scikit-Learn

Apabila bekerja dengan label rentetan dalam DataFrame panda, selalunya perlu mengekodnya ke dalam integer untuk keserasian dengan algoritma pembelajaran mesin. LabelEncoder Scikit-learn ialah alat yang mudah untuk tugas ini, tetapi menggunakan berbilang objek LabelEncoder untuk setiap lajur boleh membosankan.

Untuk memintas ini, anda boleh memanfaatkan pendekatan berikut:

df.apply(LabelEncoder().fit_transform)
Salin selepas log masuk

Ini menggunakan LabelEncoder pada setiap lajur dalam DataFrame, dengan berkesan mengekod semua label rentetan integer.

Pengekodan Dipertingkatkan dengan OneHotEncoder

Dalam versi terbaru Scikit-Learn (0.20 dan ke atas), kelas OneHotEncoder() disyorkan untuk input rentetan pengekodan label :

OneHotEncoder().fit_transform(df)
Salin selepas log masuk

OneHotEncoder menyediakan one-hot yang cekap pengekodan, yang selalunya diperlukan untuk data kategori.

Operasi Songsang dan Transformasi

Untuk mengubah songsang atau mengubah label yang dikodkan, anda boleh menggunakan teknik berikut:

  1. Kekalkan kamus tentang LabelEncoders:
from collections import defaultdict
d = defaultdict(LabelEncoder)

# Encoding
fit = df.apply(lambda x: d[x.name].fit_transform(x))

# Inverse transform
fit.apply(lambda x: d[x.name].inverse_transform(x))

# Transform future data
df.apply(lambda x: d[x.name].transform(x))
Salin selepas log masuk
  1. Gunakan ColumnTransformer untuk lajur tertentu:
from sklearn.preprocessing import ColumnTransformer, OneHotEncoder

# Select specific columns for encoding
encoder = OneHotEncoder()
transformer = ColumnTransformer(transformers=[('ohe', encoder, ['col1', 'col2', 'col3'])])

# Transform the DataFrame
encoded_df = transformer.fit_transform(df)
Salin selepas log masuk
  1. Gunakan Neuraxle's FlattenForEach step:
from neuraxle.preprocessing import FlattenForEach

# Flatten all columns and apply LabelEncoder
encoded_df = FlattenForEach(LabelEncoder(), then_unflatten=True).fit_transform(df)
Salin selepas log masuk

Bergantung pada keperluan khusus anda, anda boleh memilih kaedah yang paling sesuai untuk pengekodan label berbilang lajur dalam Scikit-Learn.

Atas ialah kandungan terperinci Bagaimana untuk Mengekodkan Berbilang Lajur DataFrame dengan Cekap dengan Scikit-Learn?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan