وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

استفاده از روش های فیلتر در پایتون برای انتخاب ویژگی

0 51
زمان لازم برای مطالعه: 12 دقیقه


معرفی

الگوریتم‌های یادگیری ماشین و یادگیری عمیق از داده‌ها یاد می‌گیرند که از انواع مختلفی از ویژگی‌ها تشکیل شده‌اند. زمان آموزش و عملکرد یک الگوریتم یادگیری ماشین به شدت بستگی دارد روی ویژگی های موجود در مجموعه داده در حالت ایده‌آل، ما فقط باید آن ویژگی‌هایی را در مجموعه داده‌ها حفظ کنیم که در واقع به مدل یادگیری ماشین ما کمک می‌کنند چیزی یاد بگیرد.

ویژگی های غیر ضروری و زائد نه تنها زمان آموزش یک الگوریتم را کاهش می دهد، بلکه بر عملکرد الگوریتم نیز تأثیر می گذارد. این process از انتخاب مناسب ترین ویژگی ها برای آموزش مدل یادگیری ماشین، «انتخاب ویژگی» نامیده می شود.

انجام انتخاب ویژگی قبل از آموزش مدل های یادگیری ماشین چندین مزیت دارد که برخی از آنها در زیر فهرست شده اند:

  • مدل‌هایی که تعداد ویژگی‌های کمتری دارند، قابلیت توضیح بیشتری دارند
  • پیاده سازی مدل های یادگیری ماشین با ویژگی های کاهش یافته آسان تر است
  • ویژگی های کمتر منجر به تعمیم پیشرفته می شود که به نوبه خود کاهش می یابد بیش از حد
  • انتخاب ویژگی، افزونگی داده ها را حذف می کند
  • زمان آموزش مدل های با ویژگی های کمتر به طور قابل توجهی کمتر است
  • مدل هایی که ویژگی های کمتری دارند کمتر در معرض خطا هستند

چندین روش برای انتخاب بهینه ترین ویژگی ها برای الگوریتم یادگیری ماشین توسعه داده شده است. یکی از این روش ها روش های فیلتر نامیده می شود. در این مقاله به بررسی برخی از روش های اصلی فیلتر برای انتخاب ویژگی می پردازیم.

روش های فیلتر برای انتخاب ویژگی

روش‌های فیلتر متعلق به دسته روش‌های انتخاب ویژگی هستند که ویژگی‌ها را مستقل از مدل الگوریتم یادگیری ماشین انتخاب می‌کنند. این یکی از بزرگترین مزایای روش های فیلتر است. ویژگی‌هایی که با استفاده از روش‌های فیلتر انتخاب می‌شوند، می‌توانند به عنوان ورودی برای هر مدل یادگیری ماشینی استفاده شوند. یکی دیگر از مزایای روش های فیلتر سرعت بسیار زیاد آنهاست. روش های فیلتر معمولاً اولین مرحله در خط لوله انتخاب ویژگی هستند.

روش های فیلتر را می توان به طور کلی به دو دسته تقسیم کرد: روش های فیلتر تک متغیره و روش های فیلتر چند متغیره.

روش های فیلتر تک متغیره نوعی روش هستند که در آن ویژگی های فردی بر اساس معیارهای خاص رتبه بندی می شوند. سپس N ویژگی های برتر انتخاب می شوند. برای مثال، انواع مختلفی از معیارهای رتبه بندی برای روش های فیلتر تک متغیره استفاده می شود امتیاز فیشر، اطلاعات متقابل و واریانس از ویژگی

یکی از معایب عمده روش های فیلتر تک متغیره این است که ممکن است ویژگی های اضافی را انتخاب کنند زیرا رابطه بین ویژگی های فردی در هنگام تصمیم گیری در نظر گرفته نمی شود. روش های فیلتر تک متغیره برای حذف ویژگی های ثابت و شبه ثابت از داده ها ایده آل هستند.

روش‌های فیلتر چند متغیره می‌توانند ویژگی‌های اضافی را از داده‌ها حذف کنند زیرا رابطه متقابل بین ویژگی‌ها را در نظر می‌گیرند. از روش های فیلتر چند متغیره می توان برای حذف ویژگی های تکراری و مرتبط از داده ها استفاده کرد.

در این مقاله خواهیم دید که چگونه می توانیم ویژگی های ثابت، شبه ثابت، تکراری و همبسته را با کمک پایتون از مجموعه داده های خود حذف کنیم.

حذف ویژگی های ثابت

ویژگی‌های ثابت آن دسته از ویژگی‌هایی هستند که فقط یک مقدار برای همه خروجی‌های مجموعه داده دارند. ویژگی های ثابت هیچ اطلاعاتی را ارائه نمی دهد که بتواند به طبقه بندی رکورد در دست کمک کند. بنابراین، توصیه می شود تمام ویژگی های ثابت را از مجموعه داده حذف کنید.

بیایید ببینیم چگونه می توانیم ویژگی های ثابت را از یک مجموعه داده حذف کنیم. مجموعه داده ای که می خواهیم برای این مثال استفاده کنیم عبارت است از رضایت مشتری سانتاندر مجموعه داده، که می تواند از Kaggle دانلود شود. ما از فایل استفاده خواهیم کرد train.csv. با این حال، من آن را تغییر نام دادم santander_data.csv برای اهداف خوانایی

وارد کردن کتابخانه ها و مجموعه داده های مورد نیاز

ویژگی های ثابت دارای مقادیری با واریانس صفر هستند زیرا همه مقادیر یکسان هستند. ما می توانیم ستون های ثابت را با استفاده از VarianceThreshold عملکرد پایتون Scikit-Learn کتابخانه. اسکریپت زیر را اجرا کنید import کتابخانه های مورد نیاز و مجموعه داده:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santander_data = pd.read_csv(r"E:\Datasets\santander_data.csv", nrows=40000)
santander_data.shape

من 40 هزار رکورد برتر را فیلتر کردم. در خروجی باید (40000, 371) را ببینید که به این معنی است که ما 40 هزار ردیف و 371 ستون در مجموعه داده خود داریم.

تقسیم داده ها به مجموعه های آموزشی و آزمایشی

در اینجا ذکر این نکته ضروری است که برای جلوگیری از تطبیق بیش از حد، انتخاب ویژگی فقط باید در مجموعه آموزشی اعمال شود. بیایید داده های خود را به مجموعه های آموزشی و آزمایشی تقسیم کنیم. اسکریپت زیر را اجرا کنید:

train_features, test_features, train_labels, test_labels=train_test_split(
    santander_data.drop(labels=('TARGET'), axis=1),
    santander_data('TARGET'),
    test_size=0.2,
    random_state=41)

حذف ویژگی های ثابت با استفاده از آستانه واریانس

اکنون زمان حذف ویژگی های ثابت است. برای این کار استفاده خواهیم کرد VarianceThreshold عملکردی که قبلا وارد کردیم. تابع برای خود یک مقدار نیاز دارد threshold پارامتر. پاس کردن مقدار صفر برای پارامتر، تمام ویژگی ها را با واریانس صفر فیلتر می کند. اسکریپت زیر را برای ایجاد یک فیلتر برای ویژگی های ثابت اجرا کنید.

constant_filter = VarianceThreshold(threshold=0)

در مرحله بعد، همانطور که در مثال زیر نشان داده شده است، باید به سادگی این فیلتر را در مجموعه آموزشی خود اعمال کنیم:

constant_filter.fit(train_features)

اکنون برای دریافت تمام ویژگی هایی که ثابت نیستند، می توانیم از آن استفاده کنیم get_support() روش فیلتری که ایجاد کردیم. اسکریپت زیر را اجرا کنید تا تعداد ویژگی های غیر ثابت را ببینید.

len(train_features.columns(constant_filter.get_support()))

در خروجی باید 320 را ببینید، یعنی از 370 ویژگی مجموعه آموزشی 320 ویژگی ثابت نیستند.

به طور مشابه، می توانید تعداد ویژگی های ثابت را با کمک اسکریپت زیر پیدا کنید:

constant_columns = (column for column in train_features.columns
                    if column not in train_features.columns(constant_filter.get_support()))

print(len(constant_columns))

برای مشاهده تمام ستون های ثابت، اسکریپت زیر را اجرا کنید:

for column in constant_columns:
    print(column)

خروجی به شکل زیر است:

ind_var2_0
ind_var2
ind_var18_0
ind_var18
ind_var27_0
ind_var28_0
ind_var28
ind_var27
ind_var34_0
ind_var34
ind_var41
ind_var46_0
ind_var46
num_var18_0
num_var18
num_var27_0
num_var28_0
num_var28
num_var27
num_var34_0
num_var34
num_var41
num_var46_0
num_var46
saldo_var18
saldo_var28
saldo_var27
saldo_var34
saldo_var41
saldo_var46
delta_imp_amort_var18_1y3
delta_imp_amort_var34_1y3
imp_amort_var18_hace3
imp_amort_var18_ult1
imp_amort_var34_hace3
imp_amort_var34_ult1
imp_reemb_var13_hace3
imp_reemb_var17_hace3
imp_reemb_var33_hace3
imp_trasp_var17_out_hace3
imp_trasp_var33_out_hace3
num_var2_0_ult1
num_var2_ult1
num_reemb_var13_hace3
num_reemb_var17_hace3
num_reemb_var33_hace3
num_trasp_var17_out_hace3
num_trasp_var33_out_hace3
saldo_var2_ult1
saldo_medio_var13_medio_hace3

در نهایت، برای حذف ویژگی های ثابت از مجموعه های آموزشی و تست، می توانیم از transform() روش از constant_filter. برای این کار اسکریپت زیر را اجرا کنید:

train_features = constant_filter.transform(train_features)
test_features = constant_filter.transform(test_features)

train_features.shape, test_features.shape

اگر اسکریپت بالا را اجرا کنید، خواهید دید که هم مجموعه های آموزشی و هم مجموعه های تست ما اکنون شامل 320 ستون هستند، زیرا 50 ستون ثابت حذف شده اند.

حذف ویژگی های شبه ثابت

ویژگی های شبه ثابت همانطور که از نامش پیداست ویژگی هایی هستند که تقریبا ثابت هستند. به عبارت دیگر، این ویژگی ها برای زیرمجموعه بسیار بزرگی از خروجی ها مقادیر یکسانی دارند. چنین ویژگی هایی برای پیش بینی چندان مفید نیستند. هیچ قانونی در مورد اینکه آستانه واریانس ویژگی های شبه ثابت چقدر باید باشد وجود ندارد. با این حال، به عنوان یک قانون سرانگشتی، آن ویژگی‌های شبه ثابتی را که بیش از 99 درصد مقادیر مشابه برای مشاهدات خروجی دارند، حذف کنید.

در این قسمت به کمک : یک فیلتر شبه ثابت ایجاد می کنیم VarianceThreshold تابع. با این حال، به جای عبور از 0 به عنوان مقدار برای threshold پارامتر، 0.01 را پاس می کنیم، به این معنی که اگر واریانس مقادیر در یک ستون کمتر از 0.01 باشد، آن ستون را حذف کنید. به عبارت دیگر، ستون ویژگی را حذف کنید که تقریباً 99٪ از مقادیر مشابه هستند.

مراحل کاملا مشابه قسمت قبل است. ما خواهیم کرد import مجموعه داده ها و کتابخانه ها، یک تقسیم آزمون قطار را انجام می دهند و ابتدا ویژگی های ثابت را حذف می کنند.

وارد کردن کتابخانه ها و مجموعه داده های مورد نیاز

اسکریپت زیر را اجرا کنید import مجموعه داده و کتابخانه های مورد نظر:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santander_data = pd.read_csv(r"E:\Datasets\santander_data.csv", nrows=40000)
santander_data.shape

تقسیم داده ها به مجموعه های آموزشی و آزمایشی

train_features, test_features, train_labels, test_labels = train_test_split(
    santander_data.drop(labels=('TARGET'), axis=1),
    santander_data('TARGET'),
    test_size=0.2,
    random_state=41)

حذف ویژگی های ثابت با استفاده از آستانه واریانس

قبل از اینکه بتوانیم ویژگی های شبه ثابت را حذف کنیم، ابتدا باید ویژگی های ثابت را حذف کنیم. برای این کار اسکریپت زیر را اجرا کنید:

constant_filter = VarianceThreshold(threshold=0)
constant_filter.fit(train_features)

len(train_features.columns(constant_filter.get_support()))

constant_columns = (column for column in train_features.columns
                    if column not in train_features.columns(constant_filter.get_support()))

train_features.drop(labels=constant_columns, axis=1, inplace=True)
test_features.drop(labels=constant_columns, axis=1, inplace=True)

حذف ویژگی های شبه ثابت با استفاده از آستانه واریانس

بیایید فیلتر شبه ثابت خود را ایجاد کنیم. برای این کار اسکریپت زیر را اجرا کنید:

qconstant_filter = VarianceThreshold(threshold=0.01)

بقیه مراحل به همین صورت است. ما باید فیلتر را با استفاده از مجموعه آموزشی خود اعمال کنیم fit() روشی که در زیر نشان داده شده است.

qconstant_filter.fit(train_features)

بیایید تعداد ستون های غیر شبه ثابت خود را بررسی کنیم. اسکریپت زیر را اجرا کنید:

len(train_features.columns(qconstant_filter.get_support()))

در خروجی باید عدد 265 را ببینید که به این معنی است که از 320 ستونی که پس از حذف ویژگی های ثابت به دست آوردیم، 55 ستون شبه ثابت هستند.

برای تأیید تعداد ستون های شبه ثابت، اسکریپت زیر را اجرا کنید:

qconstant_columns = (column for column in train_features.columns
                    if column not in train_features.columns(qconstant_filter.get_support()))

print(len(qconstant_columns))

شما باید 55 را در خروجی ببینید.

حالا بیایید print نام تمام ستون های شبه ثابت اسکریپت زیر را اجرا کنید:

for column in qconstant_columns:
    print(column)

در خروجی باید نام ستون های زیر را ببینید:

ind_var1
ind_var6_0
ind_var6
ind_var13_largo
ind_var13_medio_0
ind_var13_medio
ind_var14
ind_var17_0
ind_var17
ind_var19
ind_var20_0
ind_var20
ind_var29_0
ind_var29
ind_var30_0
ind_var31_0
ind_var31
ind_var32_cte
ind_var32_0
ind_var32
ind_var33_0
ind_var33
ind_var40
ind_var39
ind_var44_0
ind_var44
num_var6_0
num_var6
num_var13_medio_0
num_var13_medio
num_op_var40_hace3
num_var29_0
num_var29
delta_imp_aport_var33_1y3
delta_num_aport_var33_1y3
ind_var7_emit_ult1
ind_var7_recib_ult1
num_aport_var33_hace3
num_aport_var33_ult1
num_var7_emit_ult1
num_meses_var13_medio_ult3
num_meses_var17_ult3
num_meses_var29_ult3
num_meses_var33_ult3
num_meses_var44_ult3
num_reemb_var13_ult1
num_reemb_var17_ult1
num_reemb_var33_ult1
num_trasp_var17_in_hace3
num_trasp_var17_in_ult1
num_trasp_var17_out_ult1
num_trasp_var33_in_hace3
num_trasp_var33_in_ult1
num_trasp_var33_out_ult1
num_venta_var44_hace3

در نهایت، برای اینکه ببینیم آیا مجموعه های آموزشی و تست ما فقط شامل ستون های غیر ثابت و غیر ثابت هستند، می توانیم از transform() روش از qconstant_filter. برای این کار اسکریپت زیر را اجرا کنید:

train_features = qconstant_filter.transform(train_features)
test_features = qconstant_filter.transform(test_features)

train_features.shape, test_features.shape

اگر اسکریپت بالا را اجرا کنید، خواهید دید که هم مجموعه آموزشی و هم مجموعه تست ما اکنون شامل 265 ستون خواهد بود، زیرا 50 ستون ثابت و 55 ستون شبه ثابت از مجموع 370 ستون پیش فرض حذف شده اند.

