99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀從奇異值分解(SVD)看潛在語義索引(LSI)
從奇異值分解(SVD)看潛在語義索引(LSI)
2017-12-22
收藏

從奇異值分解(SVD)看潛在語義索引(LSI)

1. SVD 簡介

SVD中文稱為“奇異值分解”,是一種矩陣分解方法。其公式如下:

定理:設(shè)A為m*n階復(fù)矩陣,則存在m階矩陣U和n階矩陣V,使得:

      A = U*S*V’     其中S=diag(σi,σ2,……,σr),σi>0 (i=1,…,r),r=rank(A)。

其中 A 矩陣是我們初始的特征矩陣,在文本挖掘中:A就是 t (term) 行 d (document) 列的矩陣,每列是一篇文章,每行是一個單詞,每個單元格的當(dāng)前單詞在當(dāng)前文章里的出現(xiàn)次數(shù)。 U 是一個 t 行 r 列 的矩陣, V 是一個 r 行 d 列 的矩陣, S 是一個 r 行 r 列的對角矩陣。這里 r 的大小是 A的秩。那么U和V中分別是A的奇異向量,而S是A的奇異值。AA'的正交單位特征向量組成U,特征值組成S'S,A'A的正交單位特征向量組成V,特征值(與AA'相同)組成SS'。( 關(guān)于秩是什么,特征值是什么,這個分解是怎么得到的,可以暫不去管)

注意,這個公式是等號,也就是等號左邊完全等價于等號右邊。換句話說我們只是把原來的A換了一種表示形式而已,并沒有丟失任何信息。就好像 24 = 2 * 3 * 4 一樣。 也正是因此,如果 LSI 直接使用 SVD 的話,不僅 r 是不可控的,而且 r 很可能很大以至于起不到降維效果,事實上這樣做不僅沒降維而且耗費了大量的運算時間。而 SVD 作為一種矩陣分解方法,也并非僅僅用在 LSI 中。Matlab中有直接的svd函數(shù)可以使用:[U,S,V] = svd(A) 


2. LSI 對 SVD 的使用

LSI 對 SVD 做了一點改變,就是對 S 的 r 個對角線元素進行了排序,并只保留前 k 個值 ( k < r ), 后 r - k 個置零。此時,可以證明等式右邊是在最小二乘意義下對等式左邊的最佳近似。事實上這個過程是把數(shù)據(jù)集的特征值(在SVD中用奇異值表征)按照重要性排列,降維的過程就是舍棄不重要的特征向量的過程,而剩下的特征向量張成空間為降維后的空間。

看到這里,我們能得到最重要的啟發(fā)就是,LSI 是通過舍棄不重要的特征向量來達到降維效果的,而又由于特征向量是根據(jù)矩陣運算得出的,因此 LSI 在降維的過程中不僅丟失了信息,而且還改變了信息。降維后的數(shù)據(jù)集僅僅是對原數(shù)據(jù)集的一種近似而非等價形式。且降維幅度越大,與原信息的偏離就越大。


3. LSI 的適用性

1) 特征降維

LSI 本質(zhì)上是把每個特征映射到了一個更低維的子空間(sub space),所以用來做降維可以說是天造地設(shè)。在降維這塊土地上還有另一位辛勤的耕耘者那就是TFIDF,TFIDF通過一個簡單的公式(兩個整數(shù)相乘)得到不同單詞的重要程度,并取前k個最重要的單詞,而丟棄其它單詞,這里只有信息的丟失,并沒有信息的改變。從執(zhí)行效率上 TFIDF 遠遠高于 LSI,不過從效果上(至少在學(xué)術(shù)界)LSI 要優(yōu)于TFIDF。

不過必須提醒的是,無論是上述哪一種降維方法,都會造成信息的偏差,進而影響后續(xù)分類/聚類準確率。 降維是希望以可接受的效果損失下,大大提高運行效率和節(jié)省內(nèi)存空間。然而能不降維的時候還是不要降維(比如你只有幾千篇文檔要處理,那樣真的沒有必要降維


2)單詞相關(guān)度計算

LSI 的結(jié)果通過簡單變換就能得到不同單詞之間的相關(guān)度( 0 ~ 1 之間的一個實數(shù)),相關(guān)度非常高的單詞往往擁有相同的含義。不過不要被“潛在語義”的名稱所迷惑,所謂的潛在語義只不過是統(tǒng)計意義上的相似,如果想得到同義詞還是使用同義詞詞典靠譜。LSI 得到的近義詞的特點是它們不一定是同義詞(甚至詞性都可能不同),但它們往往出現(xiàn)在同類情景下(比如“魔獸” 和 “dota”)。不過事實上直接使用LSI做單詞相關(guān)度計算的并不多,一方面在于現(xiàn)在有一些灰常好用的同義詞詞典,另外相對無監(jiān)督的學(xué)習(xí)大家還是更信任有監(jiān)督的學(xué)習(xí)(分類)得到的結(jié)果。


3)聚類

直接用 LSI 聚類的情景我還沒有見過,但使用該系列算法的后續(xù)變種 PLSI, LDA 進行聚類的的確有一些。其中LDA聚類還有些道理(因為它本身就假設(shè)了潛在topic的聯(lián)合概率分布),用 LSI 進行聚類其實并不合適。本質(zhì)上 LSI 在找特征子空間,而聚類方法要找的是實例分組。 LSI 雖然能得到看起來貌似是聚類的結(jié)果,但其意義不見得是聚類所想得到的。一個明顯的例子就是,對于分布不平均的樣本集(比如新聞類的文章有1000篇,而文學(xué)類的文章只有10篇), LSI/PLSI 得到的往往是相對平均的結(jié)果(A類500篇,B類600篇),這種情況下根本無法得到好的聚類結(jié)果。相對傳統(tǒng)聚類方法k-means, LSI 系列算法不僅存在信息的偏差(丟失和改變),而且不能處理分布不均的樣本集。

對于 LSI/PLSI 來說,聚類的意義不在于文檔,而在于單詞。所以對于聚類的一種變型用法是,當(dāng) k 設(shè)的足夠大時,LSI/PLSI 能夠給出落在不同子空間的單詞序列,基本上這些單詞之間擁有較為緊密的語義聯(lián)系。其實這種用法本質(zhì)上還是在利用降維做單詞相關(guān)度計算。


數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }