• 沒有找到結果。

大資料多元尺度在網路使用者偏好分析之應用 - 政大學術集成

N/A
N/A
Protected

Academic year: 2021

Share "大資料多元尺度在網路使用者偏好分析之應用 - 政大學術集成"

Copied!
44
0
0

加載中.... (立即查看全文)

全文

(1)國立政治大學應用數學系 碩士學位論文. 政 治 大 大資料多元尺度在網路使用者偏好分析 立 之應用. ‧ 國. 學. ‧. The application of large data multidimensional scaling method in network user preference n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 碩士班學生:潘靜儒 撰. 指導教授: 曾正男. 博士. 中華民國 101 年 7 月 2 日.

(2) 大資料多元尺度在網路使用者偏好分析之應用 學生: 潘靜儒. 指 導 教 授 : 曾正男博士 國立政治大學應用數學研究所 要. 摘. 由於現在網路發展的非常快速,資料的產生速度以及使用方式已經超過人們的分 析能力與解讀能力,因此近來大資料計算是一個很重要的研究課題,許多科學家. 政 治 大 何去分析,或是解讀。特別是大型網站上的資料,使用者的數量和可點選的項目 立 是隨著時間不斷增加,如何分析這類的資料是一個重要的課題。. 與研究單位都積極地投入大量的研究資源,目的就是要研究這些龐大的資料要如. ‧ 國. 學. 我們將介紹如何利用襐襹襴襨襯襮程式的特性對大型網站進行使用者偏好分析,. ‧. 透過亂數投影和分解褭合成多元尺度法的合作,做到使用者偏好網路的建制, 協助大型網站對使用者進行即時性的閱讀項目推薦。我們提出襄襡襴襡 襩襳 襣襡襣襨襥 襦襯襲. y. sit. io. n. al. er. 速計算結果。. Nat. 襤襩襭襥襮襳襩襯襮 襲襥襤襵襣襴襩襯襮 的概念,說明大資料計算必須配合資料庫才能達到真正的快. Ch. engchi. 襩襶. i n U. v.

(3) 襁襂襓襔襒襁襃襔 襔襨襥 襤襥襶襥襬襯襰襭襥襮襴 襯襦 襴襨襥 襉襮襴襥襲襮襥襴 襩襳 襶襥襲襹 襦襡襳襴 襩襮 襲襥襣襥襮襴 襹襥襡襲褮 襂襥襣襡襵襳襥 襴襨襥 襳襰襥襥襤 襯襦 襤襡襴襡 襩襮襣襲襥襡襳襥襳 襶襥襲襹 襦襡襳襴 襡襮襤 襴襨襥 襴襹襰襥 襯襦 襤襡襴襡 襵襳襡襧襥 襩襳 襯襶襥襲 襴襨襥 襡襮襡襬襹襳襩襳 襯襦 襲襥襣襥襮襴 襴襥襣襨襮襩襱襵襥褬 襢襩襧 襤襡襴襡 襢襥襣襯襭襥襳 襡 襢襩襧 襤襥襡襬 襩襮 襴襨襩襳 襣襥襮襴襵襲襹褮 襔襨襥襲襥 襡襲襥 襭襡襮襹 襳襣襩襥襮襴襩襳襴襳 襩襮襶襯襬襶襥 襴襨襥 襲襥襳襥襡襲襣襨 襯襦 襴襨襩襳 褌襥襬襤褮 襔襨襥襹 襷襡襮襴 襴襯 襫襮襯襷 襨襯襷 襴襯 襡襮襡襬襹襳襩襳 襩襮 襴襩襭襥 襡襮襤 襭襡襫襥 襴襨襥 襡襮襡襬襹襳襩襳 襥褎襣襩襥襮襴襬襹褬 襥襳襰襥襣襩襡襬襬襹 襷襨襥襮 襴襨襥 襤襡襴襡 襩襳 襧襲襯襷襩襮襧褮 襗襥 襷襩襬襬 襩襮襴襲襯襤襵襣襥 襨襯襷 襴襯 襵襳襥 襴襨襥 襰襲襯襰襥襲襴襩襥襳 襯襦 襐襹襴襨襯襮 襬襡襮襧襵襡襧襥 襴襯 襡襮襡襬襹襳襩襳 襴襨襥 襵襳襥襲 襰襲襥襦襥襲襥襮襣襥 襩襮 襷襥襢 襳襥襲襶襩襣襥褮 襂襹 襵襳襩襮襧 襴襨襥 襨襹襢襲襩襤 襯襦 襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮 襡襮襤. 政 治 大 襨襩襳襴襯襲襹 襴襯 襡 襬襯襷 襤襩襭襥襮襳襩襯襮襡襬 立襦襥襡襴襵襲襥 襳襰襡襣襥褮 襉襮 襴襨襩襳 襦襥襡襴襵襲襥 襳襰襡襣襥 襵襳襥襲襳 襡襲襥 襬襯襣襡襴襥襤 襴襨襥 襳襰襬襩襴褭襡襮襤褭襣襯襭襢襩襮襥 襭襵襬襴襩襤襩襭襥襮襳襩襯襮襡襬 襳襣襡襬襩襮襧 襭襥襴襨襯襤褬 襷襥 襣襡襮 襰襲襯襪襥襣襴 襵襳襥襲 襢襲襯襷襳襥. ‧ 國. 學. 襮襥襡襲襬襹 襨襡襶襥 襳襩襭襩襬襡襲 襰襲襥襦襥襲襥襮襣襥褬 襳襵襣襨 襴襨襡襴 襷襥 襣襡襮 襲襥襣襯襭襭襥襮襤 襴襨襥 襦襵襲襴襨襥襲 襲襥襡襤襩襮襧 襴襯 襴襨襥 襳襩襭襩襬襡襲 襵襳襥襲襳褮 襗襥 襰襲襯襰襯襳襥 襴襨襥 襣襯襮襣襥襰襴 襜襄襡襴襡襢襡襳襥 襩襳 襣襡襣襨襥褢 襳襵襣襨 襴襨襡襴 襴襨襥 襤襡襴襡襢襡襳襥 襳襨襯襵襬襤 襳襨襡襲襥 襳襯襭襥 襳襩襭襰襬襥 襣襡襬襣襵襬襡襴襩襯襮 襴襯 襩襭襰襲襯襶襥 襴襨襥 襣襯襭襰襵襴襡襴襩襯襮襡襬 襳襰襥襥襤褮. ‧. n. er. io. sit. y. Nat. al. Ch. engchi. 襶. i n U. v.

(4) 誌. 謝. 首先我要感謝我的指導老師曾正男老師,讓我可以順利完成這篇論文。在碩一 的時候,修了老師的課,也接觸到襐襹襴襨襯襮這個程式語言,並且能重拾寫程式的信 心。另外,在我面對考試的挫敗時用聖經的話鼓勵我,讓我可以繼續完成學業。 在研究上,也從老師身上學到很多知識,並且老師在研究上的態度也是我的榜 樣,總是很專注並且很投入,不過最讓我佩服的還是老師的襩襤襥襡總是多到不行, 對於欠缺創意的我,幫助很大。我還要感謝教過我課的老師們,讓我在各領域的 知識上都有些長進,特別是實變函數論的授課老師陳天進老師,讓我知道我在許. 政 治 大. 多觀念上不是那樣得嚴謹,並且有許多的不足。. 立. 再來我要感謝神,一路帶領我,帶我進入這所學校,遇到很多不錯的老師,. ‧ 國. 學. 還有許多厲害的學長姐和同學,以及學弟妹。在我面臨許多挫折時,讓我不斷地 轉向祂,使我不信靠自己,能夠將這些都交在祂手中,最後這半年,更是經歷祂. ‧. 信心的帶領。我要感謝我的家人,一路上的支持與陪伴,特別是在決定要邁入第. sit. y. Nat. 三年的時候,對我的支持與鼓勵。也常常在我需要得時候,陪同我禱告。 我要感謝研究室的大家們,無論是教我許多寫程式技巧的葉長青學長,或是. io. n. al. er. 陪我一起讀實變的學長姐同學學弟妹們,還是一起念資格考的同學學弟們,以及. i n U. v. 常常陪我嘻嘻哈哈的大家。謝謝大家總是包容我,特別是最後壓力很大的一年,. Ch. engchi. 總是用大吼來發洩自己的情緒,我很抱歉,並且謝謝大家的耳朵傾聽我的聲音褡褡. 襶襩.

(5) 目. 錄. 論文口試委員審定書 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襩襩. 授權書 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襩襩襩. 中文摘要 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襩襶. 英文摘要 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襶. 誌謝 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襶襩. 治 政 目錄 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 大 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 立. 襶襩襩 襩襸. 圖目錄 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 襩襸. ‧. ‧ 國. 學. 圖 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 第一章、論文簡介 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. Nat. 褱褮褲. 襐襹襴襨襯襮 在大型靜態資料讀取技巧 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. er. sit. y. 為何使用襐襹襴襨襯襮 程式 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. io. 褱褮褱. al. n. v i n 褮 褮 褮 褮 褮 褮C 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 hengchi U. 褱褮褳. 論文佈局. 第二章、大資料計算相關數學回顧 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 褱 褲 褳 褴 褵. 褲褮褱. 亂數投影. 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 褵. 褲褮褲. 拆解褭合成多元尺度法 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. 褷. 第三章、巨大資料的襓襃襍襄襓方法 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褱 褳褮褱. 稀疏矩陣之儲存與運算 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褱. 褳褮褲. 巨大資料的降維方法 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褶. 褳褮褳. 巨大資料的襓襃襍襄襓技巧 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褷. 第四章、實驗結果 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褹 襶襩襩.

(6) 褴褮褱. 小矩陣亂數投影與亂數正交投影之比較 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褱褹. 褴褮褲. 襓襃襍襄襓與亂數正交投影之襓襃襍襄襓 於稀疏矩陣之比較 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褰. 褴褮褳. 大型網站資料建立使用者偏好關係圖實作 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褱. 第五章、結論 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褳褰 參考文獻 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褳褱 附錄襁:襐襹襴襨襯襮技巧分享 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褳褲 附錄襂:襐襹襴襨襯襮 操作襍襹襳襱襬 資料庫 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褳褶. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 襶襩襩襩. i n U. v.

(7) 目. 圖. 錄. 褴褮褱. 原資料的圖與各種方法的比較 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褴. 褴褮褲. 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮的結果比較 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褵. 褴褮褳. 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮並且作正交化的結果比較 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褶. 褴褮褴. 直接作襓襃襍襄襓降維與正交化作襓襃襍襄襓降維的相對誤差比較 褮 褮 褮 褮 褮 褲褷. 褴褮褵. 模擬褱褰褴褰褰筆資料作亂數投影正交化與襓襃襍襄襓的結果 褮 褮 褮 褮 褮 褮 褮 褮 褮 褲褸. 褴褮褶. 褱褰褴褰褰筆資料相似的群. 立. 政 治 大 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮 褮. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 襩襸. i n U. v. 褲褹.