حذف ویژگی های تکراری

ویژگی های تکراری ویژگی هایی هستند که مقادیر مشابهی دارند. ویژگی‌های تکراری هیچ ارزشی به آموزش الگوریتم نمی‌افزایند، بلکه باعث افزایش سربار و تاخیر غیر ضروری به زمان آموزش می‌شوند. بنابراین، همیشه توصیه می شود قبل از آموزش، ویژگی های تکراری را از مجموعه داده حذف کنید.

وارد کردن کتابخانه ها و مجموعه داده های مورد نیاز

اسکریپت زیر را اجرا کنید import مجموعه داده و کتابخانه های مورد نظر:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

santander_data = pd.read_csv(r"E:\Datasets\santander_data.csv", nrows=20000)
santander_data.shape

حذف ستون‌های تکراری می‌تواند از نظر محاسباتی پرهزینه باشد زیرا قبل از اینکه بتوانیم ویژگی‌های تکراری را حذف کنیم، باید ماتریس داده را جابه‌جا کنیم. بنابراین در اسکریپت فوق ما فقط import 20 هزار رکورد اول از داده های رضایت مشتری سانتاندر که در این مقاله استفاده کرده ایم.

تقسیم داده ها به مجموعه های آموزشی و آزمایشی

train_features, test_features, train_labels, test_labels = train_test_split(
    santander_data.drop(labels=('TARGET'), axis=1),
    santander_data('TARGET'),
    test_size=0.2,
    random_state=41)

حذف ویژگی های تکراری با استفاده از Transpose

برخلاف ویژگی‌های ثابت و شبه ثابت، ما هیچ روش پایتون داخلی نداریم که بتواند ویژگی‌های تکراری را حذف کند. با این حال، ما روشی داریم که می‌تواند به ما در شناسایی ردیف‌های تکراری در یک دیتافریم پاندا کمک کند. ما از این روش استفاده می کنیم تا ابتدا مجموعه داده های خود را مطابق شکل زیر جابجا کنیم:

train_features_T = train_features.T
train_features_T.shape

در اسکریپت بالا ما انتقال داده های آموزشی خود را می گیریم و در آن ذخیره می کنیم train_features_T چارچوب داده مجموعه آموزشی اولیه ما شامل 16000 ردیف و 370 ستون است، اگر به شکل مجموعه آموزشی جابجا شده نگاهی بیندازید، خواهید دید که شامل 370 سطر و 16000 ستون است.

خوشبختانه، در پانداها ما آن را داریم duplicated() روشی که می تواند به ما در یافتن ردیف های تکراری از دیتافریم کمک کند. به یاد داشته باشید، ردیف های قاب داده منتقل شده در واقع ستون ها یا ویژگی های قاب داده واقعی هستند.

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

print(train_features_T.duplicated().sum())

در خروجی باید 94 را ببینید.

در نهایت، می‌توانیم ردیف‌های تکراری را با استفاده از drop_duplicates() روش. اگر مقدار رشته را پاس کنید first به keep پارامتر از drop_duplicates() روش، تمام ردیف های تکراری به جز اولین کپی حذف خواهند شد. در مرحله بعد، تمام ردیف‌های تکراری را حذف می‌کنیم و مجموعه آموزشی انتقال‌یافته را برای دریافت مجموعه آموزشی اصلی که حاوی هیچ ستون تکراری نیست، می‌گیریم. اسکریپت زیر را اجرا کنید:

unique_features = train_features_T.drop_duplicates(keep='first').T

حالا وقته print شکل مجموعه آموزشی جدید ما بدون ویژگی های تکراری:

unique_features.shape

در خروجی باید (16000276) را مشاهده کنید، می بینید که پس از حذف 94 ستون تکراری، اندازه مجموعه ویژگی های ما به میزان قابل توجهی کاهش یافته است.

برای دیدن نام ستون های تکراری، این اسکریپت را اجرا کنید:

