在學習機器學習的過程中,我寫了簡單易學的機器學習演算法的專題,依然還有很多的演算法會陸續寫出來。網上已經有很多人分享過類似的材料,我只是通過自己的理解,想盡可能用一種通俗易懂的方式講出來。在不斷學習的過程中,陸陸續續補充了很多的知識點,在學習吳軍老師的《數學之美》的過程中,也補充了很多我之前遺漏的知識點,吳軍老師已經在《數學之美》上把問題講得很清楚,我在這裡只是再增加一些我對這些問題的認識。專題的順序與原書不一致,其中的原因是我在學習機器學習的過程中遇到了問題會翻閱一些書,所以,順序與我學習時遇到的問題是相關的。藉此機會,感謝那些默默支援我的人,我會更加努力寫出高質量的博文。
首先解釋下tf-idf的全稱,tf-idf全稱是term frequency / inverse document frequency,全稱的意思為詞頻、逆文字頻率。
tf是指乙個詞在一篇文章中出現的頻率。單純使用tf將會出現一些問題,問題是一些通用的詞對於主題並沒有太大的作用,反倒是一些出現頻率較少的詞才能夠表達文章的主題。所以權重的設計必須滿足:乙個詞**主題的能力越強,權重越大,反之,權重越小。
對於乙個處理好的詞項-文件矩陣:
tf表示詞在一篇文章中出現的頻率。這裡我們假設每篇文章的詞的個數為
idf的公式為:
去掉了停止詞「and」,「edition」,「for」,「in」,「little」,「of」「the」,「to」。我們可以得到以下的詞項-文件矩陣:
最終的結果為:
matlab原始碼
tf_idf函式
function [ datamade ] = tfidf( dataset )
[m,n] = size(dataset);%計算dataset的大小,m為詞的個數,n為標題的個數
rowsum = [8,6,19,6,8,19,6,4,18];
colsum = sum(dataset,2);% 每個詞在不同標題中出現的總和
datamade = zeros(m,n);% 構造乙個一樣大小的矩陣,用於儲存tf-idf值
for i = 1:m
tempidf = log2(n./colsum(i,:));
for j = 1:n
datamade(i,j) = (dataset(i,j)./rowsum(:,j))*tempidf;
endend
end
主函式
%% tf_idf
% load data
% 注意每一列為標題,每一行為詞
dataset = [0 0 1 1 0 0 0 0 0
0 0 0 0 0 1 0 0 1
0 1 0 0 0 0 0 1 0
0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 0 0
1 1 1 1 1 1 1 1 1
1 0 1 0 0 0 0 0 0
0 0 0 0 0 0 1 0 1
0 0 0 0 0 2 0 0 1
1 0 1 0 0 0 0 1 0
0 0 0 1 1 0 0 0 0
];% 計算tf-idf值
data = tfidf(dataset);
1、在求解tf時,tf的分母應該是整個文字的長度,可參見維基百科
2、在求解idf時,取對數的
1、《數學之美》吳軍 著. 第11章 如何確定網頁和查詢的相關性. p105-110.
2、 small example
英語拾遺之數字
個人主頁 參考源 感謝 不知道怎麼發音,可以有道一哈 zero 0 one 1 two 2 three 3 four 4 five 5 six 6 seven 7 eight 8 nine 9 ten 10eleven 11 twelve 12 thirteen 13 fourteen 14 fif...
asp知識拾遺
最近做的乙個小 碰到了許多問題,能解決的都解決了,還有的沒辦法就找了替代的解決辦法.下面收集一下 1 在選擇了一系列的checkbox後的提交表單提交後,會獲取到name1,逗號,空格,name2,逗號,空格,結果,系統需要獲取這些值,我用了以下 實現.uname request.form user...
Linux同步拾遺
一般情況下,執行緒在主題函式退出的時候會自動終止,但同時也可以因為接收到另乙個執行緒發來的終止請求而強制終止。執行緒取消的方法是向目標執行緒發cancel訊號,但如何處理cancel訊號則由目標執行緒自己決定,或者忽略,或者立即終止,或者繼續執行到cancelation point 取消點 由不同c...