ชุดย่อยที่มีความสัมพันธ์กันน้อยที่สุดของตัวแปรสุ่มจากเมทริกซ์สหสัมพันธ์


10

ฉันมีความสัมพันธ์เมทริกซ์ซึ่งผมได้ใช้ค่าสัมประสิทธิ์สหสัมพันธ์ของเพียร์สันเชิงเส้นผ่านของ Matlab corrcoef () เมทริกซ์สหสัมพันธ์ของมิติ 100x100 นั่นคือฉันคำนวณเมทริกซ์สหสัมพันธ์กับตัวแปรสุ่ม 100 ตัวA

กลุ่มคนเหล่านี้ตัวแปรสุ่ม 100 ผมอยากที่จะหา 10 ตัวแปรสุ่มที่มีความสัมพันธ์เมทริกซ์มีว่า "ความสัมพันธ์น้อย" เป็นไปได้ (ดูปริมาณเท่าใด "ความสัมพันธ์มากขึ้น" เมทริกซ์สหสัมพันธ์ประกอบด้วยเมื่อเทียบกับความสัมพันธ์เมทริกซ์ Bเกี่ยวกับตัวชี้วัดเพื่อวัด ความสัมพันธ์โดยรวมในเมทริกซ์ความสัมพันธ์) ฉันสนใจเฉพาะความสัมพันธ์แบบคู่เท่านั้น

มีวิธีการที่ดีในการค้นหาตัวแปรสุ่ม 10 ตัวในระยะเวลาที่เหมาะสมหรือไม่ (เช่นฉันไม่ต้องการลองชุดค่าผสม)? อัลกอริทึมการประมาณก็โอเค(10010)


1
metrics to measure the overall correlation. คุณกำลังคิดเกี่ยวกับปัจจัยหรือไม่
ttnphns

1
คำถามที่คล้ายกันมากstats.stackexchange.com/q/73125/3277
ttnphns

1
ตัวกำหนดล็อกคือฟังก์ชัน submodular (ดูหน้า 18 ที่นี่ ) มันไม่เพิ่มขึ้นโชคไม่ดีซึ่งหมายความว่าผลการประมาณค่าโลภแบบ1-1 / eแบบคลาสสิค11/eนั้นไม่ได้นำมาใช้ แต่มันก็ยังรู้สึกว่ามันอาจจะมีประโยชน์บ้าง ....
Dougal

1
หากคุณต้องการใช้ค่าเฉลี่ยของความสัมพันธ์แทนสิ่งนี้จะกลายเป็นปัญหากลุ่มน้ำหนักขอบสูงสุดซึ่งแน่นอนว่าเป็นปัญหา NP-hard แต่ได้เห็นงานบางอย่างเกี่ยวกับอัลกอริธึมการประมาณ
Dougal

3
แล้วความคิดง่ายๆกับการวิเคราะห์คลัสเตอร์ รับเป็นระยะทาง (แตกต่างกัน) และทำการจัดกลุ่มด้วยวิธีที่เลือก (ฉันอาจเลือก Ward หรือลำดับชั้นการเชื่อมโยงเฉลี่ย) เลือกคลัสเตอร์ที่แน่นที่สุดซึ่งประกอบด้วย 10 รายการ |r|
ttnphns

คำตอบ:


3

ขอให้เราพิจารณาผลรวมของสหสัมพันธ์แบบคู่ที่แน่นอนว่าเป็นการวัดที่เราเลือก เราจึงหาเวกเตอร์ด้วยซึ่งจะลดโดยที่.v{0,1}Nl1(v)=nvQvQij=|Aij|

สมมติว่า Q เป็นบวกแน่นอนเช่น A, ปัญหาจะลดลงเพื่อแก้ปัญหาการหาค่าเหมาะที่สุดแบบสมการกำลังสอง:

v=min vQv s.t. l1(v)=n, vi{0,1}

สิ่งนี้แสดงให้เห็นถึงการผ่อนคลายที่กำลังเกิดขึ้น:

v=min vQv s.t. l1(v)=n, vi[0,1]

ซึ่งสามารถแก้ไขได้อย่างง่ายดายโดยใช้ตัวแก้แบบนอกชั้นวาง; แล้วผลที่จะได้รับโดยที่ใหญ่ที่สุดองค์ประกอบใน *nv

ตัวอย่างรหัส matlab:

N=100;
n=10;
% Generate random data
A=rand(N,1000);
C=corrcoef(A');
Q=abs((C+C')/2); % make sure it is symmetric
x = cplexqp(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
% If you don't use CPLEX, use matlab's default
% x = quadprog(Q,zeros(1,N),[],[], ones(1, N),n, zeros(N,1), ones(N,1));
assert(abs(sum(x)-n)<1e-10);
% Find the n largest values
I=sort(x); 
v=zeros(size(x)); v(x>I(N-n))=1; 
assert(abs(sum(v)-n)<1e-10);
% Make sure we do better than 10K random trials
for i=1:10000
   vc=zeros(size(x)); vc(randperm(N,n))=1;
   assert(sum(vc)==n, 'Wrong l0 norm');
   assert(vc'*Q*vc>v'*Q*v, 'Improves result');
end
% Show results
J=find(v==1);
fprintf('The optimal solution total off-diagonal correlations are %1.3f\n', v'*Q*v-n);
fprintf('The matrix:\n');
C(J,J)

คุณมีสคริปต์เวอร์ชั่น Python โดยบังเอิญหรือไม่?
เมียร์

2

สิ่งนี้อาจแย่กว่าแนวคิดการจัดกลุ่มแบบลำดับชั้นของ @ ttnphns แต่: ฉันเพิ่งเกิดขึ้นบนกระดาษที่ใช้เป็นฟังก์ชันวัตถุประสงค์ submodular ที่เพิ่มขึ้น:logdet(I+A)

Vanchinathan, Marfurt, Robelin, Kossman และ Krause การค้นพบรายการที่มีค่าจากข้อมูลขนาดใหญ่ KDD 2015. ( ดอย , arXiv )

หากคุณคิดว่าเป็นการวัดที่สมเหตุสมผล "มีความสัมพันธ์น้อยที่สุด" คุณสามารถรับปัจจัยที่เหมาะสมที่สุดได้ภายในโดยเพียงแค่เลือกจุดที่ทำให้เกิดประโยชน์สูงสุด สิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพด้วยการสลายตัวของบล็อค LUโดยที่คือเวกเตอร์ของความสัมพันธ์กับรายการที่มีอยู่แล้วในเมทริกซ์:11/ev

det[I+AvvT2]=det([I0vT(I+A)11][I+A002vT(I+A)1v][I(I+A)1v01])=det[I0vT(I+A)11]det[I+A002vT(I+A)1v]det[I(I+A)1v01]=(2vT(I+A)1v)det(I+A)

และแน่นอนคุณควรคำนวณโดยที่คือตัวประกอบการ Cholesky ของและใช้ตัวแก้รูปสามเหลี่ยม ซึ่งเป็น2) ดังนั้นกระบวนการทั้งหมดนี้ควรใช้เวลาในการเลือกจากองค์ประกอบสมมติว่าเมทริกซ์สหสัมพันธ์นั้นถูกคำนวณแล้ว .vT(I+A)1v=L1v2LI+AO(n2)O(k=1nNk2+k3)=O(Nn3)nN


ดูเหมือนว่าลิงก์ไปยังกระดาษนั้นจะตาย คุณมีการอ้างอิงที่มีประโยชน์หรือไม่?
Sycorax พูดว่า Reinstate Monica

@Sycorax มันมีอยู่ในเครื่อง Waybackแต่ฉันไม่พบสำเนาปัจจุบันบนเว็บ ดูเหมือนว่ากระดาษการประชุมเชิงปฏิบัติการได้กลายเป็นกระดาษการประชุมซึ่งฉันเพิ่มคำตอบ
Dougal

1

ฉันไม่แน่ใจว่าจะเข้าใจสิ่งที่คุณหมายถึงอย่างเต็มที่โดย"ฉันเพียง แต่เกี่ยวกับความสัมพันธ์แบบคู่"แต่นี่คือสิ่งที่อาจช่วยได้: ใช้การกลับด้านของความสัมพันธ์แบบเมทริกซ์ของคุณ ระยะเท่ากับที่เป็น xเมทริกซ์ที่สร้างขึ้นจากโดยที่คอลัมน์ -th และบรรทัดถูกลบแล้วAii1det(A0i)/det(A)A0i(n1)(n1)Ai

รับดัชนีของสัมประสิทธิ์เส้นทแยงมุมต่ำสุดในจึงบอกคุณว่าจุดใดมีความสัมพันธ์ต่ำที่สุดกับส่วนที่เหลือของชุดA1

ขึ้นอยู่กับสิ่งที่คุณต้องการทำจริง ๆ คุณสามารถเลือกค่าต่ำสุด 10 ค่าในแนวทแยงของการสลับกลับหรือรับค่าแรกจากนั้นคำนวณการสลับกลับด้วยการลบจุดและอื่น ๆ

หากนี่ไม่ใช่สิ่งที่คุณต้องการฉันรู้สึกว่าเคล็ดลับนี้อาจยังคงมีประโยชน์ แต่ฉันก็ไม่แน่ใจเหมือนกัน


0

ค้นหารายการจากที่มีความสัมพันธ์แบบคู่กันน้อยที่สุด: เนื่องจากความสัมพันธ์ของคำพูดอธิบายของความสัมพันธ์ระหว่างทั้งสองซีรี่ส์มันสมเหตุสมผลมากกว่าที่จะลดผลรวมของกำลังสองของความสัมพันธ์สำหรับ รายการเป้าหมายของคุณ นี่คือทางออกที่ง่ายของฉันkn0.60.36k

เขียน เมทริกซ์สหสัมพันธ์ของคุณเป็นเมทริกซ์สแควร์ของสหสัมพันธ์ รวมสี่เหลี่ยมของแต่ละคอลัมน์ กำจัดคอลัมน์และแถวที่เกี่ยวข้องด้วยผลรวมสูงสุด ตอนนี้คุณมีเมทริกซ์เมทริกซ์ ทำซ้ำจนกว่าคุณจะมีเมทริกซ์คุณสามารถเก็บคอลัมน์และแถวที่เกี่ยวข้องด้วยผลรวมเล็กที่สุด เมื่อเปรียบเทียบวิธีการฉันพบในเมทริกซ์ที่มีและที่มีเพียงสองรายการที่มีผลรวมใกล้เคียงเท่านั้นที่ถูกเก็บและกำจัดแตกต่างกันn×n(n1)×(n1)k×kkn=43k=20


2
สิ่งนี้อาจใช้งานได้ แต่ฟังดูเฉพาะกิจ (มันอ่านได้เหมือนอัลกอริธึมโลภ) และคุณไม่ได้เสนอเหตุผลทางคณิตศาสตร์ใด ๆ ที่แนะนำให้ใช้งานได้ คุณมีความมั่นใจหรือไม่ว่ามันจะใช้งานได้หรือมีขอบเขตว่ามันจะไปถึงทางออกที่ดีที่สุดได้อย่างไร?
whuber

ผมใช้สาขา Gurobi และผูกพันในการแก้อาจมีการเพื่อ optimality สำหรับสัมพันธ์เมทริกซ์และ20 ฉันได้รับค่าวัตถุประสงค์สุดท้าย 8.13 สำหรับการเปรียบเทียบวิธีโลภนี้ทำได้ 42.87 ในขณะที่การสุ่มเลือกมีค่าวัตถุประสงค์ที่คาดหวังของ 62.07 ดังนั้นไม่มาก แต่ก็ไม่ไร้ประโยชน์ และวิธีการนี้แน่นอนว่ามีความเรียบง่ายและความเร็วที่เหมาะสมสำหรับมัน! x=argminx{0,1}n(xTC x)i=1nxi=k418×418k=20
เมียร์

นอกจากนี้ยังมีความสัมพันธ์เชิงบวกระหว่างที่รายการของถูกตั้งค่าเป็นหนึ่งโดย Gurobi และวิธีการโลภนี้ x
เมียร์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.