duplicated_features = (dup_col for dup_col in train_features.columns if dup_col not in unique_features.columns)
duplicated_features

در خروجی باید ستون های زیر را مشاهده کنید:

('ind_var2',
 'ind_var13_medio',
 'ind_var18_0',
 'ind_var18',
 'ind_var26',
 'ind_var25',
 'ind_var27_0',
 'ind_var28_0',
 'ind_var28',
 'ind_var27',
 'ind_var29_0',
 'ind_var29',
 'ind_var32',
 'ind_var34_0',
 'ind_var34',
 'ind_var37',
 'ind_var40_0',
 'ind_var40',
 'ind_var41',
 'ind_var39',
 'ind_var46_0',
 'ind_var46',
 'num_var13_medio',
 'num_var18_0',
 'num_var18',
 'num_var26',
 'num_var25',
 'num_op_var40_hace3',
 'num_op_var39_hace3',
 'num_var27_0',
 'num_var28_0',
 'num_var28',
 'num_var27',
 'num_var29_0',
 'num_var29',
 'num_var32',
 'num_var34_0',
 'num_var34',
 'num_var37',
 'num_var40_0',
 'num_var40',
 'num_var41',
 'num_var39',
 'num_var46_0',
 'num_var46',
 'saldo_var18',
 'saldo_var28',
 'saldo_var27',
 'saldo_var29',
 'saldo_var34',
 'saldo_var40',
 'saldo_var41',
 'saldo_var46',
 'delta_imp_amort_var18_1y3',
 'delta_imp_amort_var34_1y3',
 'delta_imp_reemb_var33_1y3',
 'delta_imp_trasp_var17_out_1y3',
 'delta_imp_trasp_var33_out_1y3',
 'delta_num_reemb_var13_1y3',
 'delta_num_reemb_var17_1y3',
 'delta_num_reemb_var33_1y3',
 'delta_num_trasp_var17_in_1y3',
 'delta_num_trasp_var17_out_1y3',
 'delta_num_trasp_var33_in_1y3',
 'delta_num_trasp_var33_out_1y3',
 'imp_amort_var18_hace3',
 'imp_amort_var18_ult1',
 'imp_amort_var34_hace3',
 'imp_amort_var34_ult1',
 'imp_var7_emit_ult1',
 'imp_reemb_var13_hace3',
 'imp_reemb_var17_hace3',
 'imp_reemb_var33_hace3',
 'imp_reemb_var33_ult1',
 'imp_trasp_var17_out_hace3',
 'imp_trasp_var17_out_ult1',
 'imp_trasp_var33_in_hace3',
 'imp_trasp_var33_out_hace3',
 'ind_var7_emit_ult1',
 'num_var2_0_ult1',
 'num_var2_ult1',
 'num_var7_emit_ult1',
 'num_reemb_var13_hace3',
 'num_reemb_var17_hace3',
 'num_reemb_var33_hace3',
 'num_reemb_var33_ult1',
 'num_trasp_var17_out_hace3',
 'num_trasp_var17_out_ult1',
 'num_trasp_var33_in_hace3',
 'num_trasp_var33_out_hace3',
 'saldo_var2_ult1',
 'saldo_medio_var13_medio_hace3',
 'saldo_medio_var13_medio_ult1',
 'saldo_medio_var29_hace3')

حذف ویژگی های مرتبط

علاوه بر ویژگی‌های تکراری، یک مجموعه داده می‌تواند شامل ویژگی‌های همبسته نیز باشد. دو یا بیشتر از دو ویژگی در صورتی که به هم نزدیک باشند در ارتباط هستند فضای خطی.

به عنوان مثال مجموعه ویژگی های یک سبد میوه را در نظر بگیرید، وزن سبد میوه به طور معمول با قیمت مرتبط است. هر چه وزن بیشتر باشد قیمت آن نیز بیشتر می شود.

همبستگی بین مشاهدات خروجی و ویژگی های ورودی بسیار مهم است و چنین ویژگی هایی باید حفظ شوند. با این حال، اگر دو یا بیش از دو ویژگی متقابل همبستگی داشته باشند، اطلاعات اضافی را به مدل منتقل می‌کنند و از این رو تنها یکی از ویژگی‌های مرتبط باید حفظ شود تا تعداد ویژگی‌ها کاهش یابد.

