সিদ্ধান্ত গাছ / এলোমেলো বন হিসাবে বৈশিষ্ট্য হিসাবে স্ট্রিং


63

আমি সিদ্ধান্ত গাছ / এলোমেলো বন প্রয়োগের ক্ষেত্রে কিছু সমস্যা করছি। আমি এমন একটি সমস্যার সাথে ফিট করার চেষ্টা করছি যা বৈশিষ্ট্যগুলির মতো সংখ্যাগুলির পাশাপাশি স্ট্রিংগুলি (যেমন দেশের নাম) রয়েছে। এখন লাইব্রেরি, সাইকিট-লার্ন কেবল পরামিতি হিসাবে সংখ্যা নিয়েছে, তবে আমি স্ট্রিংগুলি ইনজেক্ট করতে চাই এবং পাশাপাশি তারা উল্লেখযোগ্য পরিমাণে জ্ঞান বহন করে।

আমি কীভাবে এমন দৃশ্য পরিচালনা করব?

আমি পাইথনের হ্যাশিংয়ের মতো কোনও প্রক্রিয়া দ্বারা স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করতে পারি। তবে আমি সিদ্ধান্ত গাছের সমস্যার ক্ষেত্রে স্ট্রিংগুলি কীভাবে পরিচালনা করা হয় তার সেরা অনুশীলনটি জানতে চাই।


স্কিটিলেয়ার্নের ক্ষেত্রে আমি দেখেছি যে আমাদের বিভাগীয় চলকগুলি এনকোড করা দরকার, অন্যথায় ফিট পদ্ধতিতে ভ্যালুআরার বলে একটি ত্রুটি ছুঁড়ে ফেলা হবে: স্ট্রিংটিকে ফ্লোটে রূপান্তর করতে পারেনি
কর

উত্তর:


55

বেশিরভাগ সু-প্রতিষ্ঠিত মেশিন লার্নিং সিস্টেমগুলিতে শ্রেণিবদ্ধ ভেরিয়েবলগুলি প্রাকৃতিকভাবে পরিচালিত হয়। উদাহরণস্বরূপ আরে আপনি ফ্যাক্টরগুলি ব্যবহার করবেন, ডব্লিউইএইএ আপনি নামমাত্র ভেরিয়েবল ব্যবহার করবেন। সাইকিট-লার্নের ক্ষেত্রে এটি হয় না। বিজ্ঞানী-শিখায় প্রয়োগ করা সিদ্ধান্তের গাছগুলি কেবলমাত্র সংখ্যাসূচক বৈশিষ্ট্য ব্যবহার করে এবং এই বৈশিষ্ট্যগুলি সর্বদা অবিচ্ছিন্ন সংখ্যা পরিবর্তনশীল হিসাবে ব্যাখ্যা করা হয়

সুতরাং, কেবল একটি হ্যাশ কোডের সাথে স্ট্রিংগুলি প্রতিস্থাপন করা এড়ানো উচিত, কারণ একটি অবিচ্ছিন্ন সংখ্যা বৈশিষ্ট্য হিসাবে বিবেচনা করা আপনি যে কোনও কোডিং ব্যবহার করবেন তা এমন একটি অর্ডার প্রেরণা দেবে যা কেবল আপনার ডেটাতে বিদ্যমান নয়।

একটি উদাহরণ হ'ল ['লাল', 'সবুজ', 'নীল'] সাথে [1,2,3] কোড দেওয়া, 'লাল' এর মতো অদ্ভুত জিনিস তৈরি করতে পারে 'নীল' এর চেয়ে কম, এবং যদি আপনার গড় গড় হয় 'লাল' এবং একটি 'নীল' আপনি একটি 'সবুজ' পাবেন। আর একটি সূক্ষ্ম উদাহরণ হতে পারে যখন আপনি [1,2,3] দিয়ে ['কম', 'মাঝারি', 'উচ্চ'] কোড করেন। পরবর্তী ক্ষেত্রে এটি অর্ডার হওয়ার ফলে ঘটতে পারে যা বোঝা যায়, তবে কিছু 'সূক্ষ্ম' অসঙ্গতি ঘটতে পারে যখন 'মাঝারি' যখন 'নিম্ন' এবং 'উচ্চ' এর মাঝখানে না থাকে।

