در نوشته های پیشین درباره چندین کلاس از Scikit-Learn برای تبدیل ویژگی های رسته ای (Categorical Feature) به ویژگی های شماره ای گفته ایم. یکی دیگر از دسته داده ها می توانند به ریخت دیکشنری ها (یا دوتایی های ویژگی-مقدار) هستند. برای نمونه متغیر data در زیر لیستی از دیکشنری های ساده و فرضی است که داده هایی درباره هزینه های خرید خانه بر پایه دو ویژگی room (تعداد اتاق) و نام همسایه (neighborhood) است.

در این مجموعه داده ساده ویژگی neighborhood داده های رسته ای (رشته) است و نمی توان آن را سر راست درون الگوریتم های یادگیری ماشین همانند رگرسیون خطی به کار ببریم. بنابراین باید با شیوه درست و پسندیده، ویژگی neighborhood را به شماره هایی نگاشت دهیم تا آنها را درون الگوریتم های یادگیری ماشیت به کار ببریم.

کلاس DictVectorizer از Scikit-Learn

کلاس DictVectorizer از ماژول sklearn.feature_selection برای تبدیل لیستی از دوتایی های نام ویژگی و مقدار ویژگی مانند لیستی از دیشکنری ها به آرایه های NumPy یا ماتریس های اسپارس SciPy به کار گرفته می شود. در واقع این کلاس نیز پیاده سازی از کدگذاری One-Hot است. در دیکشنری بالا، ویژگی neighborhood دارای سه مقدار است و از این رو توقع داریم که پس از اعمال کدگذازی One-Hot، به هر یک از این سه ویزگی Queen Anne و Fremont و Wallingford یک شماره یکتا داده شود.

در کد زیر نخست یک نمونه از کلاس DictVectorizer به نام vectorizer ساخته ایم و همچنین پارامتر sparse از تابع سازنده کلاس برابر False است، زیرا می خواهیم برگشتی از آرایه  NumPy باشد. سپس به کمک متغیر vectorizer متد ()fit_transform با ورودی متغیر دیکشنری data فراخوانی می شود و برآیند (نتیحه) آن در متغیر transformed_features ریخته می شود. در پایان می بینید که این متغیر از آرایه NumPy است.

در آرایه transformed_features دو ستون پایانی، همان ویژگی های price و room هستند ولی خود ویژگی neighborhood به سه ستون (آغازین) نگاشت داده شده است. چرایی (دلیل) آن این است که، خود ویژگی neighborhood دارای سه مقدار یکتا بوده است. همچنین در هر یک از آرایه های درونی که برابر با یکی از دیشکنری های درون لیست data هستند، تنها یک شماره 1 در میان سه شماره مربوط به ویژگی neighborhood است.

در خود لیست data می بینید که دومین و چهارمین دیکشنری، مقدار کلید neighborhood آنها دارای مقدار Fremont است و از این رو در سطرهای سه تایی شماره های مربوط به ویژگی neighborhood در آرایه transformed_features، نخستین آیتم برای آرایه های درونی دوم و سوم برابر با شماره 1 است.