مجموعه داده ای که قرار است برای این بخش استفاده شود عبارت است از BNP Paribas Cardif Claims Management مجموعه داده، که می تواند از Kaggle دانلود شود. برای پیدا کردن و حذف ویژگی های مرتبط از مجموعه داده، این مراحل را دنبال کنید.

وارد کردن کتابخانه ها و مجموعه داده های مورد نیاز

اسکریپت زیر را اجرا کنید import مجموعه داده و کتابخانه های مورد نظر:

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.feature_selection import VarianceThreshold

paribas_data = pd.read_csv(r"E:\Datasets\paribas_data.csv", nrows=20000)
paribas_data.shape

در اسکریپت بالا، مجموعه داده را به همراه کتابخانه های مورد نیاز وارد کردم. بعد، شکل دیتافریم خود را چاپ کردیم. در خروجی باید (20000, 133) را ببینید که به این معنی است که مجموعه داده ما شامل 20 هزار ردیف و 133 ویژگی است.

برای یافتن همبستگی، ما فقط به ویژگی های عددی در مجموعه داده خود نیاز داریم. برای فیلتر کردن همه ویژگی ها، به جز ویژگی های عددی، باید داده های خود را از قبل پردازش کنیم.

پیش پردازش داده ها

اسکریپت زیر را برای حذف ویژگی های غیر عددی از مجموعه داده اجرا کنید.

num_colums = ('int16', 'int32', 'int64', 'float16', 'float32', 'float64')
numerical_columns = list(paribas_data.select_dtypes(include=num_colums).columns)
paribas_data = paribas_data(numerical_columns)

در خط اول اسکریپت بالا، لیستی را تعریف می کنیم که شامل انواع داده های ستون هایی است که می خواهیم در مجموعه داده خود نگه داریم. بعد، ما را صدا می زنیم select_dtypes() روش روی مجموعه داده ما و ارسال آن num_colums لیستی که شامل نوع ستون هایی است که می خواهیم حفظ کنیم. این select_dtypes() متد نام ستون های عددی مشخص شده را که در لیست ذخیره می کنیم، برمی گرداند numeric_columns. سپس، ستون های خود را از قسمت فیلتر می کنیم paribas_data چارچوب داده با کمک numerical_colums فهرست اجازه دهید print شکل از paribas_data dataframe برای اینکه ببینید چند ستون عددی داریم، اسکریپت زیر را اجرا کنید:

paribas_data.shape

در خروجی باید (20000, 114) را ببینید که به این معنی است که اکنون مجموعه داده ما شامل 20 هزار رکورد و 114 ویژگی است. به یاد داشته باشید، قبلا 133 ویژگی داشتیم.

تقسیم داده ها به مجموعه های آموزشی و آزمایشی

طبق معمول، قبل از حذف هر گونه ویژگی مرتبط، باید داده های خود را به مجموعه آموزشی و آزمایشی تقسیم کنیم، اسکریپت زیر را اجرا کنیم تا داده ها را به مجموعه های آموزشی و آزمایشی تقسیم کنیم:

train_features, test_features, train_labels, test_labels = train_test_split(
    paribas_data.drop(labels=('target', 'ID'), axis=1),
    paribas_data('target'),
    test_size=0.2,
    random_state=41)

در اسکریپت بالا، داده های خود را به 80% آموزش و 20% مجموعه تست تقسیم می کنیم.

حذف ویژگی های مرتبط با استفاده از روش ()corr

برای حذف ویژگی های مرتبط، می توانیم از آن استفاده کنیم corr() روش چارچوب داده پانداها این corr() متد یک ماتریس همبستگی حاوی همبستگی بین تمام ستون‌های چارچوب داده را برمی‌گرداند. سپس می‌توانیم از طریق ماتریس همبستگی حلقه بزنیم و ببینیم که آیا همبستگی بین دو ستون از همبستگی آستانه بیشتر است، آن ستون را به مجموعه ستون‌های همبسته اضافه کنیم. ما می توانیم مجموعه ای از ستون ها را از مجموعه داده واقعی حذف کنیم.