অবশেষে, আপনার প্রশ্নের উত্তর একাধিক বাইনারি বৈশিষ্ট্যগুলিতে শ্রেণীবদ্ধ বৈশিষ্ট্য কোডিংয়ের মধ্যে রয়েছে । উদাহরণস্বরূপ, আপনি ['লাল', 'সবুজ', 'নীল'] 3 টি কলাম সহ, প্রতিটি বিভাগের জন্য একটি করে বিভাগের সাথে মিল রেখে 1 এবং অন্যথায় 0 রেখে কোড করতে পারেন। একে ওয়ান হট-এনকোডিং , বাইনারি এনকোডিং, ওয়ান-অফ-কে-এনকোডিং বা যে কোনও কিছু বলা হয়। শ্রেণিবদ্ধ বৈশিষ্ট্য এবং বৈশিষ্ট্য নিষ্কাশন - হ্যাশিং এবং ডিক্টস এনকোডিংয়ের জন্য আপনি এখানে ডকুমেন্টেশন চেক করতে পারেন । অবশ্যই এক-হট-এনকোডিং আপনার স্থানের প্রয়োজনীয়তা প্রসারিত করবে এবং কখনও কখনও এটি কার্যকারিতাটিকেও ব্যথিত করে।


2
এটি বিজ্ঞানের বাস্তবায়ন যা এটি শ্রেণিবদ্ধ ভেরিয়েবলগুলি সঠিকভাবে পরিচালনা করে না। এই উত্তরটি কীভাবে প্রস্তাব দেয় তার মতো পুনর্বিবেচনা সম্ভবত আপনি সবচেয়ে ভাল করতে পারেন। আরও গুরুতর ব্যবহারকারী বিকল্প প্যাকেজ জন্য সন্ধান করতে পারে।
স্মলচেস

3
শ্রেণীবদ্ধ ভেরিয়েবলের এক-হট-এনকোডিংয়ের জন্য কেউ স্কাইলার.প্রিপ্রসেসিং L লেবেলবাইনারাইজার ব্যবহার করতে পারেন।
গুসুকু

@rapaio আমি মনে করি বাইনারি কোডিং একই হট এনকোডিং নয়। বাইনারি কোডিং হ'ল আপনি যখন 3 টি কলাম সহ 8 টি বিভাগ বা 4 টি কলাম সহ 9 থেকে 16 বিভাগের প্রতিনিধিত্ব করেন। আমি কি ভূল?
অলোক নায়ক

patsy পাইথন প্যাকেজটি শ্রেণীবদ্ধ ভেরিয়েবলগুলির এক-হট এনকোডিংয়ের সাথে কাজ করবে। patsy.readthedocs.io/en/latest/quickstart.html
zhespelt

5
LabelBinarizer ব্যবহার করবেন না, sklearn.preprocessing.OneHotEncoder ব্যবহার করুন । আপনি যদি আপনার ডেটা আমদানি করতে এবং প্রাক প্রক্রিয়া করার জন্য পান্ডাস ব্যবহার করেন তবে আপনি এটি সরাসরি প্যান্ডাস.জেট_ডমিগুলি ব্যবহার করে করতে পারেন । এটি স্তন্যপান করে যে বিজ্ঞান-শিখার শ্রেণিবদ্ধ ভেরিয়েবলগুলি সমর্থন করে না।
রিকার্ডো ক্রুজ

11

আপনার স্ট্রিংগুলিকে এমন সাংখ্যিক বৈশিষ্ট্য হিসাবে এনকোড করা দরকার যা সায়া-কিট এমএল অ্যালগরিদমের জন্য ব্যবহার করতে পারে। এই কার্যকারিতাটি প্রিপ্রসেসিং মডিউলে পরিচালনা করা হয় (উদাহরণস্বরূপ, sklearn.preprocessing.LabelEncoder দেখুন )।


