ভারিত প্রধান উপাদান বিশ্লেষণ


17

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


1
নীচে উত্তর (গুলি) ছাড়াও, দয়া করে থ্রেড stats.stackexchange.com/q/141754/3277 দেখুন , যেখানে ওজনযুক্ত পিসিএ (কলাম এবং / অথবা সারিগুলির ওজন সহ) মূলত ওজনযুক্ত (জেনারালাইজড) এসভিডি / এর সমতুল্য হিসাবে ব্যাখ্যা করা হয়েছে biplot।
ttnphns

উত্তর:


33

এটি নির্ভর করে আপনার ওজন ঠিক কীভাবে প্রয়োগ করে।

সারি ওজন

যাক কলামে ভেরিয়েবল এবং সাথে ডেটা ম্যাট্রিক্স হতে এন পর্যবেক্ষণ x আমি সারিতে। প্রতিটি পর্যবেক্ষণ এই ক্ষেত্রে সংশ্লিষ্ট ওজন থাকে W আমিXnxiwi , তারপর এটি প্রকৃতপক্ষে পিসিএ মধ্যে এই ওজন নিগমবদ্ধ সহজবোধ্য।

প্রথমত, একটির ওজনযুক্ত গড় μ = 1 গণনা করা দরকারএবংকেন্দ্রথেকে ডেটা থেকে বিয়োগ করেμ=1wiwixi এটি করে।

তারপরে আমরা ভারী কোভেরিয়েন্স ম্যাট্রিক্স 1 গণনা করি, যেখানেডাব্লু=ডায়াগ(wi)1wiXWXW=diag(wi) ওজন তির্যক ম্যাট্রিক্স, এবং এটা বিশ্লেষণ মান পিসিএ প্রযোজ্য।

সেল ওজন

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

অতিরিক্ত মন্তব্য হিসাবে: যদি ওজনগুলি উভয় ভেরিয়েবল এবং পর্যবেক্ষণের সাথে পরিবর্তিত হয় তবে তা প্রতিসাম্যযুক্ত হয়, যাতে ডাব্লু আই জে = ডব্লু জে আই , তবে বিশ্লেষণাত্মক সমাধান আবার সম্ভব, কোরেন এবং কার্মেল দেখুন, 2004, জোরালো লিনিয়ার মাত্রা হ্রাসwijwij=wji


সুস্পষ্ট করার জন্য ধন্যবাদ. অফ ডায়াগোনাল ওজন দিয়ে কেন কোনও বিশ্লেষণাত্মক সমাধান সম্ভব নয় তা আপনি ব্যাখ্যা করতে পারেন? আমি এই আমি উভয় Tamuz এট 2013 এবং জিবরাঈল ও জমির 1979 থেকে যেটা বাদ করছি
noname

@ নাম: আমি এই জাতীয় প্রমাণ সম্পর্কে অবগত নই এবং তদ্ব্যতীত এটি না জানা থাকলে আমি অবাক হব না। সাধারণত কিছু প্রমাণ করা যায় না তা প্রমাণ করা বেশ জটিল , বিশেষত বিশ্লেষণাত্মকভাবে কিছু সম্ভব নয় বলে প্রমাণ করা । অ্যাঙ্গেল ট্রিজিশনের অসম্ভবতা 2000 বছরেরও বেশি সময় ধরে তার প্রমাণের জন্য অপেক্ষা করেছিল ... (ধারাবাহিক)
অ্যামিবা বলেছে রিনিস্টেট মনিকা ২

3
@noname: (। চলছে) তুমি কি জিজ্ঞাসা করা হয় দেখাতে হবে যে কমানোর এর সমস্যা সঙ্গে সম্মান একজন কম রেঙ্ক করতে বাধ্য কুই । কোনও আইজেনভেেক্টর সমস্যার ক্ষেত্রে হ্রাসযোগ্য নয়। আমি আশঙ্কা করছি এর জন্য আপনার আর কোনও ফোরামের প্রয়োজন হবে (সম্ভবত ম্যাথওভারফ্লো?)। তবে মনে রাখবেন যে ইগেনভেেক্টর সন্ধান করাও ঠিক কোনও বিশ্লেষণাত্মক সমাধান নয়: কেবল এটিই যে পুনরাবৃত্তিগুলি সাধারণত একটি স্ট্যান্ডার্ড লাইব্রেরি ফাংশন দ্বারা নিঃশব্দে সঞ্চালিত হয়। i,jwij(XijAij)2Aq
অ্যামিবা বলছেন 22 ই

2
+1 টি। উত্তরের প্রথম বিভাগটি এখানে বর্ণিত ওয়েট (জেনারালাইজড) বিপ্লটের ক্ষেত্রেও ধারণা করা যেতে পারে । পিসিএ কীভাবে "বিপ্লট" (নির্দিষ্ট রেখায় উদ্বিগ্ন) একটি "নির্দিষ্ট কেস" তা মাথায় রেখে।
ttnphns

