প্রতিটি সমন্বিত আইডির সাথে 10,000 টি-মাত্রিক জায়গাতে 20 এলোমেলো পয়েন্ট নিন । এগুলিকে 10 জোড়া ("দম্পতিরা") বিভক্ত করুন এবং প্রতিটি জোড়ের গড় ("একটি শিশু") ডেটাসেটে যুক্ত করুন। তারপরে 30 টি পয়েন্ট এবং প্লট PC1 বনাম PC2 তে পিসিএ করুন।
একটি লক্ষণীয় জিনিস ঘটে: প্রতিটি "পরিবার" পয়েন্টগুলির একটি ট্রিপলেট তৈরি করে যা সমস্ত এক সাথে কাছাকাছি থাকে। অবশ্যই প্রতিটি শিশু মূল 10,000-মাত্রিক জায়গাতে তার প্রতিটি পিতামাতার কাছাকাছি থাকে তাই পিসিএ স্পেসেও এটি বাবা-মায়ের কাছাকাছি থাকার আশা করতে পারে। তবে, পিসিএ স্পেসে পিতা-মাতার প্রতিটি জুটি পাশাপাশি একত্রে রয়েছে, যদিও মূল জায়গাতে তারা কেবল এলোমেলো পয়েন্ট!
বাচ্চারা কীভাবে পিসিএ প্রক্ষেপণে পিতামাতাকে একসাথে টানতে পারে?
কেউ চিন্তিত হতে পারেন যে এটি কোনওভাবে এই কারণে প্রভাবিত হয় যে বাচ্চাদের মা-বাবার চেয়ে কম আদর্শ রয়েছে। এটি মনে হয় না: আমি যদি শিশুদের উত্পাদন করি কোথায় এবং পিতামাতার পয়েন্টগুলি হয় তবে তাদের পিতামাতার মতো গড় নিয়ম থাকবে। তবে আমি পিসিএ স্পেসে গুণগতভাবে একই ঘটনাটি পর্যবেক্ষণ করি:
এই প্রশ্নটি একটি খেলনা ডেটা সেট ব্যবহার করছে তবে এটি জিনোম-ওয়াইড অ্যাসোসিয়েশন স্টাডি (জিডাব্লুএএস) থেকে যেখানে রিয়েল-ওয়ার্ল্ড ডেটা সেট করে দেখেছি তা থেকে অনুপ্রাণিত হয় যেখানে মাত্রাগুলি একক নিউক্লিওটাইড পলিমॉर्ফিজম (এসএনপি)। এই ডেটা সেটটিতে মা-বাবা-সন্তানের ট্রাইস রয়েছে।
কোড
%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(1)
def generate_families(n = 10, p = 10000, divide_by = 2):
X1 = np.random.randn(n,p) # mothers
X2 = np.random.randn(n,p) # fathers
X3 = (X1+X2)/divide_by # children
X = []
for i in range(X1.shape[0]):
X.extend((X1[i], X2[i], X3[i]))
X = np.array(X)
X = X - np.mean(X, axis=0)
U,s,V = np.linalg.svd(X, full_matrices=False)
X = U @ np.diag(s)
return X
n = 10
plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = 2)
for i in range(n):
plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families1.png')
plt.figure(figsize=(4,4))
X = generate_families(n, divide_by = np.sqrt(2))
for i in range(n):
plt.scatter(X[i*3:(i+1)*3,0], X[i*3:(i+1)*3,1])
plt.tight_layout()
plt.savefig('families2.png')