3
রাপাইও তার উত্তরে ব্যাখ্যা করে যে কেন এটি একটি ভুল ফলাফল পাবে
কিথ

7

এলোমেলো বন সহ বিজ্ঞান-শিখার মডেলগুলির জন্য আপনার সাধারণত এক-গরম এনকোড শ্রেণীবদ্ধ পরিবর্তনশীল হওয়া উচিত । র্যান্ডম অরণ্য প্রায়শই ওয়ান-হট এনকোডিং ছাড়াই ঠিক কাজ করবে তবে আপনি যদি এক-হট এনকোড করেন তবে সাধারণত আরও ভাল সম্পাদন করে। এক-হট এনকোডিং এবং "ডামিিং" ভেরিয়েবলগুলি এই প্রসঙ্গে একই জিনিসটিকে বোঝায়। এটি সম্পাদন করার জন্য সাইকিট - লার্নে রয়েছে স্কেলারন.প্রিপ্রসেসিং.অনো হট এনকোডার এবং পান্ডাসের পান্ডাস.জেট_ডমি রয়েছে ।

তবে এর বিকল্পও রয়েছে। কেডনুজেটসের "বিয়ান ওয়ান-হট" নিবন্ধটি আপনাকে কেন শ্রেণীবদ্ধ ভেরিয়েবল এবং এক-হট এনকোডিংয়ের বিকল্পগুলি এনকোড করতে হবে তা বোঝানোর দুর্দান্ত কাজ করে।

এলোমেলো বনের বিকল্প বাস্তবায়ন রয়েছে যার জন্য আর-এইচ 2 ও-র মতো এক-হট এনকোডিংয়ের প্রয়োজন হয় না। আর এর বাস্তবায়ন গণনাগতভাবে ব্যয়বহুল এবং আপনার বৈশিষ্ট্যগুলিতে অনেকগুলি বিভাগ থাকলে কাজ করবে না । H2O বিপুল সংখ্যক বিভাগের সাথে কাজ করবে। কন্টিনিয়াম এইচ 2 ওকে অ্যানাকোন্ডা পাইথনে উপলব্ধ করেছে

স্কাইকিট-লার্ন হ্যান্ডেলকে শ্রেণিবদ্ধ বৈশিষ্ট্যগুলি সরাসরি তৈরি করার একটি চলমান প্রচেষ্টা রয়েছে

এই নিবন্ধটি H2O এ ব্যবহৃত অ্যালগরিদমের ব্যাখ্যা রয়েছে। এটি একাডেমিক পেপারকে একটি স্ট্রিমিং প্যারালাল ডিসিশন ট্রি অ্যালগোরিদম এবং একই কাগজের দীর্ঘতর সংস্করণ উল্লেখ করে।


5

2018 আপডেট!

আপনি আপনার শ্রেণিবদ্ধ ভেরিয়েবলগুলির জন্য একটি এম্বেডিং (ঘন ভেক্টর) স্থান তৈরি করতে পারেন। আপনারা অনেকে ওয়ার্ড টুভেক এবং ফাস্টটেক্সটের সাথে পরিচিত, যা শব্দকে অর্থবহ ঘন ভেক্টরের জায়গায় এম্বেড করে। এখানে একই ধারণা - আপনার শ্রেণিবদ্ধ ভেরিয়েবলগুলি কোনও অর্থ সহ কোনও ভেক্টরকে মানচিত্র করবে।

থেকে গুও / Berkhahn কাগজ :

সত্তা এম্বেডিং কেবল মেমরির ব্যবহার হ্রাস করে না এবং এক-হট এনকোডিংয়ের সাথে তুলনা করে নিউরাল নেটওয়ার্কগুলির গতি বাড়িয়ে তোলে, তবে আরও গুরুত্বপূর্ণভাবে এম্বেডিং স্পেসে একে অপরের নিকটে অনুরূপ মানগুলি ম্যাপিংয়ের মাধ্যমে এটি শ্রেণিবদ্ধ ভেরিয়েবলের অভ্যন্তরীণ বৈশিষ্ট্যগুলি প্রকাশ করে। আমরা সাম্প্রতিক কাগল প্রতিযোগিতায় এটি সফলভাবে প্রয়োগ করেছি এবং আপেক্ষিক সাধারণ বৈশিষ্ট্য সহ তৃতীয় অবস্থানে পৌঁছাতে সক্ষম হয়েছি।

লেখকরা আবিষ্কার করেছেন যে এইভাবে শ্রেণিবদ্ধ ভেরিয়েবলগুলি উপস্থাপন করা এলোমেলো বন সহ পরীক্ষিত সমস্ত মেশিন লার্নিং অ্যালগরিদমগুলির কার্যকারিতা উন্নত করেছে।

সেরা উদাহরণটি হতে পারে গ্রুপ সম্পর্কিত পিনগুলিতে কৌশলটির প্রয়োগ পিন্টারেস্টের :

এখানে চিত্র বর্ণনা লিখুন

ফাস্টাইয়ের লোকেরা বিভাগীয় এম্বেডিংগুলি বাস্তবায়ন করেছে এবং সহযোগী ডেমো নোটবুকের সাথে একটি খুব সুন্দর ব্লগ পোস্ট তৈরি করেছে

অতিরিক্ত বিবরণ এবং ব্যাখ্যা

একটি নিউরাল নেট এম্বেডিংগুলি তৈরি করতে ব্যবহৃত হয় অর্থাৎ প্রতিটি শ্রেণিবদ্ধ মানকে ভেক্টর নির্ধারণ করে। একবার আপনার ভেক্টর হয়ে গেলে আপনি সেগুলি সংখ্যার মানগুলি গ্রহণ করে এমন কোনও মডেলগুলিতে ব্যবহার করতে পারেন। ভেক্টরের প্রতিটি উপাদান একটি ইনপুট ভেরিয়েবলে পরিণত হয়। উদাহরণস্বরূপ, আপনি যদি রঙের শ্রেণিবদ্ধ তালিকা এম্বেড করতে 3-ডি ভেক্টর ব্যবহার করেন তবে আপনি এমন কিছু পেতে পারেন: লাল = (0, 1.5, -2.3), নীল = (1, 1, 0) ইত্যাদি আপনি তিনটি ব্যবহার করবেন তিনটি উপাদান অনুসারে আপনার এলোমেলো বনের ইনপুট ভেরিয়েবল। লাল জিনিসগুলির জন্য, সি 1 = 0, সি 2 = 1.5 এবং সি 3 = -2.3। নীল জিনিসগুলির জন্য, সি 1 = 1, সি 2 = 1 এবং সি 3 = 0।

এম্বেডিংগুলি তৈরি করতে আপনার আসলে একটি নিউরাল নেটওয়ার্ক ব্যবহার করার দরকার নেই (যদিও আমি কৌশলটি থেকে দূরে সরে যাওয়ার পরামর্শ দিই না)। আপনি যখন সম্ভব সম্ভব হাত বা অন্য উপায়ে নিজের এম্বেডিংগুলি তৈরি করতে মুক্ত হন। কিছু উদাহরণ:

  1. আরজিবি ভেক্টরগুলিতে মানচিত্রের রঙ।
  2. ল্যাট / লম্বা ভেক্টরগুলিতে মানচিত্রের অবস্থান।
  3. একটি মার্কিন রাজনৈতিক মডেল, বাম / ডান প্রান্তিককরণ, করের বোঝা, ইত্যাদি উপস্থাপন করে কিছু ভেক্টর উপাদানগুলিতে শহরগুলি মানচিত্র করুন

ঠিক আছে দুর্দান্ত তবে যতক্ষণ না আমি কিছু মিস করি এটি জাল শেষ করার জন্য। কীভাবে আমরা একটি এম্বেডিং তৈরি করব এবং তারপরে ফরেস্টে এম্বেডিংটি পাস করব? আমি অনুমান করি যে আপনাকে সমস্ত বৈশিষ্ট্য সহ পুরো নেটকে প্রশিক্ষণ দিতে হবে এবং তারপরে প্রথম কয়েকটি স্তর গ্রহণ করতে হবে এবং এটি আপনার ফরেস্টে আপনার ইনপুট বৈশিষ্ট্য হিসাবে ব্যবহার করতে হবে। এটি কীভাবে হবে তা পরিষ্কার নয়।
কিথ