(8) 第 一 章. 論文簡介. 由於網路發達之迅速,資料產生的速度以及使用方式已經超越人們的分析能力與 解讀能力。因此近年來大資料計算成為最熱門的話題,許多科學家與研究單位紛 紛投入研究資源在如何分析、解讀並利用這些持續成長,並且不容易掌握趨勢方 向的資料。美國總統歐巴馬也在褲褰褱褲 年宣佈褢襂襩襧 襤襡襴襡 襩襳 襡 襢襩襧 襤襥襡襬褢,美國將積極 投入兩億美元在大資料的計算研究,讓美國能取得大資料計算與應用的領先地 位。襛褱襝. 治 政 大 薦系統,客戶偏好分析,客戶未來行為預測等;在生物資訊方面有基因資料的處 立 理,特點基因褨襯襮襣襯襧襥襮襥褩的選取,以及基因調控研究;在財務金融方面有客戶關 現今最容易被人聯想到的大資料計算領域有網路服務中的雲端服務,即時推. ‧ 國. 學. 係處理,客戶下單訊息推薦,自營商選股組合等。這些都是熱門的大資料處理服 務,資料量不只龐大,並且資料在變數上經常浮動,並且持續成長,因此需要的. ‧. 數學與分析方法與以往有限的資料有很大的不同。. sit. y. Nat. 大資料計算大致可以分成幾個重要的部份,第一是資料處理,第二是重要訊 息處理,第三是建模,最後是預測。每一部份在大資料計算的領域都可以獨立再. io. n. al. er. 單獨出來成為一個討論的議題。由於資料的來源與應用方式廣泛,上述的分類可 能會因著重的應用領域不同而有不同的分類方式。. Ch. engchi. i n U. v. 我們把資料處理也歸類於大資料計算的領域有兩個原因,第一是資料處理關 乎效率問題,在讀取、搜尋與整理資料上演算法會直接影響獲取資料的速度,在 即時服務的應用上,獲取資料的速度影響效能甚巨。第二是我們延伸襊襯襨襮 襇襡襧襥宣 示褢網路即電腦褢的概念襛褲襝,資料庫也能抽象化成計算單元褨襃襐襕褩的一部分,這部 份是本論文的一個重點,旨在說明如何利用資料庫搜尋與暫存的特性來加速大型 矩陣的運算。我們將模擬入口網站的瀏覽資料,透過計算網路使用者瀏覽資訊的 紀錄,建構使用者之間的相關性,並且用快速襍襄襓 方法將使用者投影到二維的平 面上,之後我們可以利用二維平面上的距離來定義使用者喜好的相似度,這對產 品和廣告的推薦有很大的幫助。 我們將完整地介紹如何利用襐襹襴襨襯襮 程式處理資料,建制襳襰襡襲襳襥 大型矩陣的資 料型別,再利用資料庫的特性來計算大型矩陣的過程,展示大資料計算會面臨的. 褱.

(9) 問題,以及如何利用亂數投影褨襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮褩方法幫助襓襃襍襄襓 計算並推演其 計算量。希望透過這樣完整地介紹,讓有數學背景的讀者能分享到實作的經驗, 並且對於網路服務應用有初步的了解。. 1.1. 為 何 使 用 Python 程式. 在處理字串型的資料上襐襥襲襬 一直是被推薦的一套語言,它具有搜尋快速以及跨平 台的特性,對於資料整理可以得到很好的效果。然而襐襹襴襨襯襮 程式在處理字串型式 的資料上與襐襥襲襬 語言有相近的表現,除了跨平台與快速之外它有很好的社群在背. 政 治 大. 後支持這套語言的發展與套件開發,使得襐襹襴襨襯襮 很迅速地在計算科學、生物資. 立. 訊、電腦褳襄圖像、資料庫處理與維護以及遊戲領域上被廣泛接受。. ‧ 國. 學. 對於數學學門的學生與研究者來說,由於襐襹襴襨襯襮 語言的發明人襇襵襩襤襯 襶襡襮 襒襯襳襳襵襭 也是數學背景的緣故,襐襹襴襨襯襮 語法的邏輯很容易被數學背景的人所習. ‧. 慣。另外襐襹襴襨襯襮 在資料型別上有很大的彈性,因此對於大型網站資料的處理與分. y. sit. io. er. 非常重要的關鍵。. Nat. 析,新的資料型態不斷地產生並成長,襐襹襴襨襯襮 程式的彈性成為這套語言能被應用. 一般的程式語言常用的型別有整數,浮點數,布林值,字元,字串,矩陣. n. al. Ch. i n U. v. (或是陣列)。襐襹襴襨襯襮 中多了一些特別的型別使得在程式撰寫上,又多了一些彈. engchi. 性。首先,襐襹襴襨襯襮 中的串列(襌襩襳襴)等同於襍襡襴襬襡襢 中的異質陣列(襃襥襬襬),串列 裡的元素型態不需拘泥於同一種格式,串列又可視為陣列的一種擴充,只是在型 態上更具彈性。彈性有時是好事,但過度的彈性又會讓程式撰寫人員一不小心就 製造一個難以糾舉的臭蟲褨襢襵襧褩,因此在襐襹襴襨襯襮 中特別出現一種無法更改內容的 型別稱為元組(襴襵襰襬襥)。在襐襹襴襨襯襮中串列是用中括號襛褮褮褮 襝 表示,而元組是用小 括號褨褮褮褮 褩 表示。無論是串列或是元組,都是一種有序的型別,意思是可以用指 標褨襩襮襤襥襸褩 去讀取特定位置所儲存的資料。襐襹襴襨襯襮 的另一個特別的型別叫做辭典 集,辭典集是一個無序的資料型別,用大括號{褮褮褮 }來表示,並且其中所儲存的 資料都必須依附在一個金鑰底下,要讀取辭典內的資料必須用金鑰來開啟。例如 襁 褽 {褧襮襡襭襥褧褺 褧襊襯襨襮褧褬 褧襡襧襥褧褺 褱褸褬 褧襮襵襭褧褺 褧褹褸褷褵褱褰褶褵褧 }。要讀取襁 辭典內的資料,不 能用襁{褱}褬 襁{褱褺褲} 這種方式,因為辭典是一個無序的資料型別。襁 中的襮襡襭襥褬 襡襧襥 以及襮襵襭 我們稱為金鑰,金鑰後面加一個冒號褨褺褩,冒號後面所接的,就是存放在 褲.

(10) 這金鑰所保管的箱子裡的資料。 我們從串列以及辭典型別可以看到其變數的內容與資料長度彈性很大,正因 為這樣的彈性可以適應於大型的網站資料分析。我們會在下一節介紹一些襐襹襴襨襯襮 在大型靜態資料整理上的技巧,讓讀者看到襐襹襴襨襯襮 方便之處,並且介紹襐襹襴襨襯襮 在資料庫處理上的應用,讓讀者看見如何利用襐襹襴襨襯襮 程式與網站的資料庫溝通訊 息。. 1.2. Python 在 大 型 靜態資料讀取技巧. 政 治 大 在處理大型靜態資料時,通常這一類的資料都會用某種特定的格式儲存,避免 立 在檔案中出現過多為了分隔資料的分隔符號,使得原本龐大的資料量變得更無. ‧ 國. 學. 法處理。為了讓程式設計師可以知道哪一個位元所存放的資料是以何種型別儲 存並知道它佔據多少位元組,定義這種格式的檔案我們稱為襐襲襯褌襬襥。我們可以依. ‧. 照襐襲襯褌襬襥 對格式的描述,理解每一筆資料所在的位置,並利用程式從龐大的檔案. sit. y. Nat. 中讀出我們需要的資料。. er. io. 健保資料庫襛褳襝是全球僅有的全民醫療記錄並且可供台灣學者學術研究所用 的資料庫,它累積了台灣兩千多萬人近十二年的病歷資料。 我們以健保資料. n. al. Ch. i n U. v. 庫褹褳 年以後的門診處方及治療明細檔(襃襄檔)為例, 依照襐襲襯褌襬襥襛褴襝的說明,. engchi. 資料起始位置褱到位置褶 是記錄發生費用的年月,格式為襙襙襙襙襍襍,資料形態 為襃(襣襨襡襲襡襣襴襥襲 亦即字元)。所以我們可以用襣襨襡襲 的資料型別,將位元褱 到褶 的 資料分別存放到一個長度為褶 的字串中。例如:褲褰褱褱褰褸,我們就知道發生費用的 時間是褲褰褱褱年褸 月。起始位置第七個位元是存放申報類別,資料形態也是襃,內容 為字元褱(代表送核)或是字元褲(代表補報)。因此我們只要從檔案的第褷 個位 元讀出資料,內容就應該是褱 或是褲 。再來的第三個資料格式是醫事機構代號,佔 有褳褴 個位元,接下來是申報日期,佔有褸 個位元。一筆襃襄 資料共有褳褷 個變數, 共佔據褳褰褰個位元,因此第褳褰褱個位元開始,就是另外一筆襃襄 資料。這樣在每一 筆資料中的變數與變數之間就無須再用分隔符號來區隔變數,可以達到最精簡空 間又容易讀取與儲存目的。 當我們使用襐襹襴襨襯襮 來讀取大型靜態資料時,有一些很值得分享的技巧值得分. 褳.

(11) 享,我們放在附錄襁供讀者參考。而藉由襐襹襴襨襯襮 操作襍襹襳襱襬 資料庫,在附錄襂也 有簡單的操作供讀者參考。. 1.3. 論文佈局. 第一章主要是引起讀者對大資料計算的興趣,第一節介紹最適合處理大型資料 的襐襹襴襨襯襮 程式語言;第二節介紹如何利用襐襹襴襨襯襮 程式的特性,使用最少的資源 與最高的效能達到靜態大型資料整理的目的;第三節為本節。. 政 治 大 節介紹網路推薦系統主要會使用到的快速算法,第一節我們介紹亂數投影,這是 立 一個當矩陣的大小過大時經常用來降低維度的方法;第二節我們介紹襓襃襍襄襓 方 第二章我們回顧一些在大資料計算上重要的數學定理與觀念,並在之後的小. ‧ 國. 學. 法,這是傳統襍襄襓 方法的加速版,對於我們作網路推薦系統中如何計算特徵空間 有很大的幫助。. ‧. 第三章我們要介紹當資料過大以至於無法用矩陣的方式來儲存時,我們要如. Nat. sit. y. 何計算其特徵值或是計算襍襄襓。我們以襳襰襡襲襳襥 矩陣儲存方式的特性,撰寫襳襰襡襲襳襥. io. er. 矩陣的右乘法與左乘法,並計算其計算量。當乘法可行時,介紹如何利用修正亂 數投影方法,透過正交亂數投影法將資料投影在估計的襳襰襡襣襥 上,使得超大型矩. n. al. 陣的襓襃襍襄襓 變成可計算。. Ch. engchi. i n U. v. 第四章我們會以模擬資料來展示我們的方法是否能正確的將相似行為的使用 者投影到靠近的位置,而將行為差異很大的使用者投影到距離較遠的位置,來說 明我們的方法適合應用在大型網站上的推薦分析。 第五章根據第四章的實驗結果,下結論襐襹襴襨襯襮是適合作網路資料分析的程式 語言並且利用襐襹襴襨襯襮語言可以在資料庫作降為的運算,因此資料庫是一個資料預 先降維的快取空間。 而正交亂數投影可以改善亂數投影的誤差,配合這樣的結 果,所以正交亂數投影與襓襃襍襄襓可以協助大型網路資料分析。 而在附錄襁以及附錄襂中介紹一些襐襹襴襨襯襮的使用技巧,以及如何使用襐襹襴襨襯襮 直接讀取與寫入襍襹襳襱襬 資料庫。. 褴.

