আমি কেন 100% নির্ভুলতার সিদ্ধান্ত গাছ পাব?


38

আমি আমার সিদ্ধান্ত গাছের জন্য 100% নির্ভুলতা পাচ্ছি। আমি কি ভুল করছি?

এটি আমার কোড:

import pandas as pd
import json
import numpy as np
import sklearn
import matplotlib.pyplot as plt


data = np.loadtxt("/Users/Nadjla/Downloads/allInteractionsnum.csv", delimiter=',')


x = data[0:14]
y = data[-1]


from sklearn.cross_validation import train_test_split

x_train = x[0:2635]
x_test = x[0:658]
y_train = y[0:2635]
y_test = y[0:658]


from sklearn.tree import DecisionTreeClassifier
tree = DecisionTreeClassifier()
tree.fit(x_train.astype(int), y_train.astype(int))


from sklearn.metrics import accuracy_score

y_predicted = tree.predict(x_test.astype(int))
accuracy_score(y_test.astype(int), y_predicted)

4
আপনি কেন কিছু ভুল করছেন বলে মনে করেন? সম্ভবত আপনার ডেটা এমন যে আপনি একটি নিখুঁত শ্রেণিবিন্যাস অর্জন করতে পারেন ...
নর্পি

64
ঘটনাচক্রে, 100% নির্ভুলতার সাথে কিছু ভুল হয়েছে কিনা তা ভেবে +1। খুব বেশি লোকেরা কেবল তাদের মডেলটি দুর্দান্ত বলে মনে করবে ...
এস কোলাসা - মনিকা

1
আর-তে একটি প্যাকেজ (ক্যারেট) স্বয়ংক্রিয়ভাবে একটি ডেটাसेटকে দুটি গ্রুপে বিভক্ত করার জন্য রয়েছে, একটি প্রশিক্ষণের ডেটা এবং অন্যটি ডেটা পরীক্ষার জন্য। আমি প্রক্রিয়াটিকে ডেটা পার্টিশন বলে আছি। আমি বিশ্বাস করি যে ডেটা পার্টিশন অর্জনের জন্য পাইথনেও অনুরূপ প্যাকেজ রয়েছে।
আনস্তাসিয়া-রোমানোভা

দরকারী পটভূমি পাঠ: এমএল মধ্যে প্রচলিত pitfalls
smci

3
@ আনাস্তাসিয়া-রোমানোভা ret সুন্দর প্রতিটি সিরিয়াস এমএল লাইব্রেরিতে এই কার্যকারিতা রয়েছে, ওপি দ্বারা ব্যবহৃত একটি সহ (ওপি এমনকি প্রাসঙ্গিক কার্যকারিতা আমদানি করে, এবং কোনও কারণে এটি ব্যবহার করেনি)।
কনরাড রুডলফ

উত্তর:


79

আপনার পরীক্ষার নমুনা আপনার প্রশিক্ষণের নমুনার একটি উপসেট :

x_train = x[0:2635]
x_test = x[0:658]
y_train = y[0:2635]
y_test = y[0:658]

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

নিশ্চিত করুন যে আপনার প্রশিক্ষণ এবং আপনার পরীক্ষার ডেটা অসম্পূর্ণ, যেমন,

x_train = x[659:2635]
x_test = x[0:658]
y_train = y[659:2635]
y_test = y[0:658]

2
sklearn.model_selection.train_test_splitজুয়ান ইগনাসিও গিলের পরামর্শ মতো এটি ব্যবহার করা ভাল, যেহেতু এটি সেটগুলিও বদলে দেয় এবং উদ্বেগ এড়ায় যদি ডেটাসেটটি ক্রমবর্ধমান হয় না। এটি আরও পরিষ্কার কারণ এটি অভিপ্রায় দেখায় এবং ডেটাসেটের আকারে স্বয়ংক্রিয়ভাবে পরিবর্তনগুলি পরিচালনা করে।
জ্যাক এইডলি 26'18