@ কীথ একটি নিউরাল নেট এম্বেডিংগুলি তৈরি করতে ব্যবহৃত হয় অর্থাৎ প্রতিটি শ্রেণিবদ্ধ মানকে একটি ভেক্টর বরাদ্দ করে। একবার আপনার ভেক্টর হয়ে গেলে আপনি সেগুলি সংখ্যার মানগুলি গ্রহণ করে এমন কোনও মডেলগুলিতে ব্যবহার করতে পারেন। ভেক্টরের প্রতিটি উপাদান একটি ইনপুট ভেরিয়েবলে পরিণত হয়। উদাহরণস্বরূপ, আপনি যদি রঙের শ্রেণিবদ্ধ তালিকা এম্বেড করতে 3-ডি ভেক্টর ব্যবহার করেন তবে আপনি এমন কিছু পেতে পারেন: লাল = (0, 1.5, -2.3), নীল = (1, 1, 0)ইত্যাদি three আপনি তিনটি উপাদানগুলির সাথে মিলিয়ে আপনার এলোমেলো বনে তিনটি ইনপুট ভেরিয়েবল ব্যবহার করবেন। লাল জিনিসগুলির জন্য, সি 1 = 0, সি 2 = 1.5 এবং সি 3 = -2.3। নীল জিনিসগুলির জন্য, সি 1 = 1, সি 2 = 1, এবং সি 3 = 0
পিট

আমি পুরোপুরি ধারণাটি পাই কারণ এটি বেশ সহজ। মানে বাস্তবায়নে এটি কীভাবে হবে? আপনি যে দ্রুত.ই ডেমো নোটবুকটি সংযুক্ত করেছেন তার শেষে একটি র্যান্ডমফোরস্টগ্রিজার সাথে কিছুটা আছে তবে এম্বেডিংগুলিতে কীভাবে এটি যুক্ত হয় আমি সত্যিই তা দেখতে পাই না।
কিথ


3

আপনি এই জাতীয় দৃশ্যে ডামি ভেরিয়েবল ব্যবহার করতে পারেন। পান্ডার সাহায্যে panda.get_dummiesআপনি স্ট্রিংগুলির জন্য ডমি ভেরিয়েবল তৈরি করতে পারেন যা আপনি সিদ্ধান্ত গাছ বা র্যান্ডম ফরেস্টে রাখতে চান।

উদাহরণ:

import pandas as pd
d = {'one' : pd.Series([1., 2., 3.,4.], index=['a', 'b', 'c','d']),'two' :pd.Series(['Paul', 'John', 'Micheal','George'], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(d)

df_with_dummies= pd.get_dummies(df,columns=["two"],drop_first=False)
df_with_dummies

2

এগুলিকে সংখ্যায় পরিণত করুন, উদাহরণস্বরূপ, প্রতিটি অনন্য দেশের জন্য একটি অনন্য নম্বর দেওয়া (যেমন 1,2,3 এবং ...)

এছাড়াও আপনি না ব্যবহার করতে হবে এক-হট এনকোডিং (যেমন রৈখিক / লজিস্টিক রিগ্রেশন হিসাবে) (ওরফে ডামি ভেরিয়েবল) যখন, র্যান্ডম বন সঙ্গে কাজ কারণ গাছ অন্যান্য অ্যালগরিদম মত কাজ করে না এবং তারা দূরবর্তী দ্বারা কাজ করে না (তারা আপনার বৈশিষ্ট্য জন্য ভাল বিভক্ত) যাতে খোঁজার সঙ্গে কাজ কোন প্রয়োজন এক-হট এনকোডিং-এর


1
এটি প্রকৃতপক্ষে গাছটিকে প্রশিক্ষিত করে এমন নির্দিষ্ট অ্যালগরিদমের উপর নির্ভর করে। বিশেষত, সাইকিট শ্রেণিবদ্ধ ভেরিয়েবল সমর্থন করে না।
chuse
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.