সাইকিট শিখার সাথে বৈশিষ্ট্য নির্বাচনের পরে ফিল্টারযুক্ত বৈশিষ্ট্যগুলি চিহ্নিত করা


10

পাইথনে বৈশিষ্ট্য নির্বাচনের পদ্ধতির জন্য আমার কোডটি এখানে :

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
iris = load_iris()
X, y = iris.data, iris.target
X.shape
(150, 4)
X_new = LinearSVC(C=0.01, penalty="l1", dual=False).fit_transform(X, y)
X_new.shape
(150, 3)

তবে নতুন এক্স (নির্ভরশীল ভেরিয়েবল - এক্স_নিউ) পাওয়ার পরে, আমি কীভাবে জানব যে এই নতুন আপডেট হওয়া ভেরিয়েবলের মধ্যে কোন ভেরিয়েবলগুলি সরানো হয়েছে এবং কোন ভেরিয়েবলগুলি বিবেচনা করা হয়? (কোনটি সরানো হয়েছে বা কোন তিনটি ডেটাতে উপস্থিত রয়েছে))

এই সনাক্তকরণ পাওয়ার কারণটি হ'ল নতুন পরীক্ষার ডেটাতে একই ফিল্টারিং প্রয়োগ করা।

উত্তর:


6

দুটি জিনিস যা আপনি করতে পারেন:

  • পরম চেক করুন coef_এবং সনাক্ত করুন যে কোন কলামটি উপেক্ষা করা হয়েছিল
  • পদ্ধতিটি ব্যবহার করে ইনপুট ডেটা ট্রান্সফরমেশনের জন্য একই মডেলটি ব্যবহার করুন transform

আপনার উদাহরণের জন্য ছোট পরিবর্তন ifications

>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.cross_validation import train_test_split
>>>
>>> iris = load_iris()
>>> x_train, x_test, y_train, y_test = train_test_split(
...     iris.data, iris.target, train_size=0.7
... )
>>>
>>> svc = LinearSVC(C=0.01, penalty="l1", dual=False)
>>>
>>> X_train_new = svc.fit_transform(x_train, y_train)
>>> print(X_train_new.shape)
(105, 3)
>>>
>>> X_test_new = svc.transform(x_test)
>>> print(X_test_new.shape)
(45, 3)
>>>
>>> print(svc.coef_)
[[ 0.          0.10895557 -0.20603044  0.        ]
 [-0.00514987 -0.05676593  0.          0.        ]
 [ 0.         -0.09839843  0.02111212  0.        ]]

আপনি যেমন পদ্ধতিটি দেখেন transformআপনার জন্য সমস্ত কাজ করে। এবং coef_ম্যাট্রিক্স থেকে আপনি শেষ কলামটি কেবল একটি শূন্য ভেক্টর দেখতে পারেন, তাই আপনি মডেলটি থেকে ডেটা থেকে শেষ কলামটিকে উপেক্ষা করবেন


হাই, আমি কীভাবে এক্স_ট্রেইন_নামের কলামের নামগুলি সনাক্ত করতে পারি। কোন কাজ আছে?
বিগনেশ প্রজাপতি

1
তারা ইনপুট ডেটা সেটের মতো একই ক্রমে থাকে। iris.feature_names
itdxer

হ্যাঁ. তার। আমি এখানে বিভ্রান্ত এটি একই ক্রম হয়। তবে আমি কীভাবে তাদের নাম করব কেননা কিছু কলাম উপেক্ষা করা হয়েছে। সুতরাং, আমি এই নির্দিষ্ট কলামগুলি অর্জন করতে পারছি না যা এই প্রক্রিয়াটির সময় নির্বাচিত হয়েছিল। আপনি কি আমাকে এই সাহায্য করতে পারেন!
বিঘ্নেশ প্রজাপতি

আপনি পদ্ধতি পরীক্ষা করেছেন কি feature_namesমধ্যে irisপরিবর্তনশীল? এটা আমার জন্য ভালই কাজ করে।
itdxer

12

বিকল্পভাবে, আপনি যদি নিজের এসভিসি লাগানোর পরে বৈশিষ্ট্য নির্বাচনের জন্য সিলেক্ট্রোমমোডেল ব্যবহার করেন, আপনি উদাহরণ পদ্ধতিটি ব্যবহার করতে পারেন get_support। এটি প্রতিটি বৈশিষ্ট্যের নির্বাচনের ম্যাপিংয়ে বুলিয়ান অ্যারে প্রদান করে। এরপরে এটির সাথে একটি মূল বৈশিষ্ট্যের নামের অ্যারে যুক্ত করুন এবং তারপরে প্রাসঙ্গিক নির্বাচিত বৈশিষ্ট্যগুলির নামের সেট তৈরি করতে বুলিয়ান স্ট্যাটাসগুলিতে ফিল্টার করুন।

আশা করি এটি ভবিষ্যতের পাঠকগুলিকে সহায়তা করবে যা বৈশিষ্ট্য নির্বাচনের পরে প্রাসঙ্গিক বৈশিষ্ট্যের নাম পাওয়ার সর্বোত্তম উপায় খুঁজতেও সংগ্রাম করেছিলেন।

উদাহরণ:

lsvc = LinearSVC(C=0.01, penalty="l1", dual=False,max_iter=2000).fit(X, y) 
model = sk.SelectFromModel(lsvc, prefit=True) 
X_new = model.transform(X) 
print(X_new.shape) 
print(model.get_support()) 

5
এটি গ্রহণ করা উচিত
ব্যবহারকারী 0

5

@ চিনিনিচিনচিন সমাধানের ভিত্তিতে, আমি সাধারণত:

lsvc = LinearSVC(C=0.01, penalty="l1", dual=False,max_iter=2000).fit(X, y) 
model = sk.SelectFromModel(lsvc, prefit=True) 
X_new = model.transform(X) 
print(X.columns[model.get_support()]) 

যা এমন কিছু দেয়:

Index([u'feature1', u'feature2', u'feature',
  u'feature4'],
  dtype='object')
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.