1
@ জ্যাকএইডলি: আমি সম্মত (এবং কিছু দিন আগে জুয়ান এর উত্তরকে সমর্থন জানিয়েছি )। এমনকি এলোমেলো সংখ্যার বীজ সেট করে ডিবাগিংয়ের জন্য বিভক্ত ডিটারমিনিস্টিক তৈরি করা আরও ভাল ।
এস। কোলাসা - মনিকা

@ স্টেফানকোলাসা হাই, আমি আইরিস ডেটাসেটের সাথে টুইট করছি, এবং GridSearchCVপ্রশিক্ষণের ডেটা ব্যবহার করার পরে , পরীক্ষার নির্ভুলতার জন্য আমি 100% পেয়েছি KNeighborsClassifier। আমি test_train_splitডেটাসেট বিভক্ত করার জন্য ব্যবহার করেছি । আমি এখানে কি ভুল করতে পারে?
Sndn

19

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

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


17

অন্য ব্যবহারকারীরা আপনাকে যেমন বলেছে, আপনি পরীক্ষারূপে ট্রেনের সেটটির একটি উপসেট সেট হিসাবে ব্যবহার করছেন এবং সিদ্ধান্তের গাছটি অত্যধিক মানানসই প্রবণতা।

আপনি আমদানি করার সময় এটি প্রায় ছিল

from sklearn.cross_validation import train_test_split

তবে আপনি ফাংশনটি ব্যবহার করবেন না। আপনার করা উচিত ছিল:

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.33)

র্যান্ডম ট্রেন এবং পরীক্ষা সেট পেতে


2

@ স্টেফান কোলাসা এবং @ সঞ্জয় চাঁদলেকার দ্বারা নির্দেশিত হিসাবে, এটি আপনার পরীক্ষার নমুনাটি আপনার প্রশিক্ষণের নমুনার একটি উপসেট এই সত্যের কারণে।

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

আমি পাইথনে সাবলীল নই তবে যে কোনও পরিসংখ্যান সফটওয়্যারকে এলোমেলো নমুনা দেওয়ার অনুমতি দেওয়া উচিত; কিছু ইঙ্গিত এসও তে উপলব্ধ ।


0

আপনার প্রশিক্ষণ এবং স্পষ্টভাবে নমুনাগুলি কেন পরীক্ষা করতে হবে তার জন্য কেবল অন্তর্নিহিততা জানতে চাই।

যদি আপনার পর্যবেক্ষণ থাকে এবং আপনার ডেটাতে (প্রকৃতপক্ষে, , এবং সম্ভবত আরও কম) বিভাজিত হয়, আপনি প্রতিটি পয়েন্টকে পুরোপুরি শ্রেণিবদ্ধ করবেন (যদি এটি অবিলম্বে পরিষ্কার হয় না, তবে কিছু ছোট-আকারের উদাহরণ লিখুন, যেমন, , এবং নিজেকে এ বিষয়ে বোঝান)।n n - 1 n = 2nnn1n=2

এটিকে ওভারফিটিং বলা হয় কারণ এই বিভাজন প্রক্রিয়াটি আপনার সমস্যার সাথে প্রাসঙ্গিক তবে আপনি যা এখনও পর্যবেক্ষণ করেননি এমন ডেটা পয়েন্টের ভবিষ্যদ্বাণীমূলক হওয়ার সম্ভাবনা খুব বেশি সম্ভাবনা

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


0

অতিরিক্ত ফিট করার জন্য আপনার 100% নির্ভুলতার প্রয়োজন নেই। পর্যাপ্ত বালতি দিয়ে, আপনি অপরিশোধনযোগ্য ফলাফল পেতে পারেন (এমন কিছু যা নমুনাটিকে ভয়ঙ্কর বলে মনে হয়)।

ল্যানসেটের এই উদ্ধৃত নিবন্ধটি দেখুন, বালতিতে একটি নমুনা কাটার পদ্ধতি বর্ণনা করে যা অনেক বেশি সূক্ষ্ম। Munchausen এর পরিসংখ্যানগত গ্রিড এটি xkcd কার্টুন ভিত্তি উল্লেখযোগ্য

100% নির্ভুলতা অর্জন করা কোনও শ্রেণিবদ্ধকারী খুঁজে পাওয়া থেকে কিছুটা দূরে যা ছদ্মবেশী কার্যকরভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.