بیایید ابتدا یک ماتریس همبستگی برای ستون‌های مجموعه داده و یک مجموعه خالی ایجاد کنیم که شامل تمام ویژگی‌های مرتبط باشد. برای این کار اسکریپت زیر را اجرا کنید:

correlated_features = set()
correlation_matrix = paribas_data.corr()

در اسکریپت بالا یک ماتریس همبستگی ایجاد می کنیم correlation_matrix برای تمام ستون های مجموعه داده ما. مجموعه ای هم درست کردیم correlated_features که حاوی نام تمام ویژگی های مرتبط خواهد بود.

در مرحله بعد، تمام ستون‌های موجود در قسمت را حلقه می‌زنیم correlation_matrix و ستون هایی با مقدار همبستگی 0.8 را به ستون اضافه می کند correlated_features مطابق شکل زیر تنظیم کنید. شما می توانید هر مقدار آستانه ای را برای همبستگی تعیین کنید.

for i in range(len(correlation_matrix .columns)):
    for j in range(i):
        if abs(correlation_matrix.iloc(i, j)) > 0.8:
            colname = correlation_matrix.columns(i)
            correlated_features.add(colname)

بیایید تعداد کل ستون‌های مجموعه داده خود را با مقدار همبستگی بیشتر از 0.8 با حداقل 1 ستون دیگر ببینیم. اسکریپت زیر را اجرا کنید:

len(correlated_features)

شما باید 55 را در خروجی ببینید، که تقریباً 40٪ از ویژگی های اصلی در مجموعه داده است. می توانید ببینید که مجموعه داده ما چه مقدار اطلاعات اضافی دارد. برای مشاهده نام این ویژگی ها اسکریپت زیر را اجرا کنید:

print(correlated_features)

خروجی به شکل زیر است:

{'v55', 'v105', 'v130', 'v12', 'v60', 'v67', 'v63', 'v46', 'v53', 'v43', 'v68', 'v123', 'v95', 'v103', 'v44', 'v108', 'v89', 'v104', 'v109', 'v83', 'v115', 'v21', 'v101', 'v93', 'v40', 'v78', 'v54', 'v118', 'v124', 'v73', 'v96', 'v121', 'v77', 'v114', 'v48', 'v116', 'v87', 'v86', 'v65', 'v122', 'v64', 'v81', 'v128', 'v49', 'v37', 'v84', 'v98', 'v111', 'v41', 'v25', 'v106', 'v32', 'v126', 'v76', 'v100'}

نام ویژگی ها توسط بانک پنهان شده است زیرا حاوی اطلاعات حساس هستند، با این حال، می توانید نام کد ویژگی ها را مشاهده کنید. این ستون های مرتبط اطلاعات مشابهی را به الگوریتم یادگیری منتقل می کنند و بنابراین باید حذف شوند.

اسکریپت زیر این ستون ها را از مجموعه داده حذف می کند:

train_features.drop(labels=correlated_features, axis=1, inplace=True)
test_features.drop(labels=correlated_features, axis=1, inplace=True)

نتیجه

انتخاب ویژگی نقشی حیاتی در عملکرد و آموزش هر مدل یادگیری ماشینی ایفا می کند. انواع مختلفی از روش ها برای انتخاب ویژگی برای الگوریتم های یادگیری ماشین پیشنهاد شده است. در این مقاله به بررسی انواع روش های فیلتر برای انتخاب ویژگی با استفاده از پایتون پرداختیم.

ما بحث خود را با حذف ویژگی های ثابت و شبه ثابت و سپس حذف ویژگی های تکراری شروع کردیم. در نهایت، روش حذف ویژگی های همبسته از مجموعه داده خود را مطالعه کردیم.

در مقاله بعدی نگاهی به انواع دیگر روش های انتخاب ویژگی خواهیم داشت. تا آن زمان، کد نویسی مبارک!

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-26 13:07:03

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید