ผลต่างระหว่างรุ่นของ "01204472/การทดลองเกี่ยวกับ SVD"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 47: แถว 47:
 
Rank ของเมตริกซ์ M มีค่าเท่ากับเท่าใด?
 
Rank ของเมตริกซ์ M มีค่าเท่ากับเท่าใด?
  
ทดลองคำนวณ rank ของ M ด้วยคำสั่ง rank(M) ทำไมผลลัพธ์ที่ได้ไม่ตรงกับที่เราคาดการณ์ไว้?
+
ทดลองคำนวณ rank ของ M ด้วยคำสั่ง <tt>rank(M)</tt> ทำไมผลลัพธ์ที่ได้ไม่ตรงกับที่เราคาดการณ์ไว้?
 +
 
 +
ให้คำนวณหา singular value decomposition ของ M โดยสั่ง
 +
 
 +
u,s,v = svd(M)
 +
 
 +
ให้พิจารณาค่าใน s  ค่าดังกล่าวเกี่ยวข้องอะไรกับ rank ของ M?
 +
 
 +
พิจารณาเมตริกซ์ u, ทดลองสั่ง plot คอลัมน์แรกของ u
 +
 
 +
plot(u[:,0])
 +
 
 +
พิจารณาเมตริกซ์ v, ทดลองสั่ง plot แถวแรกของ v
 +
 
 +
plot(v[0,:].T)
  
 
== การประมาณเมตริกซ์ ด้วย Low rank เมตริกซ์ ==
 
== การประมาณเมตริกซ์ ด้วย Low rank เมตริกซ์ ==

รุ่นแก้ไขเมื่อ 03:05, 6 กันยายน 2555

ทดลองเกี่ยวกับ eigenvectors

ก่อนอื่นเราจะสร้างรายการของจุดบนวงกลมรัศมี 1 หน่วย

ang = arange(0,2.*pi,pi/10.)
x = [cos(a) for a in ang]
y = [sin(a) for a in ang]
plot(x,y,'o')

สร้างรายการของเวกเตอร์จากลิสต์ x และ y

vs = [matrix([[xx],[yy]]) for xx,yy in zip(x,y)]

จากนั้นให้สร้างเมตริกซ์ M ขนาด 2x2 ขึ้นมา สำหรับเวกเตอร์ v แต่ละเวกเตอร์ใน vs ให้หา Mv และรวมเป็นรายการ mvs

ให้นำจุดเหล่านั้นในลิสต์ mvs มา plot ที่เดียวกับจุดจากรายการ vs ที่เรา plot ตอนแรก ดังตัวอย่างด้านล่าง (รูปอาจจะไม่เหมือน ขึ้นกับเมตริกซ์ M)

Cir-eig.png

ให้หา eigenvector ของ M ด้วยฟังก์ชัน eig เวกเตอร์ดังกล่าวอธิบายอะไรเกี่ยวกับรูปด้านบน

ให้ลองคูณ M เข้ากับ eigenvector ที่ได้ทั้งสอง

ให้ plot eigenvector ทั้งสองลงบนกราฟ (สังเกตว่าเวกเตอร์ไม่จำเป็นต้องตั้งฉากกัน)

เมตริกซ์ที่มี Low rank

เราจะทดลองสร้างเมตริกซ์ที่มี rank ต่ำ

สร้างเวกเตอร์ X

X = matrix([ [sin(a) for a in arange(0,4*pi,pi/50)] ]).T

และเวกเตอร์ Y

Y = matrix([ [cos(a) for a in arange(0,4*pi,pi/50)] ]).T

สร้างเมตริกซ์ M โดยให้เท่ากับ X YT

M = X * Y.T

จากให้แสดงเมตริกซ์ดังกล่าวด้วยคำสั่ง

imshow(M)

Rank ของเมตริกซ์ M มีค่าเท่ากับเท่าใด?

ทดลองคำนวณ rank ของ M ด้วยคำสั่ง rank(M) ทำไมผลลัพธ์ที่ได้ไม่ตรงกับที่เราคาดการณ์ไว้?

ให้คำนวณหา singular value decomposition ของ M โดยสั่ง

u,s,v = svd(M)

ให้พิจารณาค่าใน s ค่าดังกล่าวเกี่ยวข้องอะไรกับ rank ของ M?

พิจารณาเมตริกซ์ u, ทดลองสั่ง plot คอลัมน์แรกของ u

plot(u[:,0])

พิจารณาเมตริกซ์ v, ทดลองสั่ง plot แถวแรกของ v

plot(v[0,:].T)

การประมาณเมตริกซ์ ด้วย Low rank เมตริกซ์

Collaborative filtering

อ่านเพิ่มเติม: http://www.netflixprize.com/community/viewtopic.php?id=1043