@ এনটিএনএফএনএস: আপনার মন্তব্য এবং নকল হিসাবে অন্য থ্রেডটি বন্ধ হওয়ার পরে, আমি আমার উত্তরটি পুনরায় পড়ি এবং সারি ওজন কীভাবে মোকাবেলা করতে হবে তার ব্যাখ্যাটি প্রসারিত করি। আমি মনে করি পূর্বে এটি সম্পূর্ণরূপে সঠিক ছিল না বা কমপক্ষে সম্পূর্ণ ছিল না কারণ আমি কেন্দ্রীভূতকে কোনও ভারী গড়ের সাথে উল্লেখ করি নি। আমি আশা করি এটি এখন আরও সার্থক হয়ে উঠবে!
অ্যামিবা বলছেন মনিকাকে

5

সারি ওজন সম্পর্কে অন্তর্দৃষ্টি জন্য অ্যামিবা আপনাকে অনেক ধন্যবাদ। আমি জানি যে এটি স্ট্যাকওভারফ্লো নয়, তবে ব্যাখ্যা সহ সারি-ওজনযুক্ত পিসিএর বাস্তবায়ন পেতে আমার কিছু অসুবিধা হয়েছিল এবং, যেহেতু ওয়েট পিসিএর জন্য গুগল করার সময় এটি প্রথম ফলাফলগুলির মধ্যে একটি, আমি ভেবেছিলাম আমার সমাধানটি সংযুক্ত করা ভাল হবে would , সম্ভবত এটি একই পরিস্থিতিতে অন্যকে সহায়তা করতে পারে। পাইথন 2 কোড স্নিপেটে, উপরে বর্ণিত হিসাবে একটি আরবিএফ কার্নেলযুক্ত একটি পিসিএ 2D ডেটাसेटের স্পর্শ গণনা করতে ব্যবহৃত হয়। কিছু প্রতিক্রিয়া শুনে আমি খুব খুশি হব!

def weighted_pca_regression(x_vec, y_vec, weights):
    """
    Given three real-valued vectors of same length, corresponding to the coordinates
    and weight of a 2-dimensional dataset, this function outputs the angle in radians
    of the line that aligns with the (weighted) average and main linear component of
    the data. For that, first a weighted mean and covariance matrix are computed.
    Then u,e,v=svd(cov) is performed, and u * f(x)=0 is solved.
    """
    input_mat = np.stack([x_vec, y_vec])
    weights_sum = weights.sum()
    # Subtract (weighted) mean and compute (weighted) covariance matrix:
    mean_x, mean_y =  weights.dot(x_vec)/weights_sum, weights.dot(y_vec)/weights_sum
    centered_x, centered_y = x_vec-mean_x, y_vec-mean_y
    matrix_centered = np.stack([centered_x, centered_y])
    weighted_cov = matrix_centered.dot(np.diag(weights).dot(matrix_centered.T)) / weights_sum
    # We know that v rotates the data's main component onto the y=0 axis, and
    # that u rotates it back. Solving u.dot([x,0])=[x*u[0,0], x*u[1,0]] gives
    # f(x)=(u[1,0]/u[0,0])x as the reconstructed function.
    u,e,v = np.linalg.svd(weighted_cov)
    return np.arctan2(u[1,0], u[0,0]) # arctan more stable than dividing


# USAGE EXAMPLE:
# Define the kernel and make an ellipse to perform regression on:
rbf = lambda vec, stddev: np.exp(-0.5*np.power(vec/stddev, 2))
x_span = np.linspace(0, 2*np.pi, 31)+0.1
data_x = np.cos(x_span)[:-1]*20-1000
data_y = np.sin(x_span)[:-1]*10+5000
data_xy = np.stack([data_x, data_y])
stddev = 1 # a stddev of 1 in this context is highly local
for center in data_xy.T:
    # weight the  points based on their euclidean distance to the current center
    euclidean_distances = np.linalg.norm(data_xy.T-center, axis=1)
    weights = rbf(euclidean_distances, stddev)
    # get the angle for the regression in radians
    p_grad = weighted_pca_regression(data_x, data_y, weights)
    # plot for illustration purposes
    line_x = np.linspace(-5,5,10)
    line_y = np.tan(p_grad)*line_x
    plt.plot(line_x+center[0], line_y+center[1], c="r")
    plt.scatter(*data_xy)
    plt.show()

এবং একটি নমুনা আউটপুট (এটি প্রতিটি বিন্দুর জন্য একই করে): এখানে চিত্র বর্ণনা লিখুন

চিয়ার্স,
আন্দ্রেস

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