(12) 第 二 章. 大資料計算相關數學回顧. 在大資料計算中計算快速與精準是被同時要求的兩個要件,然而這兩個要件基本 上是互相違背的。為了要計算的精準,所以會花費更多的時間。為了減少計算的 速度,可能又會傷害了計算的精準度。因此如何拿捏尺度,便是一項藝術。然而 在不同的應用領域上對要求的計算時間與精準度也會有所不同。例如生物資訊方 面,準確度的要求會勝於速度的要求。因為生物實驗資料的取得,經常是以天或 周甚至是月為單位的。所以,花了三個月取得的生物資料,實驗室並不在乎分析 人員是花費一個星期還是兩個星期才把數值結果計算出來。這時計算的精準度便. 政 治 大 差異通常不會嚴重影響到使用者的觀感,使用者更在乎的是使用媒體的流暢度。 立. 遠比速度來的重要。然而在網路應用服務上,由於訊息氾濫的緣故,訊息的些微. ‧ 國. 學. 因此,這類應用服務要求的速度表現會遠比精準度來的重要。 大資料計算當然會希望在速度與準確度上都能同時提昇,因此我們會對於一. ‧. 些可透過調整計算時間來達到不同準確度的方法特別感興趣。以下我們要介紹. y. Nat. 兩個很有機會在大資料計算上用到的數值方法。第一個是襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮 演算. sit. 法,這是計算大型矩陣需要降低維度時經常用到的方法,第二是拆解褭合成多元尺. n. al. er. io. 度法褨襓襃襍襄襓褩,這是一個可以快速作到傳統襍襄襓 的方法。. 2.1. 亂數投影. Ch. engchi. i n U. v. 給 定 一 個 矩 陣A ∈ Mm,n 褨R褩 如 果 我 們 可 以 對A 矩 陣 實 施 奇 異 值 分 解 (襓襖襄褺 襓襩襮襧襵襬襡襲 襶襡襬襵襥 襤襥襣襯襭襰襯襳襩襴襩襯襮), A 褽 U 褆V T , 其中U ,V 是正交矩陣(襯襲襴襨襯襮襯襲襭襡襬 襭襡襴襲襩襸),褆 是一個對角矩陣,並且對角線 的值都大於等於零σ1 ≥ σ2 ≥ · · · ≥ 褰。 我們令   | |     U 褽  u1 · · · um  ,   | |. 褵.

(13) . σ 褰  1  褆 褽  褰 σ2  以及. . . 褮褮褮. |. |.   V 褽  v1 · · ·  |.    . .   vn   |. 當我們希望用更精簡的矩陣計算來取代直接對A 矩陣作運算時,我們可以選取一 個一個r 使得 r < m褬 r < n。並且定義   | |     Ur 褽  u1 · · · ur  ∈ Mm,r 褨R褩,   | |. 政 治 大. . 褮褮褮. io. |   Vr 褽  v 1 · · ·  |.   vr  ∈ Mn,r 褨R褩  |. n. al. |. Ch. 並且定義. . er. . sit. y. σr.    ∈ Mr 褨R褩 . ‧. Nat. 以及. . σ1.   褆r 褽  . 學. ‧ 國. 立. engchi. i n U. v. Ar 褽 Ur 褆r VrT 作為A 矩陣的逼近矩陣。 這樣當我們要計算矩陣A 和其他向量x 的乘積時,我們 計算Ur ∗ 褆r ∗ VrT ∗ x 來取代Ax。 當矩陣很大時,襓襖襄 分解本身就是一個計算量很大的問題,我們希望能降低 矩陣的維度,又希望能保留矩陣的主項。這時候如何對矩陣A 的主項作估計就非 常重要。 亂數投影(襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮)就是一個常用的方法,若A ∈ Mm,n 代 表A 是一個n 維資料,有m 個樣本。我們在A 矩陣的右邊乘上一個R ∈ Mn,r , 其 中R 的每一個元素是亂數產生的,AR 褽 A ∗ R 就是一個從維度n 降到維度r 的 資料。關於襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮 降維時對資料的影響,我們可以參考襆襲襡襤襫襩襮 襡襮襤 襍襡襤襩襧襡襮 在褲褰褰褳 年的作品襛褵襝。 褶.

(14) 一般來說,我們作降維度時是希望資料透過一個線性轉換後能盡量保值其結 構,例如先前我們用Ar 取代A 矩陣,因為襓襖襄 的特性,前面的向量對應到的會 是奇異值較大的部份,因此它是主項。雖然我們把r 褫 褱 項之後的向量給省略了, 但因為省略的部份對應的奇異值較小,對整體結構影響的程度也較小。 然而亂數投影卻沒有這樣的好處,嚴格說來亂數投影也不算是投影,因為我 們並不能保證R 的每一列是互相正交的。但當n 夠大時,兩個亂數產生的向量會 自然具有正交性,所以這部份我們可以姑且接受A 乘上R 之後像是個投影。另外 一個問題是我們並不能控制R 的作用會分佈在A 的 襲襯襷 襳襰襡襣襥 的主項上。除非我 們特別挑選過,不然R 還是有很高的機率把資料投影到不是主項展開的子空間。. 政 治 大. 下一章我們會對此部份做出修正,讓亂數投影多投影一些分量在我們希望的空間. 立. 學. ‧ 國. 上。. 拆 解 -合 合成 多 元 尺 度 法. 2.2. ‧. y. Nat. 多元尺度法(襍襄襓褺 襍襵襬襴襩襤襩襭襥襮襳襩襯襮襡襬 襓襣襡襬襩襮襧)是一個把相對距離關係的資料轉換. sit. 成低維度座標表示的方法,這方法最早是用在如何把三維的地球上的城市與城市. n. al. er. io. 之間的距離轉換成二維的地圖。多元尺度法希望高維度資料彼此間的距離,轉換. i n U. v. 成低維度座標表示時能繼續保持資料的結構。這個方法經常被使用在電腦圖學. Ch. engchi. 上,為了讓人們可以用視覺理解的方式來解讀資料。襛褶襝. 傳統的多元尺度法主要是使用差異矩陣(矩陣褨i, j褩 位置的值代表第i 個物 件和第j 個物件間的距離)或是相似矩陣(矩陣褨i, j褩 位置的值代表第i 個物件和 第j 個物件間的相似度)用襄襯襵襢襬襥 襣襥襮襴襥襲襩襮襧 的方法轉換成另外一個矩陣,然後 再對該矩陣作襓襖襄 方解,因為該矩陣是對稱矩陣,所以我們可以用襓襖襄 的結果 對襄襯襵襢襬襥 襣襥襮襴襥襲襩襮襧 之後的矩陣開方根,開方根後得到的矩陣取前面的r 行,就是 資料在r 維空間上的座標表示。以下是詳細的傳統多元尺度的數學推導過程。 假設 X 是一個 p 乘N 的矩陣,其中N 是樣本數的個數,p 是資料的維度。 X−. 1 X 褱襟 褱襟 T N. 相當於把X 的資料平移到質心為褰。 令 D 褽 X T X 是X 自己的直. 積,我們定義褱襟 是一個N 乘褱 的向量,它的每一個元素都是褱。 我們定義一個B 矩陣為. 褷.

(15) T    褱 襟 襟T 褱 襟 襟T X − X 褱褱 B 褽 X − X 褱褱 N N 褱 襟 襟T 褱 襟 襟T 褱 褽 D − D褱褱 − 褱褱 D 褫 2 褱襟 褱襟 T D褱襟 褱襟 T N N N 褽 D − D褖r − D褖c 褫 D褖g ,其中 D褖r 褽. 1 D褱襟 褱襟 T N. 是 D 矩陣沿著列方向作平均所成的矩陣(亦即給定D褖r 的. 某一列,其每一元素都相等,都是D 在該列上的平均值), D褖c 褽 矩陣沿著行方向作平均所成的矩陣,以及 D褖g 褽. 1 襟 襟T 褱褱 D褱襟 褱襟 T N2. 1 襟 襟T 褱褱 D N. 是D. 是 D 矩陣作總平均. 政 治 大 的過程我們稱為 襤襯襵襢襬襥 襣襥襮襴襥襲襩襮襧。 若我們定義一個新矩陣 H 立. 所成的矩陣(D褖g 是一個常數矩陣,其值為D 矩陣的總平均)。 從D 矩陣轉變乘 D − D褖r − D褖c 褫 D褖g. H褽I−. 褱 襟 襟T 褱褱 , N. 學. ‧ 國. 為. B 矩陣可以簡單寫成B 褽 HDH,由於D 矩陣是對稱矩陣,B 矩陣也會是對稱。. ‧. 因為B 矩陣為對稱矩陣,所以B 的襓襖襄 分解可以寫成. Nat. al. y. sit er. io. 因此,我們有. B 褽 Z褆Z T 。. n. √ 1 褱 B 褽 Z褆 2 P T 褽 褨X − X 褱襟 褱襟 T 褩T , N. Ch. engchi. i n U. v. 這裡的P 矩陣是某一個襵襮襩襴襡襲襹 襭襡襴襲襩襸,在實作上我們經常選取P 褽 I 來取得襍襄襓 的結果,不同的P 只是把座標作一個旋轉而已,不會影響物件和物件的相對 位置。 這個分析一開始使用的D矩陣還不是差異矩陣,真正的差異矩陣是定義 p 成di,j 褽 褨xi − xj 褩T 褨xi − xj 褩,這時D.2 褽 −褲B,其中D.2 代表D 的每一個元素自 己平方。所以,當D 是名符其實的差異矩陣時,我們先把D 矩陣的每個元素自 己平方後作襄襯襵襢襬襥 襣襥襮襴襥襲襩襮襧 ,然後在乘上− 21 ,然後再作襓襖襄取出B 的開方,就 是襍襄襓 的結果。 因為襓襖襄 的結果是依照奇異值的大小排序的,所以當我們要把 資料用二維的形式呈現時,我們只取Z 的前兩行與褆 的左上角褲 乘褲 的子矩陣來 計算二維的座標表示。若需要更高維度的表示就依此類推增加非零的奇異值與行 數。 由於傳統的襍襄襓 方法最主要的過程是襓襖襄,這在矩陣的大小很大時會變得不 可施行,因為襓襖襄 的計算量是O褨N 3 褩 ,所以當N 很大時,例如褶 萬,現今的機器 褸.

