চক্রীয় অর্ডিনাল বৈশিষ্ট্যগুলিকে রূপান্তর করার একটি ভাল উপায় কী?


21

আমার বৈশিষ্ট্য হিসাবে আমি 'ঘন্টা' ক্ষেত্রটি করছি, তবে এটি একটি চক্রীয় মান নেয়। '23' এবং '0' ঘন্টা এর মতো তথ্য সংরক্ষণের জন্য আমি কীভাবে বৈশিষ্ট্যটির রূপান্তর করতে পারি close

একটি উপায় যা আমি ভাবতে পারি তা হ'ল রূপান্তর করা: min(h, 23-h)

Input: [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

Output: [0 1 2 3 4 5 6 7 8 9 10 11 11 10 9 8 7 6 5 4 3 2 1]

এই জাতীয় বৈশিষ্ট্যগুলি হ্যান্ডেল করার কি কোনও মান আছে?

আপডেট: আমি তদারকি করা শেখার ব্যবহার করব, এলোমেলো বন শ্রেণিবদ্ধ প্রশিক্ষণ দেওয়ার জন্য!


1
দুর্দান্ত প্রথম প্রশ্ন! এই নির্দিষ্ট বৈশিষ্ট্যটির রূপান্তরটি সম্পাদনের জন্য আপনার লক্ষ্যটি কী সম্পর্কে আপনি আরও কিছু তথ্য যুক্ত করতে পারেন? আপনি কি তত্ত্বাবধানে পড়াশুনা সমস্যাটির ইনপুট হিসাবে এই রূপান্তরিত বৈশিষ্ট্যটি ব্যবহার করার পরিকল্পনা করছেন? যদি তা হয় তবে দয়া করে সেই তথ্য যুক্ত করার বিষয়টি বিবেচনা করুন কারণ এটি অন্যকে এই প্রশ্নের উত্তর আরও ভালভাবে দিতে পারে।
নীতেশ

1
@ নীতেশ, দয়া করে আপডেট দেখুন
রায় মোদি

আপনি এখানে উত্তরগুলি খুঁজে পেতে পারেন: ডেটাসায়েন্স.স্ট্যাকেক্সেঞ্জার
মিঃ মেরিটোলজি

দুঃখিত তবে আমি মন্তব্য করতে পারছি না। @ এএন 6 ইউ 5 আপনি কীভাবে একসাথে সপ্তাহের দিন এবং ঘন্টাকে আশ্চর্যজনক পদ্ধতির পরে বিবেচনা করবেন তা দয়া করে বাড়িয়ে দিতে পারেন? আমি এক সপ্তাহ ধরে এটি নিয়ে লড়াই করছি এবং আমি একটি প্রশ্ন পোস্ট করেছি কিন্তু আপনি এটি পড়েন নি।
সিমুর

উত্তর:


33

ঘন্টাকে রূপান্তরিত করার সর্বাধিক যৌক্তিক উপায় হ'ল দুটি ভেরিয়েবলের মধ্যে যা ডুবে যাওয়া থেকে পিছনে পিছনে দুলছে। ২৪ ঘন্টা ঘড়ির কাঁটার হাতের শেষের অবস্থানটি কল্পনা করুন। xঅবস্থান সোমালিয়ার দিকে নিচ্ছে সঙ্গে আগে পিছে বেসিনে বাইরে yঅবস্থান। একটি 24-ঘন্টার ঘড়ি জন্য আপনার সাথে এই কাজ করা সম্ভব করতে পারেন x=sin(2pi*hour/24), y=cos(2pi*hour/24)

আপনার উভয় ভেরিয়েবলের প্রয়োজন বা সময়ের সাথে যথাযথ চলাচল নষ্ট হয়ে যায়। এটি পাপ বা কোস উভয়ের ব্যুৎপন্ন সময়ে (x,y)পরিবর্তিত হয় যেখানে ইউনিট বৃত্তের চারপাশে ভ্রমণ করার সাথে সাথে অবস্থানটি স্বচ্ছভাবে পরিবর্তিত হয়।

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

আশাকরি এটা সাহায্য করবে!

আমি অন্য উত্তরের জন্য উত্পন্ন কিছু প্রাসঙ্গিক উদাহরণ কোড যুক্ত করছি:

সম্পাদিত হচ্ছে এর উদাহরণ:

# Enable inline plotting
%matplotlib inline

#Import everything I need...

import numpy as np
import matplotlib as mp

import matplotlib.pyplot as plt
import pandas as pd

# Grab some random times from here: https://www.random.org/clock-times/
# put them into a csv.
from pandas import DataFrame, read_csv
df = read_csv('/Users/angus/Machine_Learning/ipython_notebooks/times.csv',delimiter=':')
df['hourfloat']=df.hour+df.minute/60.0
df['x']=np.sin(2.*np.pi*df.hourfloat/24.)
df['y']=np.cos(2.*np.pi*df.hourfloat/24.)

df

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

def kmeansshow(k,X):

    from sklearn import cluster
    from matplotlib import pyplot
    import numpy as np

    kmeans = cluster.KMeans(n_clusters=k)
    kmeans.fit(X)

    labels = kmeans.labels_
    centroids = kmeans.cluster_centers_
    #print centroids

    for i in range(k):
        # select only data observations with cluster label == i
        ds = X[np.where(labels==i)]
        # plot the data observations
        pyplot.plot(ds[:,0],ds[:,1],'o')
        # plot the centroids
        lines = pyplot.plot(centroids[i,0],centroids[i,1],'kx')
        # make the centroid x's bigger
        pyplot.setp(lines,ms=15.0)
        pyplot.setp(lines,mew=2.0)
    pyplot.show()
    return centroids

এখন এটি চেষ্টা করে দেখুন:

kmeansshow(6,df[['x', 'y']].values)

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

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

kmeansshow(3,df[['x', 'y']].values)

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

দেখুন নীল ক্লাস্টারে কীভাবে এমন সময় থাকে যা মধ্যরাতের আগের এবং পরে একই ক্লাস্টারে একসাথে ক্লাস্টার হয় ...

Qed!


এটি পরিচালনা করার উজ্জ্বল উপায়। এটি 0 এবং 23 ঘন্টা সমান স্কোর দেবে তবে এটি কি সকাল / বিকাল সময়কে একই রকম করে না? যা বাস্তবে 12 ঘন্টা উইন্ডো দ্বারা পৃথক করা হয়।
মাঙ্গাত রাই মোদী 5'15

12 ঘন্টা (এএম / পিএম) সময় কাজ করে না, কেবল 24 ঘন্টা সময় রূপান্তর করুন।
এএন

আমি কেবল লক্ষ্য করেছি যে আপনি ২৪ দ্বারা বিভাজন করছেন you আপনি যখন ঘড়ির সাথে উপমা দিয়েছেন, আমি ভেবেছিলাম এটি একটি স্ট্যান্ডার্ড 12 ঘন্টা clock তবে আপনি 24-ঘন্টা ঘড়ি নিচ্ছেন। আমার কাছে এটি রূপান্তর করার সর্বোত্তম উপায় বলে মনে হচ্ছে। ধন্যবাদ!
মঙ্গলত রাই মোদী

আশ্চর্যজনক উত্তর ঠিক কী আমি ধন্যবাদ খুঁজছিলাম ..
আদিত্য

পাপ () এবং ব্যয় () এর সাথে সংযুক্ত গ্রহণযোগ্য উত্তরটি দুর্দান্ত; এখানে পরিপূরক হিসাবে এটির জন্য আরও একটি বিস্তারিত এবং সুন্দর ব্যাখ্যা ইয়ান লন্ডন।
ফ্লোরিয়ানএইচ

3

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

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

সুতরাং আমার পরামর্শটি 24 টি বৈশিষ্ট্য, প্রতিটি ফর্ম । এটি আপনি স্থানীয় সময় জোনে সময় এনকোড করার মতো। সুতরাং আপনি একই ইউনিটকে কয়েক ঘন্টার কাছাকাছি কিছু আকর্ষণীয় অগ্রগতি ব্যবহার করে সনাক্ত করার জন্য আরএফকে উপলক্ষটি দেন, কারণ প্রতিটি সম্ভাব্য ঘন্টাটিতে 24 টির মধ্যে কমপক্ষে 1 টি বৈশিষ্ট্যে সঠিকভাবে এনকোড হওয়ার সুযোগ রয়েছে has(+ +গুলিটি)

এটি কিছু জায়গা এবং সময় নষ্ট করে, তবে আমি কীভাবে এটি কাজ করে তা দেখার চেষ্টা করব।


0

আদর্শভাবে আপনার কোনও রূপান্তর দরকার নেই। দুটি পয়েন্টের মধ্যে আপেক্ষিক সময়ের পার্থক্য দূরত্ব ফাংশন হিসাবে ব্যবহার করা যেতে পারে। যেখানে শ্রেণিবিন্যাস এটি ভিত্তিক করা যেতে পারে।

জাভাতে:

public class TimeDistanceMeasurer implements DistanceMeasure {

    @Override
    public double compute(double[] a, double[] b) throws DimensionMismatchException {
        String time1 = String.format("%02d", (int)a[0]) + String.format("%02d", (int)a[0]);
        String time2 = String.format("%02d", (int)b[0]) + String.format("%02d", (int)b[0]);

        SimpleDateFormat format = new SimpleDateFormat("HHmm");
        try {
            Date date1 = format.parse(time1);
            Date date2 = format.parse(time2);
            return Math.abs(date2.getTime() - date1.getTime());
        } catch (Exception e) {
            throw new IllegalStateException("Something went wrong.", e);
        }
    }
}

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