সাইকিট-লার্ন: এসজিডিসি ক্লাসিফায়ার হিসাবে লজিস্টিক রিগ্রেশন হিসাবে পূর্বাভাস দেওয়া


24

লজিস্টিক রিগ্রেশনকে প্রশিক্ষণের একটি উপায় হ'ল স্টোকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভুত ব্যবহার, যা বিজ্ঞানী-শিখতে একটি ইন্টারফেস দেয়।

আমি কি করতে চান একটি scikit-শিখতে এর নিতে হয় SGDClassifier এবং এটি একটি পণ্য সরবরাহ রিগ্রেশন হিসাবে একই স্কোর আছে এখানে । তবে আমার স্কোর সমতুল্য না হওয়ায় অবশ্যই আমি অবশ্যই কিছু মেশিন লার্নিং বর্ধনগুলি অনুপস্থিত।

এটি আমার বর্তমান কোড। আমি এসজিডিসি ক্লাসিফায়ারে কী অনুপস্থিত যা এটির কোনও লজিস্টিক রিগ্রেশন হিসাবে একই ফলাফল আনতে পারে?

from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.linear_model import SGDClassifier
import numpy as np
import pandas as pd
from sklearn.cross_validation import KFold
from sklearn.metrics import accuracy_score

# Note that the iris dataset is available in sklearn by default.
# This data is also conveniently preprocessed.
iris = datasets.load_iris()
X = iris["data"]
Y = iris["target"]

numFolds = 10
kf = KFold(len(X), numFolds, shuffle=True)

# These are "Class objects". For each Class, find the AUC through
# 10 fold cross validation.
Models = [LogisticRegression, SGDClassifier]
params = [{}, {"loss": "log", "penalty": "l2"}]
for param, Model in zip(params, Models):
    total = 0
    for train_indices, test_indices in kf:

        train_X = X[train_indices, :]; train_Y = Y[train_indices]
        test_X = X[test_indices, :]; test_Y = Y[test_indices]

        reg = Model(**param)
        reg.fit(train_X, train_Y)
        predictions = reg.predict(test_X)
        total += accuracy_score(test_Y, predictions)
    accuracy = total / numFolds
    print "Accuracy score of {0}: {1}".format(Model.__name__, accuracy)

আমার আউটপুট:

Accuracy score of LogisticRegression: 0.946666666667
Accuracy score of SGDClassifier: 0.76

3
একটি প্রশ্ন এবং একটি পর্যবেক্ষণ: বারবার রান করার ক্ষেত্রে আপনার এসজিডি সম্পর্কে সঠিকতা কতটা স্থিতিশীল? দুটি অ্যালগরিদম সমতুল্য নয় এবং অগত্যা একই তথ্য দেওয়া একই নির্ভুলতা উত্পাদন করবে না। ব্যবহারিকভাবে আপনি এসপির জন্য পর্বগুলি এবং শেখার হার পরিবর্তন করার চেষ্টা করতে পারেন। এর বাইরে আপনি এসজিডির জন্য বৈশিষ্ট্যগুলিকে সাধারণ করার চেষ্টা করতে পারেন।
ইমেজ_ডোক্টর

সুতরাং, আমি বার বার রান করার ক্ষেত্রে এসজিডি পরীক্ষা করিনি কারণ উপরেরগুলি 10 গুণ ক্রস বৈধতা ব্যবহার করে; আমার জন্য এটি যথেষ্ট
hlin117

আপনি কি আমাকে ব্যাখ্যা করতে পারেন কীভাবে এই অ্যালগোরিদম সমতুল্য নয়? আমি যদি এখানে এসজিডিসি ক্লাসিফায়ারটির দিকে তাকাই তবে এতে উল্লেখ করা হয় "'লগ' ক্ষতি লজিস্টিক রিগ্রেশন দেয়, সম্ভাব্য শ্রেণিবদ্ধকারী।" আমি বিশ্বাস করি আমার মেশিন লার্নিংয়ের জ্ঞানের একটি ফাঁক রয়েছে।
hlin117

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

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

উত্তর:


23

পুনরাবৃত্তি সংখ্যা সম্পর্কে মন্তব্যগুলি স্পট হয়। ডিফল্টর অর্থ SGDClassifier n_iterহ'ল আপনি ওজনের জায়গাতে পদক্ষেপগুলি করেন। চলতি sklearn নিয়ম ~ 1 মিলিয়ন টিপিক্যাল ডেটার জন্য পদক্ষেপ। আপনার উদাহরণস্বরূপ, কেবল এটি 1000 এ সেট করুন এবং এটি প্রথমে সহনশীলতায় পৌঁছে যেতে পারে। আপনার নির্ভুলতা এর সাথে কম কারণ এটি সহনশীলতার আগে পুনরাবৃত্তির সীমাটিকে আঘাত করছে যাতে আপনি "তাড়াতাড়ি থামছেন"55 * num_rowsSGDClassifier

আপনার কোডটি দ্রুত এবং নোংরা করে আমি সংশোধন করছি:

# Added n_iter here
params = [{}, {"loss": "log", "penalty": "l2", 'n_iter':1000}]

for param, Model in zip(params, Models):
    total = 0
    for train_indices, test_indices in kf:
        train_X = X[train_indices, :]; train_Y = Y[train_indices]
        test_X = X[test_indices, :]; test_Y = Y[test_indices]
        reg = Model(**param)
        reg.fit(train_X, train_Y)
        predictions = reg.predict(test_X)
        total += accuracy_score(test_Y, predictions)

    accuracy = total / numFolds
    print "Accuracy score of {0}: {1}".format(Model.__name__, accuracy)

Accuracy score of LogisticRegression: 0.96
Accuracy score of SGDClassifier: 0.96

4

নাম অনুসারে এসজিডিসি ক্লাসিফায়ার স্টকাস্টিক গ্রেডিয়েন্ট বংশোদ্ভূতিকে তার অপ্টিমাইজেশন অ্যালগরিদম হিসাবে ব্যবহার করে।

আপনি যদি স্ক্লার্নে লজিজিটিকআগ্রেশন বাস্তবায়নের দিকে লক্ষ্য করেন তবে পাঁচটি অপ্টিমাইজেশন কৌশল রয়েছে (সলভার) সরবরাহ করা হয়েছে এবং ডিফল্টরূপে এটি 'লিবলাইনার' যা সমন্বিত বংশদ্ভুত (সিডি) রূপান্তর করতে ব্যবহার করে।

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

আপনি যদি এটি আইরিস ডেটা-সেট-এ চালনা করে থাকেন তবে এই সমস্ত হাইপার-প্যারামিটারগুলি টিউন করে উল্লেখযোগ্য পরিবর্তন আনতে পারে না তবে জটিল ডেটা সেট করার জন্য তারা অর্থবহ ভূমিকা পালন করে।

আরও জন্য, আপনি Sklearn লজিস্টিক রিগ্রেশন ডকুমেন্টেশন উল্লেখ করতে পারেন ।


3

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


1

টিএল; ডিআর : আপনি আলফা এবং এন_সিটার (বা সর্বোচ্চ_আমার ) এর গ্রিড নির্দিষ্ট করতে এবং পারফিটটি ব্যবহার করতে পারেন হাইপার-অপ্টিমাইজেশনের জন্য

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

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

সংক্ষেপে, এসজিডিসি ক্লাসিফায়ারের জন্য দুটি মূল পরামিতি হ'ল আলফা এবং এন_সিটার । বিনয়কে সরাসরি উদ্ধৃত করতে:

স্কলারনে থাকা এন_টার ডিফল্টরূপে কিছুই নয়। আমরা এটি যথেষ্ট পরিমাণে (1000) এ সেট করছি। এন_সিটারের একটি বিকল্প প্যারামিটার, যা সম্প্রতি যুক্ত করা হয়েছে, তা হল ম্যাক্স_জিটার। একই পরামর্শটি ম্যাক্স_মিটারের জন্য প্রয়োগ করা উচিত।

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

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