(16) 大概都無法處理褳 次方的計算量,因此我們需要可以因應大資料計算的多元尺度 法。拆解褭合成多元尺度法(襓襃襍襄襓褺 襓襰襬襩襴褭襡襮襤褭襣襯襭襢襩襮襥 襍襄襓)襛褷襝就是傳統多元 尺度法的一個改良,它的核心精神是把大資料拆解成好幾個重疊的子集合,先針 對每一個子集合的資料作傳統的多元尺度法,然後再利用重疊的部份去計算如何 把兩個不同的座標表示,合成為相同的座標表示。拆解資料,然後對個別的子集 合作傳統多元尺度法是容易的,需要介紹的是如何把不同的座標表示,合成回一 個座標表示。 若假設X1 和 X2 是兩個子集合重疊的部份分別用不同子集合群體計算傳統多 元尺度法得到的座標表示。因此存在一個仿射映射褨襡褎襮襥 襭襡襰襰襩襮襧褩,可以將X1 座. 政 治 大 褖 褱襟 為了得到襡褎襮襥 襭襡襰襰襩襮襧 的內容我們應用襑襒 分解在 X − X 立. 褖1 和 X 褖 2 分別是 X1 和 X2 行向量的平均向量。 標表示映到X2 的座標表示。 令 X 1. 1. T. 褖 2 褱襟 T 上。 和 X2 − X. ‧ 國. 可。. 學. 做平移是為了讓兩個重疊的資料質心都是零,這樣我們只要專注在旋轉的部份即. ‧. 褖 1 褱襟 T 褽 Q1 R1 以及 X2 − X 褖 2 褱襟 T 褽 Q2 R2 。 因為 X1 襑襒 分解後我們得到 X1 − X 褖 1 褱襟 T 和 X2 − X 褖 2 褱襟 T 這兩個座標表示的差 和 X2 本質上是相同的資料,因此X1 − X. Nat. sit. y. 別是旋轉。 因此,當沒有誤差干擾的情況下 R1 和 R2 應該是一樣的矩陣(最多. al. er. io. 在對應的行上是異號的)。 假設我們調整了R1 和 R2 的對角線的符號,對應Q2 的. n. 該行向量也要作同步的調整。. Ch. 若 Q2 經過調整後,我們有. engchi. i n U. v. 褖 1 褱襟 T 褩 褽 QT2 褨X2 − X 褖 2 褱襟 T 褩。 QT1 褨X1 − X 進一步我們可以將上式寫成 褖 2 褱襟 T 褩 褫 X 褖 1 褱襟 T 。 X1 褽 Q1 QT2 X2 − Q1 QT2 褨X 褖2 褫 X 褖1。 有 因此,旋轉矩陣的部份就是 U 褽 Q1 QT2 並且平移向量為 b 褽 −Q1 QT2 X 了旋轉矩陣和平移向量,我們就有把X2 轉換成X1 的襡褎襮襥 襭襡襰襰襩襮襧。 雖 然 為 了 計 算 襡褎襮襥 襭襡襰襰襩襮襧 使 用 到 襑襒 分 解 , 而襑襒 分 解 的 計 算 量 是 O褨k 3 褩, 這裡的k 是 X1 和 X2 的行數,亦即兩個重疊的集合重疊部份的元素個 數。 因此,這 O褨k 3 褩 的計算量是受限於兩個重疊的集合重疊部份的元素個數,通 常這數字是遠比原來的資料大小要小得多,雖然是三次方的計算量,但對整體計 算而言卻是小數。以下是襓襃襍襄襓 的計算量分析。 褹.

(17) 假設我們有 N 個樣本在資料裡,我們將這N 個樣本拆解成 K 群有重疊的子 集合,其中 NG 代表每一個子集合內所含元素的個數, NI 代表重疊的區域的元 素個數, 因此,我們有下列關係。 KNG − 褨K − 褱褩NI 褽 N 或寫成 K褽. 褨N − NI 褩 褨NG − NI 褩. 。 對於每一個子集合來說,計算傳統襍襄襓 需要 O褨NG3 褩 的計算量,為了合併每. 政 治 大. 一個子集合計算出來 的座標表示,合併時在兩個子集合間需要 O褨NI3 褩 的計算. 立. 量。 假設每一筆資料的維度是 p,並且每一個 NI 的最小值是 p 褫 褱,為了方便起. ‧ 國. 學. 見,我們令 NG 褽 αp 其中 α > 褲。 因此整套的襓襃襍襄襓 的計算量為. ‧. N − αp N −p O褨α3 p3 褩 褫 O褨p3 褩 ≈ O褨p2 N 褩. 褨α − 褱褩p 褨α − 褱褩p. 加法前面是計算K 群襍襄襓 需要的計算量,後面那一項是計算連結 K − 褱 個座標. sit. y. Nat. 時需要的計算量。. n. al. er. io. √ 當 p << N 時,計算量 O褨p2 N 褩 會遠小於 O褨 N N 褩,這樣的計算量會比當今. i n U. v. 最快速的襍襄襓 方法 由襍襯襲襲襩襳襯襮 襥襴 襡襬褬 於褲褰褰褳 年提出的最快速的襍襄襓 方法襛褸襝都還. Ch. engchi. 要快速 。 因此,我們會推薦襓襃襍襄襓 方法在大資料計算上。. 褱褰.

(18) 第 三 章. 巨大 資 料 的 SCMDS方 方法. 本論文所談論的巨大資料,是指資料大到無法用矩陣表示的方式儲存,並且變數 與樣本數的數目是持續增加的,特別在網路應用服務時,這類的資料是以稀疏矩 陣(襓襰襡襲襳襥 襭襡襴襲襩襸)的方式來表示可以達到最節省記憶體的方式。 這一章的第一 節我們要介紹如何利用襐襹襴襨襯襮 程式以稀疏矩陣的方式來儲存資訊,並且做到和正 常矩陣相同的矩陣與向量運算;第二節我們介紹在襓襰襡襲襳襥 矩陣格式下如何做到降 維的動作;第三節我們介紹如何在襓襰襡襲襳襥 格式的資料上做襓襃襍襄襓。. 學. ‧ 國. 3.1. 政 治 大 稀疏矩陣之儲 立存與運算. 假 設 一 個 大 型 網 站 上 有N 位 使 用 者 , 網 站 內 有M 個 可 供 讀 者 點 擊 的 內 容 (襣襯襮襴襥襮襴)。N 與M 都隨著時間在增加。我們令A 是記錄此網站使用者在某一. ‧. 個時間區間的瀏覽歷史資料表,A襛襩襝 代表第i 位使用者的紀錄,A襛襩襝 的內容是一個. sit. y. Nat. 辭典集,亦即. al. er. io. A襛襩襝 褽 {襪褺tj |第i 位使用者曾經點擊過第j 筆內容,∞ ≤ | ≤ M,. n. tj 是使用者i 曾經點擊過內容j 的次數,tj ∈ N }.. Ch. engchi U. v ni. 褨褳褮褱褩. 辭典集裡面的每一個元素是一個由褢褺褢 分開的數對,前者記錄曾經點擊過的項目 的指標,後者記錄曾經點擊過該項目的次數。若我們在襐襹襴襨襯襮 程式中用串列型 變數A 記錄每一個辭典集,呼叫出第i 位使用者的點擊記錄正好就是A襛i襝,要呼 叫出A襛襩襝 的第j 個項目的點擊數字,正好就是A襛i襝襛j襝,亦即程式裡的A襛i襝襛j襝 正好 就是稀疏矩陣Ai,j 的元素。並且若我們要修改A襛襩襝 的第j 筆資料內容,我們直接 用A襛i襝襛j襝 褽 x 來修改。這樣使用串列型別和辭典集型別來記錄稀疏矩陣的方式, 可以讓讀取和修改稀疏矩陣的方式和一般矩陣的操作方法一樣。襛褹襝我們特別用花 體的英文字母代表資料存在資料庫中,正體的英文字母代表資料存在襒襁襍裡。 褱褮 稀疏 矩 陣 的 加 法 我們令ni 為辭典集A襛襩襝 的元素個數,在襐襹襴襨襯襮 裡 ni 褽 襬襥襮褨A襛i襝褩。 首先我們 定義兩個資料表的加法。在使用意義上,若A 是第一天的點擊記錄, B 是 褱褱.

(19) 第二天的點擊記錄,我們想要整併這兩天的點擊記錄時,我們便希望能計 算A 褫 B,對於每一個襕襩襤 i 來說我們定義兩個辭典集的加法為 A襛襩襝 褫 B襛襩襝 褽 {襪褺tu |. tu 褽 襁襛襩襝襛襪襝褫襂襛襩襝襛襪襝 襩襦 j ∈褨襁襛襩襝褮襫襥襹襳褨褩 ∩ 襂襛襩襝褮襫襥襹襳褨褩褩褻 tu 褽 襁襛襩襝襛襪襝 襩襦 j ∈褨襁襛襩襝褮襫襥襹襳褨褩 − 襂襛襩襝褮襫襥襹襳褨褩褩褻 襡襮襤 tu 褽 襂襛襩襝襛襪襝 襩襦 j ∈褨襂襛襩襝褮襫襥襹襳褨褩 − 襁襛襩襝褮襫襥襹襳褨褩褩},褨褳褮褲褩. 若i 小於等於 A 或 B 的長度; A襛襩襝 褫 B襛襩襝 褽 A襛襩襝, 若B襛襩襝 褽 ∅;. A襛襩襝 褫 B襛襩襝 褽 B襛襩襝, 治 政 大. 立. 若A襛襩襝 褽 ∅。 A 褫 B 即對每一個i 都做一次上述加法,這樣我們就可以將. ‧ 國. 學. 兩段不同時間發生的資料表整併成一個資料表。計算兩個稀疏矩陣加法 的襐襹襴襨襯襮 程式如下:. ‧. def dict_plus(A,B): #type(A) is list,type(A[i]) is dict. y. Nat. al. n. C=copy(A). er. io. from copy import copy. Ch. engchi. for i in range(len(A)): Ak=A[i].keys(). sit. #type(B) is list,type(B[i]) is dict. #Aks=set(Ak) for Bk in B[i].keys(): if Bk in Ak: C[i][Bk]+=B[i][Bk] else: C[i][Bk]=B[i][Bk] if len(A)<len(B): for i in range(len(B)-len(A)): C.append(B[len(A)+i]). return C 褱褲. i n U. v.

