Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Melabelkan Pengekodan Berbilang Lajur dengan Cekap dalam Scikit-Learn?

Bagaimana untuk Melabelkan Pengekodan Berbilang Lajur dengan Cekap dalam Scikit-Learn?

DDD
DDDasal
2024-11-12 03:48:02230semak imbas

How to Label Encode Multiple Columns Efficiently in Scikit-Learn?

Pengekodan Label Merentas Berbilang Lajur dalam Scikit-Learn

Pengekodan label ialah teknik biasa untuk mengubah data kategori kepada ciri berangka. Walaupun mungkin untuk membuat contoh LabelEncoder yang berasingan untuk setiap lajur, dalam kes berbilang lajur memerlukan pengekodan label, adalah lebih cekap untuk menggunakan pengekod tunggal.

Pertimbangkan DataFrame dengan banyak lajur label rentetan. Untuk melabelkan pengekodan keseluruhan DataFrame, pendekatan yang mudah adalah dengan menghantar keseluruhan DataFrame kepada LabelEncoder, seperti yang ditunjukkan di bawah:

import pandas as pd
from sklearn.preprocessing import LabelEncoder 

df = pd.DataFrame({
    'pets': ['cat', 'dog', 'cat', 'monkey', 'dog', 'dog'], 
    'owner': ['Champ', 'Ron', 'Brick', 'Champ', 'Veronica', 'Ron'], 
    'location': ['San_Diego', 'New_York', 'New_York', 'San_Diego', 'San_Diego', 
                 'New_York']
})

le = LabelEncoder()

le.fit(df)

Walau bagaimanapun, pendekatan ini menghasilkan ralat berikut:

ValueError: bad input shape (6, 3)

Untuk menyelesaikan isu ini, penyelesaian adalah dengan menggunakan LabelEncoder pada setiap lajur dalam DataFrame menggunakan fungsi gunakan. Kaedah ini mengubah setiap lajur secara bebas, membolehkan pengekodan satu langkah yang cekap bagi berbilang lajur:

df.apply(LabelEncoder().fit_transform)

Sebagai alternatif, dalam scikit-learn 0.20 dan kemudian, pendekatan yang disyorkan ialah menggunakan OneHotEncoder:

OneHotEncoder().fit_transform(df)

OneHotEncoder kini menyokong input rentetan pengekodan terus.

Untuk lebih fleksibiliti, ColumnTransformer boleh digunakan untuk menggunakan pengekodan label pada lajur tertentu atau hanya pada jenis data tertentu dalam lajur.

Untuk transformasi songsang dan mengubah data masa hadapan, lalai didik boleh digunakan untuk mengekalkan pengekod label bagi setiap lajur. Dengan mengakses pengekod daripada kamus, anda boleh menyahkod atau mengekod data dengan contoh LabelEncoder asal.

Selain itu, perpustakaan seperti Neuraxle menyediakan langkah FlattenForEach, yang memudahkan penggunaan LabelEncoder yang sama kepada data yang diratakan.

Untuk kes di mana Pengekod Label yang berbeza diperlukan untuk lajur yang berbeza atau apabila hanya subset daripada lajur harus dikodkan, ColumnTransformer menawarkan kawalan terperinci ke atas proses pemilihan dan pengekodan.

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

Kenyataan:
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