(20) 褲褮 稀疏 矩 陣 右 乘 向 量 要能夠進行稀疏矩陣的運算,在不把矩陣全部展開的情況下,我們一定要有 矩陣右乘向量的功能襛褱褰襝。要在電腦裡開一個很長的向量並不困難,所以我 們直接用正常的陣列方式來儲存。令x襛i襝 為 x 的第i 個元素我們定義y 褽 A襸 為 X. y襛j襝 褽. A襛j襝襛i襝 ∗ x襛i襝。. i∈襁襛襪襝褮襫襥襹襳褨褩. 稀疏矩陣的右乘非常精簡,只要把金鑰(襫襥襹襳)抓出來計算即可。對應 的襐襹襴襨襯襮 程式如下:. 政 治 大 #A:1xN type(A) is list, type(A[i]) is dict 立 #Al:1xN type(Al) is list w.r.t A. def Ax(A,x):. ‧ 國. 學. #x: Nx1 type(x) is list #Let x be 1xN. ‧. Al=len(A). y. Nat. t=[0 for j in range(Al)]. io. sit. for i in range(Al):. n. al. er. tmpA=A.pop() j=len(A)-1. Ch. engchi. for k in tmpA.keys():. i n U. v. t[j]=t[j]+(x[k])*(tmpA[k]) return t 在這裡用到附錄襁的後端拋值褨褮襰襯襰褨褩褩,為了減少記憶體的使用。 定理 若A 是一個高度為N 的稀疏矩陣且A襛i襝 的平均長度為n,n << N , 則Ax 乘法的計算量為O褨N 褩。 證明 : 令 ni 等於A襛i襝 的元素個數,因為 X y襛j襝 褽 A襛j襝襛i襝 ∗ x襛i襝。 i∈襁襛襪襝褮襫襥襹襳褨褩 所以得到y襛i襝 需要的計算量為ni 。因此計算Ax 的總計算量為 N X i=1. N 褱 X ni 褽 N 褨 ni 褩 褽 N n 褽 O褨N 褩。 N i=1. 褱褳.

(21) 上述定理說明,若A 每一列的長度遠小於A 的高度時,計算稀疏矩陣的計 算量是線性的。為了爭取計算速度,若N 還是過大使得線性的計算量仍舊 無法滿足即時服務時,因為計算每一個y襛i襝 都是獨立的,因此我們可以用多 核心計算的方式來加速這一個乘法運算。 褳褮 稀疏 矩 陣 左 乘 向 量 接下來我們定義稀疏矩陣左乘向量的運算,因為資料結構的緣故,左乘的程 式沒有右乘直覺。若y 褽 xT A y襛i襝 褽. X. x襛j襝A襛j襝襛i襝,. 政 治 大 j∈Ii. 其中. 立 I 褽 {j|i ∈ A襛j襝.keys褨褩}。 i. ‧ 國. 學. 對應的襐襹襴襨襯襮 程式如下:. type(A) is list, type(A[i]) is dict. Nat. y. #A:1xN. ‧. def xA(A,x):. al. n. d=dict(). er. io. #x:1xN. sit. #y : 1xN type(x) is list. Al=len(A). Ch. engchi. i n U. v. for i in range(len(x)):. tmpd=[0 for j in range(len(x))]. #set initial tmpd #A[i]*x[i]. tmpA=A.pop() j=len(A)-1 for k in tmpA.keys(): tmpd[k]=tmpd[k]+(x[j])*(tmpA[k]) d[i]=tmpd. #d={i:tmpd_i}. t=[0 for i in range(len(x))] for k in d.values(): for i in range(len(k)): t[i]=t[i]+k[i] 褱褴. #set initial t.

(22) return t 定理 若A 是一個高度為N 的稀疏矩陣且A襛i襝 的平均長度為n,n << N , 則xT A 乘法的計算量亦為O褨N 褩。 褴褮 稀疏 矩 陣 的 成 對 距 離 矩 陣 稀疏矩陣若要計算成對距離矩陣(襰襡襩襲褭襷襩襳襥 襤襩襳襴襡襮襣襥 襭襡襴襲襩襸),由於每一行 的資料多半是無需記錄的零資料,因此在計算成對距離矩陣時的算法也略有 不同。對於正常的矩陣A ∈ Mm,n 褨R褩 來說,其成對距離矩陣D 的定義為 v u n uX Di,j 褽 t 褨Ai,k − Aj,k 褩2 。. 立. 政 治 大 k=1. k∈Ii∼j. k∈Ii∧j. k∈Ij∼i. sit. y. Nat. 其中. ‧. ‧ 國. 學. 計算稀疏矩陣的成對距離矩陣D 時,Di,j 定義如下 s X X X Di,j 褽 A襛i襝襛k襝2 褫 褨A襛i襝襛k襝 − A襛j襝襛k襝褩2 褫 A襛j襝襛k襝2 ,. io. al. er. Ii∼j 褽 {k|k ∈ 襁襛襩襝褮襫襥襹襳褨褩 襡襮襤 k 6∈ 襁襛襪襝褮襫襥襹襳褨褩},. n. Ij∼i 褽 {k|k ∈ 襁襛襪襝褮襫襥襹襳褨褩 襡襮襤 k 6∈ 襁襛襩襝褮襫襥襹襳褨褩}, 以及. Ch. engchi. i n U. v. Ii∧j 褽 {k|k ∈ 襁襛襩襝褮襫襥襹襳褨褩 襡襮襤 k ∈ 襁襛襪襝褮襫襥襹襳褨褩}。. 對應的襐襹襴襨襯襮程式如下褺. def distance(A): Al=len(A) D=[[0 for x in range(Al)] for y in range(Al)] for i in range(Al): tmpA=A.pop() tmpj=len(A)-1 for j in range(len(A)): InterA=set(A[j].keys()).intersection(set(tmpA.keys())) 褱褵.

(23) disjA1=set(A[j].keys())-InterA. # j’s key not in tmpA.keys(). disjA2=set(tmpA.keys())-InterA. # tmpA’s key not in j.keys(). tmpDij=0 for k in disjA1: tmpDij+=(A[j][k])**2 for k in disjA2: tmpDij+=(tmpA[k])**2 for k in InterA: tmpDij+=(A[j][k]-tmpA[k])**2. 政 治 大. D[j][tmpj+1]=tmpDij D[tmpj+1][j]=tmpDij. 立. ‧ 國. 學. return D. ‧. 上述的運算和正常的矩陣運算非常類似,特別把有值的指標寫成集合的方式,是 為了強調在即時運算時,我們不能浪費時間在沒有意義的搜尋上面。這樣才能真. Nat. er. io. sit. y. 正做到線性的計算複雜度。. a. n. 3.2. 巨 大 資 料 的 降l 維 C方法. hengchi. i n U. v. 假設一個矩陣型的資料A ∈ Mm,n 褨R褩,其中m 是樣本數,n 是樣本資料的維度。 若維度過大時,我們要對樣本做分類或分析時會遇上維度咒詛的限制,降低分析 的精準度,因此有經驗的分析者都會在分析高維度資料前做降維的動作。先前我 們介紹了亂數投影法如何應用在降低資料維度。這一節我們說明如何在巨大的稀 疏矩陣上套用亂數投影法。 由於亂數投影可能會因為亂數選取基底的緣故,造成資料的結構扭曲(我們 將在下一個章節顯示這個性質),我們會修正亂數投影的過程,讓使用亂數投影 降維的結果,與原來的資料結構更加近似。 我們給一個亂數矩陣R ∈ Mr,N ,其中 r 是我們想要達到降維的維度,每一 個Ri,j 都取值於襛褰, 褱襝區間的均勻分佈。我們令P 褽 RA,再將P T 對行向量做正交 褱褶.

(24) 化得到Q ,這裡的Q 是襯襲襴襨襯襮襯襲襭襡襬。接著我們令Ar 褽 AQ,則Ar 即為降維之後的 矩陣。 在這裡R ∈ Mr,N 使用到稀疏矩陣的左乘向量,將P T 正交化這裡會用到 12 r2 N 的計算量,這也是O褨N 褩 的水準。再計算AQ 也是rN 的計算量,因此,稀疏矩陣 的降維都是O褨N 褩的計算量。 這裡的降維方法和亂數投影的方法差別在於亂數投影時,矩陣Q 是未經正交 化的亂數矩陣,而我們的Q 矩陣是透過亂數左乘矩陣A 之後,得到矩陣A 的襲襯襷 襳襰襡襣襥 主項後,再正交化得來。. 政 治 大 行襓襃襍襄襓計算。這是因為要藉由亂數正交投影解決有未確定值的因素,在第四章 立. 一開始我們會先選擇在資料庫上作亂數正交投影,之後載下資料再進. 實驗會再詳述。. 巨 大 資 料 的 SCMDS技 技巧. Nat. y. ‧. ‧ 國. 學. 3.3. sit. 若一個大矩陣A ∈ Mm,n 褨R褩 利用襓襃襍襄襓 降維,我們會先亂數將A 的列向量重. er. io. 排 , 在 假 設A 的 秩 (襲襡襮襫) 小 於r 的 情 況 下 , 給 定NI > r 以 及 NG 褽 褳NI 作. al. n. v i n Ch > r 的條件,可以保證經過襓襃襍襄襓 e n g c降維後的資料結構與降維前的結構相 hi U. 為襓襃襍襄襓 的參數,其中NG 是每一個分群的個數,NI 是群與群交集的元素個 數。NI 似。. 細部的做法是,將分群後的矩陣個別計算其成對距離矩陣,然後對此成對 距離矩陣計算傳統襍襄襓 方法,然後用交集的元素的襍襄襓 坐標,利用襑襒 分解取 得襁褎襮襥 襭襡襰襰襩襮襧 的旋轉矩陣和平移向量,然後將兩個坐標合併成一個坐標系。 同樣的過程在巨大資料時,我們可以用稀疏矩陣計算成對距離矩陣的方式, 來取得每一個分群的成對距離矩陣。其餘襓襃襍襄襓 步驟皆與大矩陣的襓襃襍襄襓 步 驟相同。然而這裡有一個難題,就是如何估計巨大資料所對應的稀疏矩陣的秩 (襲襡襮襫)。即使每一列的稀疏矩陣紀錄的長度是很小的,我們也無法貿然相信, 它的秩是小的。例如,襩襤襥襮襴襩襴襹 襭襡襴襲襩襸,用稀疏矩陣表示每一列只有一個元素非 零,然而它卻是滿秩褨襦襵襬襬 襲襡襮襫褩。. 褱褷.

(25) 我們也知道,若NI 的設定小於矩陣的秩,則襓襃襍襄襓 會荒腔走板。因此,如 何能穩定地在巨大資料上使用襓襃襍襄襓 降維,製作出物件彼此的關係圖,是我們 介紹亂數投影的原因。透過預先使用亂數投影讓矩陣由M × N 降至 M × r,這部 分的結構會稍微損失一些,但大部分的結構仍舊被保持,然後再利用襓襃襍襄襓 選 取NI > r 來進行不會損失結構的降維,來達到巨大矩陣降維的目的。我們將在下 一章比較不使用亂數投影與使用亂數投影的襓襃襍襄襓 的差別,讓讀者知道對無法 估計正確秩的稀疏矩陣,亂數投影有其必要性。. 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. 褱褸. i n U. v.

(26) 第 四 章. 實驗結果. 本章將介紹電腦模擬實驗的結果,第一節我們在小矩陣上比較亂數投影與正 交亂數投影的差別,說明正交亂數投影的必要性;第二節我們在稀疏矩陣上 比較襓襃襍襄襓 降維與混合正交亂數投影之襓襃襍襄襓 降維,說明混合正交亂數投影 之襓襃襍襄襓 降維可以得到較好的穩定性;第三節我們介紹如何應用混合正交亂數 投影的襓襃襍襄襓 降維法在大型網站建立使用者偏好關係圖的過程。. 4.1. 治交投影之比較 小矩陣亂數投影與 亂數正 政 大. 立. ‧ 國. 學. 首先我們先製作一個小樣本的模擬資料,共計褴褰褰個樣本,每一個樣本都是維 度褲褰褰的資料。首先定出前兩個維度,有褵褰筆資料是以褨褰褬褰褩為圓心並且半徑為褱褰的 資料,有褵褰筆資料是以褨褰褬褴褩為圓心並且半徑為褱褮褵的資料,有褵褰筆資料是以褨褳褬褰褩為. ‧. 圓心並且半徑為褱褮褵的資料,有褵褰筆資料是以褨褭褳褬褰褩為圓心並且半徑為褱褮褵的資料,. y. sit. io. er. 上。. Nat. 剩下褲褰褰筆用程式取亂數取點。之後將後面褱褹褸個維度都用程式取亂數乘上褰.褰褵補. al. 這褴褰褰個樣本的前兩個維度是主要結構,其中褵褰 個點圍成一個大圈,另外. n. v i n Ch 三組褵褰 個點各以三角形的三個頂點圍成三個小圈,另外褲褰褰個點是亂數產生, engchi U 這褴褰褰個點的主結構如圖 褴褮褱褨襡褩其餘維度的資料,我們用不影響結構的亂數產生。 因此,資料為褴褰褰 乘褲褰褰 的矩陣,這樣的矩陣大小,可以用傳統的襍襄襓 方 法,來觀察資料在沒有計算損失的情況下,其結構為何,方便我們比較其他襍襄襓 方法。利用傳統襍襄襓 方法得到的褲 維結構投影如圖 褴褮褱褨襢褩,這結果和只畫出資料 前兩維的結果相似。 接著我們使用亂數投影,將資料分別從褲褰褰 維降到褵褰、褴褰、褳褰、褲褰和褱褰維, 之 後 將 降 維 後 的 資 料 進 行 傳 統 的襍襄襓計 算 , 得 到 的褲維 較 穩 定 的 結 構 投 影 圖 圖 褴褮褲褨襥褩、 褴褮褲褨襣褩、 褴褮褲褨襡褩、 褴褮褱褨襥褩、 褴褮褱褨襣褩。 因 為 亂 數 投 影 有 時 會 造 成 結 構的破壞,因此我們把不穩定的結構投影圖列出供讀者參考。對應維度. 為褵褰、褴褰、褳褰、褲褰和褱褰維的結構投影圖如 褴褮褲褨襦褩、 褴褮褲褨襤褩、 褴褮褲褨襢褩、 褴褮褱褨襦褩、 褴褮褱褨襤褩。. 褱褹.

(27) 再來我們使用亂數正交投影,亦即我們先用亂數投影的方式取得列 矩 陣 , 然 後 我 們 對 列 矩 陣 做 正 交 化 , 在 利 用 正 交 化 後 得 到 的襯襲襴襨襯襮襯襲襭襡襬 襭襡襴襲襩襸 做 降 維 的 投 影 。 因 為 這 方 法 得 到 的 結 果 都 很 穩 定 , 所 以 , 我 們 只 展 示 一 批 結 構 圖 , 對 應 降 維褵褰、褴褰、褳褰、褲褰和褱褰維 的褲維 結 構 圖 , 其 結 果 如 圖 褴褮褳褨襥褩、 褴褮褳褨襤褩、 褴褮褳褨襣褩、 褴褮褳褨襢褩和 褴褮褳褨襡褩。由圖二到圖 褴褮褳褨襡褩我們得知,正 交亂數投影的確可以保持降維後的結構。 為了更精確地度量不同的方法對褲維結構的影響,我們利用比較褲 維投影資 料的成對距離矩陣的差異,來度量不同方法之間的穩定性。圖 褴褮褴褨襡褩是直接使 用襓襃襍襄襓降維與襓襃襍襄襓 以及混合亂數正交投影之襓襃襍襄襓 降維的比較,方法是. 政 治 大 之襓襃襍襄襓 降維至褵褰、褴褰、褳褰、褲褰和褱褰維的褲 維投影結構的相對誤差,橫軸表示維 立 先用襍襄襓 方法計算其褲 維投影結構,然後比較襓襃襍襄襓 以及混合亂數正交投影. 度,縱軸表示相對誤差值。在上方的線段是襓襃襍襄襓作降維與襍襄襓比較的相對誤. ‧ 國. 學. 差,下方的線段是混合亂數正交投影之襓襃襍襄襓 降維與襍襄襓比較的相對誤差,明 顯看到襓襃襍襄襓的降維相對誤差較混合亂數正交投影之襓襃襍襄襓 降維大,所以更確. ‧. 定用亂數正交投影之襓襃襍襄襓這方法是較佳的。. sit. y. Nat. n. al. er. SCMDS與 與 亂 數 正 交 投 影 之SCMDS 於 稀 疏 矩 陣. io. 4.2. 之比較. Ch. engchi. i n U. v. 接著我們比較稀疏矩陣在襓襃襍襄襓 與混合亂數正交投影之襓襃襍襄襓 的差異。因 為襓襃襍襄襓 要能正確顯示資料結構的前提是拆解分群時,群與群交疊的元素個數 要大於資料結構的主要維度,若低估了資料結構的主要維度使得交疊的元素個素 過低,則襓襃襍襄襓 計算後的降維結構,經常是荒腔走板的。 稀疏矩陣很容易出現列資料很稀疏,但是矩陣的秩仍舊很高的情況,因 此我們用稀疏矩陣來比較標準襓襃襍襄襓 降維與混合亂數正交投影之後的襓襃襍襄襓 降 維 。 我 們 建 立 一 個 大 小 為褲褰褰褰乘褱褰褰褰 的 稀 疏 矩 陣 矩 陣 。 先 用襍襄襓 方 法 計 算其褲 維投影結構,然後比較襓襃襍襄襓 以及混合亂數正交投影之襓襃襍襄襓 降維 至褱褰褰、褹褰、褸褰、褷褰、褶褰、褵褰、褴褰、褳褰、褲褰和褱褰維的褲 維投影結構,而圖 褴褮褴褨襢褩就 是比較相對誤差的結果,橫軸表示維度,縱軸表示誤差值。在上方的線段. 褲褰.

(28) 是襓襃襍襄襓作 降 維 與襍襄襓比 較 的 相 對 誤 差 , 下 方 的 線 段 是 混 合 亂 數 正 交 投 影 之襓襃襍襄襓 降維與襍襄襓比較的相對誤差,明顯看到襓襃襍襄襓的降維相對誤差較混合 亂數正交投影之襓襃襍襄襓 降維大,所以確定即使在稀疏矩陣上,用亂數正交投影 之襓襃襍襄襓這方法也是較佳的。. 4.3. 大型網站資料建立使用者偏好關係圖實作. 現今的網站服務已經不像早期的靜態網站只提供單項的網頁內容提供網友閱讀, 在大型入口網站的建制上,通常也不是只有一臺伺服器來面對廣大的使用者,一. 政 治 大. 般的情況下,會是許多伺服器同時在線上服務,因此我們會將使用者進行切割,. 立. 讓不同偏好的使用者由不同的伺服器來服務。進而,對於不同偏好的使用者,網. ‧ 國. 學. 站會進行對應的廣告服務與內容推薦。因此,如何建制即時的使用者偏好關係 圖,讓伺服器有更清楚的原則對廣告做精準地推播,是現在很熱門的課題。. ‧. 要對使用者的偏好做分析與預測,我們對每一個使用者會要求一個獨一無二. y. Nat. 的代號,稱為襕襩襤(襕襳襥襲 襩襮襤襥襸),對於每一個網站上的資料(項目)我們會給一. sit. 個襔襩襤(襔襥襲襭 襩襮襤襥襸),將使用者在一段期間點擊過某項目的次數記錄下來的矩. n. al. er. io. 陣,我們稱項目與使用者矩陣(襔襥襲襭褭襕襳襥襲 襭襡襴襲襩襸),我們會因為使用者點擊項. i n U. v. 目的記錄,來區分使用者與使用者彼此間的相似程度。透過相似程度的描述,將. Ch. engchi. 使用者投影在較低維度的空間,然後對使用者進行分類,我們就能知道哪些使用 者之間有類似的偏好,進而對該類使用者進行更精確地分析與廣告推薦。 首先我們先模擬一個大型網站上的使用者點擊記錄,利用稀疏矩陣的方式來 儲存這些記錄。由於資料龐大的特性,若將資料全部讀入記憶體再計算,讀取資 料的時間往往都大過網路服務可以忍受的時間。因此,我們在上一節才會特別強 調稀疏矩陣的運算,這些看似多餘的運算寫法,對應的就是直接利用資料庫的搜 尋和寫入功能,把資料庫當做襃襐襕 旁的襣襡襣襨襥,讓資料庫的處理成為計算單元的 一部份。藉由資料庫先進行初步的降維,使用的方法是亂數正交投影,接著再使 用襓襃襍襄襓來定出使用者的座標位置,之後觀察這些座標位置,來分析使用者的 偏好關係。而先使用亂數正交投影的方式將資料降維而不直接使用襓襃襍襄襓 將資 料降維,主要是因為資料有未確定值。使用者沒有點擊的項目,不見得是因為 他沒有興趣,而模擬的資料就是有這樣的未確定值存在,有未確定值的時候就 褲褱.

(29) 無法直接使用襓襃襍襄襓。加上在上一節可以看到單純作襓襃襍襄襓與亂數正交投影混 合襓襃襍襄襓相比,亂數正交投影混合襓襃襍襄襓是相對較佳的。因此實驗流程是利用 在資料庫上先藉由亂數投影的方式來降維,之後載下資料再進行襓襃襍襄襓計算,藉 此找出使用者的偏好關係。 我們模擬褱褰褴褰褰個使用者的大型網站記錄,每一個使用者點擊單項項目的次 數不超過褵,並且每一個使用者點擊的項目總數不超過褲褰褰褰。對應的超大稀疏矩 陣我們計算其亂數正交投影的襓襃襍襄襓方法,先用亂數正交投影的方式將資料降 維至褲褰褰,然後再用襓襃襍襄襓 將資料降維至褳褰,最後再繪出褲 維的使用者偏好關係 圖。. 政 治 大. 在模擬資料時,先將資料分成三種. 立. ‧ 國. 學. 褱褮 任 意褺任 意 是 指 利 用 程 式 亂 數 選 取 少 於褱褰褰褰個 指 標 當 作 使 用 者 點 擊 的 項 目,再利用程式亂數選取褱到褵的整數當作項目的點擊次數,以此方法模. ‧. 擬褱褰褰褰褰筆資料。. y. Nat. 褲褮 相似褺一開始先亂數選取一個大於等於褸褰小於褱褰褰褰的整數u來決定點擊項目. sit. 的個數,再任意選取u個項目的指標j 褽 褨j1 , j2 , ..., ju 褩,再利用程式亂數選. n. al. er. io. 取褱到褵的整數u次,使得次數v 褽 褨v1 , v2 , ..., vu 褩褩為對應項目的點擊次數,藉. i n U. v. 此當作建構相似群的標準D 褽 {j1 褺 v1 , j2 褺 v2 , ..., ju 褺 vu }。之後再細分成三種. Ch. engchi. 褨襡褩 次數加一褺任意從j 褽 褨j1 , j2 , ..., ju 褩選取一個指標,將選取到的指標k,次 數加一,也就是{j1 褺 v1 , j2 褺 v2 , ..., jk 褺 vk 褫 褱, ..., ju 褺 vu }。這樣的使用者 共褱褰褰個。 褨襢褩 次數少一褺任意從j 褽 褨j1 , j2 , ..., ju 褩選取一個指標,將選取到的指標k,次 數少一,也就是{j1 褺 v1 , j2 褺 v2 , ..., jk 褺 vk − 褱, ..., ju 褺 vu }。這樣的使用者 共褱褰褰個。 褨襣褩 多一項目褺任意在j 褽 褨j1 , j2 , ..., ju 褩之外選取一個指標s, s ∈ / {j1 , j2 , ..., ju }, 並且令其次數為褱,也就是{j1 褺 v1 , j2 褺 v2 , ..., jk 褺 vk − 褱, ..., ju 褺 vu , s 褺 褱}。這樣的使用者共褱褰褰個。 褳褮 不相關褺利用程式亂數選取j以外的指標,並且每一使用者點擊的項目並不重 複,使他們點擊的內容毫無交集,共褱褰褰筆。 褲褲.

(30) 這樣我們就可以透過觀察相似的是否座落在同一個區域,以及不相關的是否 在關係圖上是分散的,來驗證我們的方法是否能成功應用在巨大資料上。其結果 如圖 褴褮褳,由圖形可以看到黃色與藍色都集中在縱軸上面,並且藍色代表的是毫無 交集的那一群,他們是靠近縱軸的下方,是比較無意義的部分,而在右方縱軸較 遠的紅色那一群是交集很大,也就是相似的那一群褨偏好極為相同褩,他們是較具 意義的部分,可藉由他們較為相似,推斷他們可能具有相同的偏好或行為。之後 將相似的群另外作襍襄襓,單看相似群,如圖 褴褮褶褨襡褩所示,看到大部分都緊緊的靠 在一起。在圖 褴褮褶褨襢褩中,則是將不同群,用不同的圖型標記,分別使用菱形和原 圈襏,以及加號褫,而利用顏色代表他們些許的不同,紅色與藍色是代表這兩個使. 政 治 大. 用者他們都點擊相同的項目,只是點及其中一個項目次數多褱;而藍色與黑色的差 異在於,黑色座標的使用者比藍色的使用者多點擊一個項目,並且點及次數為褱。. 立. ‧ 國. 學. 以上詳細的襣襯襤襥請參考http://dl.dropbox.com/u/16496288/material.rar。 若有疑問可以寫襭襡襩襬到襬襯襯襫褷褶襧襯襤襀襧襭襡襩襬褮襣襯襭給作者。. ‧. n. er. io. sit. y. Nat. al. Ch. engchi. 褲褳. i n U. v.

(31) (a) 原資料的圖. 立. 政 治 大. (b) 傳統MDS的圖. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. (c) 維度降到10的random projection 穩定. Ch. engchi. i n U. v. (d) 維度降到10的random projection 不穩定. (f) 維度降到20的random projection 不穩定. (e) 維度降到20的random projection 穩定. 圖 褴褮褱褺 原資料的圖與各種方法的比較. 褲褴.

(32) 政 治 大. (b) 維度降到30的random projection 不穩定. (a) 維度降到30的random projection 穩定. 立. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. i n U. v. (d) 維度降到40的random projection 不穩定. (c) 維度降到40的random projection 穩定. engchi. (f) 維度降到50的random projection 不穩定. (e) 維度降到50的random projection 穩定. 圖 褴褮褲褺 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮的結果比較. 褲褵.

(33) 政 治 大. (a) 維度降到10的random projection並且作正交化. 立. (b) 維度降到20的random projection並且作正交化. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. (c) 維度降到30的random projection並且作正交化. Ch. i n U. v. (d) 維度降到40的random projection並且作正交化. engchi. (e) 維度降到10的random projection並且作正交化. 圖 褴褮褳褺 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮並且作正交化的結果比較. 褲褶.

(34) 立. 政 治 大. ‧ 國. 學. (a) 小 矩 陣 亂 數 直 接 作SCMDS降 維 與 正 交 化. ‧. 作SCMDS降維5個維度的相對誤差比較. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. (b) 稀 疏 矩 陣 直 接 作SCMDS降 維 與 正 交 化 作SCMDS降維各維度的相對誤差比較. 圖 褴褮褴褺 直接作襓襃襍襄襓降維與正交化作襓襃襍襄襓降維的相對誤差比較. 褲褷.

(35) 立. 政 治 大. ‧. ‧ 國. 學. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. v. 圖 褴褮褵褺 模擬褱褰褴褰褰筆資料作亂數投影正交化與襓襃襍襄襓的結果. 褲褸.

(36) 立. 政 治 大. ‧ 國. 學 ‧. (a) 10400筆資料相似的群. n. er. io. sit. y. Nat. al. Ch. engchi. i n U. (b) 10400筆資料相似的群之間的比較. 圖 褴褮褶褺 褱褰褴褰褰筆資料相似的群. 褲褹. v.

(37) 第 五 章. 結論. 藉由本論文實驗結果,我們可以得到以下結論褺. • 襐襹襴襨襯襮是適合作網路資料分析的程式語言。 • 資料庫是一個資料預先降維的快取空間。 • 正交亂數投影可以改善亂數投影的誤差。. 政 治 大. • 正交亂數投影與襓襃襍襄襓可以協助大型網路資料分析。. 立. 由於襐襹襴襨襯襮此程式語言可以任意混用型別,所以在儲存資料上是非常方便的,並. ‧ 國. 學. 且它的運算速度也非常的快速,加上他有許多社群支持擁有許多完整的套件,所 以我們實驗方法用到的亂數投影以及襓襃襍襄襓都是可以用它來完成的,所以它真的. ‧. 是一個適合作網路資料分析的程式語言。. y. Nat. 襄襡襴襡 襩襳 襣襡襣襨襥 襦襯襲 襤襩襭襥襮襳襩襯襮 襲襥襤襵襣襴襩襯襮褮資 料 庫 是 一 個 資 料 預 先 降 維 的 快 取. sit. 空間。我們利用在資料庫上先藉由亂數投影的方式來降維,那何不直接使. n. al. er. io. 用襓襃襍襄襓進行降維,而要使用亂數投影褿 這是因為我們的資料有未確定值,在這. i n U. v. 樣的情況下是無法直接作襓襃襍襄襓,所以必須先藉由亂數投影降維,把有未確定值. Ch. engchi. 這因素消除才可進行襓襃襍襄襓。那在資料庫用亂數投影降維不僅可以使資料庫分擔 一些計算,並且還可以達到降維的作用,之後載下資料再進行襓襃襍襄襓計算,藉此 找出使用者的偏好關係,能藉此分析進行下一步的推薦服務,讓此資料成為我們 推薦的一個基礎,能更有效率且精確的給予建議。 藉由上一章的第一節可以確認正交亂數投影可以改善亂數投影的誤差,經由 正交的修正,可以確保亂數投影的穩定性,並且維度就算降到很低對於資料的結 構也不會影響很大。所以在作亂數投影時,若要降的維度多,選擇正交亂數投影 準沒錯。 我們利用在資料庫進行正交亂數投影降低維度,再藉由襓襃襍襄襓定出使用者間 的座標,利用這些座標可以對相似的使用者進行合適的推薦,所以正交亂數投影 與襓襃襍襄襓可以協助大型網路資料分析。. 褳褰.

(38) 參考文獻 襛褱襝http://www.whitehouse.gov/blog/2012/03/29/big-data-big-deal 襛褲襝http://en.wikipedia.org/wiki/John_Gage 襛褳襝http://nhird.nhri.org.tw/ 襛褴襝http://nhird.nhri.org.tw/date_01.htm 襛褵襝襆襲襡襤襫襩襮褬 襄褮 襡襮襤 襍襡襤襩襧襡襮褬 襄褺 襅襸襰襥襲襩襭襥襮襴襳 襷襩襴襨 襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮襳 襦襯襲 襭襡褭. 政 治 大 Knowledge Discovery and 立 Data Mining 褬 褵褱褷褭褵褲褲褬褲褰褰褳. 襣襨襩襮襥 襬襥襡襲襮襩襮襧褬 In Proceedings of KDD-03, The Ninth International Conference on. ‧ 國. 學. 襛褶襝襂襯襲襧褬 襉褮褬 襇襲襯襥襮襥襮褬 襐褮褺 襍襯襤襥襲襮 襍襵襬襴襩襤襩襭襥襮襳襩襯襮襡襬 襓襣襡襬襩襮襧褺 襴襨襥襯襲襹 襡襮襤 襡襰襰襬襩襣襡褭 襴襩襯襮襳 褨褲襮襤 襥襤褮褩褬New York: Springer-Verlag褬襰襰褮 褲褰褷襻褲褱褲褮 襉襓襂襎 褰褭褳褸褷褭褹褴褸褴褵褭褷褬褲褰褰褵褮. ‧. 襛褷襝襊襥襮襧襮襡襮 襔襺襥襮襧褱褬 襈襥襮襲襹 襈襓 襌襵褲 襡襮襤 襗襥襮褭襈襳襩襵襮襧 襌襩 褺 襍襵襬襴襩襤襩襭襥襮襳襩襯襮襡襬 襳襣襡襬褭. sit. y. Nat. 襩襮襧 襦襯襲 襬襡襲襧襥 襧襥襮襯襭襩襣 襤襡襴襡 襳襥襴襳 褬BMC Bioinformatics 褬 襖襯襬褮褹褬 襎襯褮褱褷褹褮褨襓襃襉褩褬褲褰褰褸褮褰褴褮. al. er. io. 襛褸襝襍襯襲襲襩襳襯襮 襁褬 襒襯襳襳 襇褬 襃襨襡襬襭襥襲襳 襍褺 襆襡襳襴 襭襵襬襴襩襤襩襭襥襮襳襩襯襮襡襬 襳襣襡襬襩襮襧 襴襨襲襯襵襧襨. v. n. 襳襡襭襰襬襩襮襧褬 襳襰襲襩襮襧襳 襡襮襤 襩襮襴襥襲襰襯襬襡襴襩襯襮褬Information Visualization 褲褺褶褸褭褷褷褬褲褰褰褳褮. Ch. engchi. i n U. 襛褹襝襆褮襇褮 襇襵襳襴襡襶襳襯襮褮 襔襷襯 襦襡襳襴 襡襬襧襯襲襩襴襨襭襳 襦襯襲 襳襰襡襲襳襥 襭襡襴襲襩襣襥襳褺 襍襵襬襴襩襰襬襩襣襡襴襩襯襮 襡襮襤 襰襥襲襭襵襴襥襤 襴襲襡襮襳襰襯襳襩襴襩襯襮褮ACM Transactions on Mathematical Software 褬 褴褨褳褩褺褲褵褰襻褲褶褹褬 褱褹褷褸褮 襛褱褰襝襘褮 襈襵襡襮襧 襡襮襤 襖褮襙褮 襐襡襮褮 襆襡襳襴 襲襥襣襴襡襮襧襵襬襡襲 襭襡襴襲襩襸 襭襵襬襴襩襰襬襩襣襡襴襩襯襮襳 襡襮襤 襡襰褭 襰襬襩襣襡襴襩襯襮襳 褬Journal of Complexity 褬 褱褴褺褲褵褷襻褲褹褹褬 褱褹褹褸褮. 褳褱.

(39) 附錄A: :Python技 技巧 分 享 褱褮 pop() 指 令 由 後 端 拋 值 褺 襰襯襰褨褩 指令在襐襹襴襨襯襮 的串列、集合以及字典型別都有襰襯襰褨褩 這個函數可以使 用,特別在串列型別時襰襯襰褨褩 可以有序的將資料丟出,並且讓丟出的資料自 動移除。舉例來說,若襡 褽 襛褱褬褲褬褳褬褴襝 是一個長度是褴 的串列。襡褮襰襯襰褨褩 會自動 把襡 的最後一個元素丟出,亦即褴。之後襡 串列就成為 襛褱褬褲褬褳襝 長度為褳 的串 列。我們也可以指定要丟出的資料位置,例如,襡褮襰襯襰褨褱褩,會把襡 的襩襮襤襥襸 等 於褱 的位置的該元素丟出,並且讓襡 的長度變短。. 治 政 大 舉例來說,當我們要計算一個樣本數很大的資料彼此間的距離(襰襡襩襲褭襷襩襳襥 立 襤襩襳襴襡襮襣襥)時,就很適合用到襰襯襰褨褩 指令。假設襡 是一個高度是褳褰褰褰 寬度是褲 ‧ 國. 學. 的襮襵襭襰襹褮襮襤襡襲襲襡襹,襡褮襳襨襡襰襥 褽 褨褳褰褰褰褬褲褩,其中褳褰褰褰 代表樣本的數目,褲 代表 樣本的維度。若我們要計算這三千個樣本彼此間的距離。我們用如下的程式. ‧. 來計算:. Nat. sit. y. import numpy as np. io. al. n. while len(a)>0:. er. D = np.zeros([3000,3000]). b = a.pop(). Ch. engchi. for i in range(len(a)):. i n U. v. D[len(a),i] = np.linalg.norm(b-a[i,:]) D = D+D.T 當資料很大時,隨著襰襯襰褨褩 指令從最後一個襩襮襤襥襸 所指到的元素開始往外 丟,一來使得資料長度越來越短,二來程式不需要管襩襮襤襥襸 需要重排的問 題。倘若我們只使用襦襯襲 迴圈來撰寫,我們就需要去計算當我們拿出第襩 個襩襮襤襥襸 的項目時,下一個襦襯襲 迴圈要在哪一個襩襮襤襥襸 停止才不會多算或少 算。 褲褮 Python 的 型 別 轉 換 非 常 迅 速 : 襐襹襴襨襯襮 程式有一個很特別的特性,就是不管變數內含有的資料有多大,在 做型別轉換時都非常的迅速。若一個變數襡 是串列型別,我們想把襡 變成集 褳褲.

(40) 合型別,我們只要用襡 褽 襳襥襴褨襡褩 就可以輕鬆的把襡 的型別從串列變成集合。 例如我們有兩個很大的串列襡 和 襢,我們想知道這兩個串列交集的部份為 何,若是使用襦襯襲 迴圈來撰寫,我們需要兩個襦襯襲 迴圈來達成。但襐襹襴襨襯襮 具 有快速變換型別的特性,因此我們可以使用下列程式來達成。 a = set(a) b = set(b) c = a.intersection(b) 短短三行的程式就可以快速達成目的,襣 變數就是襡 串列和襢 串列的交集元 素所成的集合。. 立. 政 治 大. 褳褮 辭典 集 型 別 適 合 稀 疏 矩 陣 的 資 料 紀 錄. ‧ 國. 學. 襐襹襴襨襯襮 的辭典集型別是以褢金鑰褺值褢的方式紀錄每一個金鑰所對應的值,這 種資料型別正好適合紀錄大型稀疏矩陣非零值的內容,例如我們可以定義一. sit. Nat. A = {(1,3):5, (2,7):-1, (15,80):3, ...}. y. ‧. 個辭典集為. er. io. 褢褺褢 前面的元組是紀錄矩陣元素的位置,後面的值代表該元素的值,這. al. n. v i n Ch 我們想紀錄使用者在該網站的所有瀏覽紀錄,使用者的襩襮襤襥襸 為襕襩襤褨襕襳襥襲 engchi U. 樣就可以用最少的記憶體,儲存大型稀疏矩陣。在網路服務應用上,若. 襩襮襤襥襸褩,網站內容的襩襮襤襥襸 為襔襩襤褨襔襥襲襭 襩襮襤襥襸褩,點擊過的次數為襮 ,則我們 可以用{襕襩襤褺褨襔襩襤褬襮褩} 的形式來紀錄,沒有點擊過的資訊都不會佔用襳襥襲襶襥襲 的 紀錄空間。. 褴褮 串列 內 的 內 容 型 別 不 受 限 制 在大型網站的推薦系統應用上,如何快速地對某一位使用者進行相似性偏好 的即時推薦,此服務最大的瓶頸在於如何快速地搜尋到與該使用者偏好相近 的其他使用者,這樣的服務不可能在每一次推薦時都進行一次搜尋的動作, 而是先把搜尋好的資料建成表格的形式,即時服務時時只對該表格的內容進 行搜尋,在流量低的時候進行網站再對表格進行校正更新的動作。 襐襹襴襨襯襮 的串列型別非常適合應用在推薦系統表格的建制,例如我們想紀錄 每一個使用者有哪些與他褯她偏好相近的使用者,我們使用串列型別來放置 褳褳.

(41) 集合變數,第襩 個襩襮襤襥襸 所對應的集合內存放與第襩 位使用者偏好相近的使用 者襕襩襤。例如 S = [set([5,8,7]),set([9,3]),set([100,25,49,91]),...] 這代表襕襩襤褽褰 的使用者與他褯她偏好相近的使用者襕襩襤 為褵, 褸, 褷。若我們除了 要紀錄偏好相近的使用者是誰,並且還要紀錄偏好相近的程度,我們也可以 在每一個串列中放置辭典集的變數,例如. S = [{5:0.8,8:0.6,7:0.9},{9:0.7,3:0.65},{100:0.78,25:0.88,49:0.63,91:0.67},...]. 政 治 大. 這 樣 就 表 示襕襩襤褽褰 的 使 用 者 與襕襩襤褽褵 的 使 用 者 偏 好 相 近 程 度 為褰褮褸,. 立. 與襕襩襤褽褸的使用者偏好相近程度為褰褮褶。襐襹襴襨襯襮 的資料內容不受限制的特. ‧ 國. 學. 性,讓襐襹襴襨襯襮 程式在網站分析應用上非常方便。 褵褮 for 迴 圈 的 操 作 不 侷 限 於 數 字. ‧. 先前我們提到我們可以利用辭典集型別來紀錄大型稀疏矩陣或是網站使用者. y. Nat. 點擊的紀錄,在一個資料長度一直更新的情況,傳統的程式寫法我們必須要. io. sit. 先確認該資料的長度,才能用襦襯襲 迴圈確保每一個元素都被讀取到,這樣計. n. al. er. 算資料長度都會成為一種負擔。襐襹襴襨襯襮 的襦襯襲 迴圈可以直接呼叫其內容作為. i n U. 有序或無序的取值,例如我們有一個辭典集為 d={’a’:10,’b’:12}. Ch. engchi. v. 我們用以下的方式來列印出辭典集內的資料 for x in d.keys(): print d[x] 褶褮 從Python 到 Matlab 因為在襐襹襴襨襯襮裡面可以利用串列開出很像襍襡襴襬襡襢的 矩陣,而這樣的串列也可以轉成襍襡襴襬襡襢的矩陣,好處是可以利用襐襹襴襨襯襮來 整理資料,整理完以後,可以將整理過的資料交由襍襡襴襬襡襢來作運算。例如現 在有一個串列為 L=[[1,2,3] ,[4,5,6]] 褳褴.

(42) 然後,我們引用套件 襳襣襩襰襹褮襩襯 from scipy.io import * m_dict=dict() # ’L’ 是要給matlab 看的變數名稱,L 是. m_dict[’L’]=L 資料 savemat(’L.mat’,m_dict). 之後在襍襡襴襬襡襢中顯示的結果就是一個褲 × 褳的矩陣. 政 治 大. L= 2. 4. 5. 3. 立 6. 學. ‧ 國. 1. 褷褮 串 列 與 陣 列 的 轉 換 在襐襹襴襨襯襮裡面可以使用套件襓襣襩襰襹,讓串列可以轉成. ‧. 像襍襡襴襬襡襢中的矩陣褨陣列褩,例如褺現在有一個串列. sit. y. Nat. A=[[1,2],[3,4],[4,5]]. n. al. er. io. ,然後引入套件襓襣襩襰襹中的陣列褨襡襲襲襡襹褩,令變成陣列的為襂. Ch. from scipy import array B=array(A). engchi. i n U. v. B= array([[1, 2], [3, 4], [4, 5]]) 。那要如過要將陣列襂變回串列呢褿我們會使用以下指令 B=[list(y) for y in B] B= [[1, 2], [3, 4], [4, 5]] 襂就變回串列了。. 褳褵.

數據

圖 褴褮褱褺 原資料的圖與各種方法的比較
圖 褴褮褲褺 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮的結果比較
圖 褴褮褳褺 降維度襲襡襮襤襯襭 襰襲襯襪襥襣襴襩襯襮並且作正交化的結果比較

參考文獻

相關文件

Eisenhower)受命出任「盟 軍歐洲總司令」(Supreme Allied Commander [Europe])。艾森豪威爾的戰略構想仍然強調

九者菩薩解真俗諦。悟法王法。將有所襲。名法王子住。十者此位菩薩如王太子堪受

  臣僧 (廣聞)

封面 前環襯 書名頁 正文 後環襯

因為… 覺得 增強… 容易… 準確… 多角度… 不同很 多途徑可以找… 多元資料… 在IES過程中有用過/.

[r]

近年來,國內外已經有很多學術單位投入 3D 模型搜尋的研究,而且在網路 上也有好幾個系統提供人使用,例如台灣大學的 3D Model Retrieval

  音樂是用兩個法國音樂家 ( 深色叢林樂團 ) 創作的糖果 搖籃曲。   音樂的特色是人聲部分是以所羅門島 ( 臨近新幾內亞 ) 的語言為樣本。旋律是