1. 程式人生 > >利用TF-IDF建立一個文件恢復系統

利用TF-IDF建立一個文件恢復系統

為什麼在匯入資料時,使用sframe框架呢?
SFrame中的資料在GraphLabServer 中以列優先的方式儲存,並且儲存在永續性儲存媒介(例如磁碟)中,避免了被記憶體大小所限制。 SFrame中的每一列都是一個大小不可變的SArray,但是SFrame可以通過增加或者減少列來輕鬆地改變。
一個SFrame基本上表現為SArray的一個有序dict
1.挖掘一下資料集的含義,檢視這個資料集包含什麼
2.統計量:
(1)檢視其中一個單詞“奧巴馬”的文章的單詞統計,使用graphlab中自帶的詞彙統計函式統計每個單詞的詞頻
(2)統計出來的詞頻數比較雜亂,對這些數量進行排序。對字典計數,一列是單詞,另一列是計數。
使用了stack()

函式,這個函式將SFrame字典中的一列取出,然後和另外幾列放在一起。(在我們的例子中,一列單詞,另一列是計數)。
通過stack 字典被放入列表中分成了兩列,但是沒有進行排序,下面就進行排序(呼叫sort函式)
(3)通過sort函式排序之後,發現排序排出的詞彙最多的單詞,比如 the a 等,大多數都是一些無用的單詞,那麼需要用TF-IDF進行轉化,篩選
(4)首先要計算整個文章的tf-idf,計算出整個文集中每個單詞的數目(就是對整個文件中的每個單詞涉及到的文章進行單詞計數)
(5)Python中直接有?tf-idf這個函式,可以直接進行計算?出來的是一個tf-idf的字典形式
(6)注意,當老師對奧巴馬的tf-idf值進行造表並排序時,使用的程式碼時僅僅一行程式碼進行排序,將其分開儲存到Word和tf-idf兩列(僅僅使用了一行程式碼,就是取出來再進行呼叫函式,檢視其使用技巧),可以看到使用tf-idf計算出來的文章關鍵詞都和奧巴馬有著緊密的聯絡
3.手動計算距離
計算克林頓和奧巴馬之間的相似度,呼叫了distance函式,使用cosine來計算相似度。看看奧巴馬的tf-idf和克林頓的tf-idf之間的距離是否很小,很小表示其相似程度高(使用貝克漢姆來進行對比)
4.使用近鄰模型計算兩者之間的距離(建模)
我們還是使用graphlab中的叫做nearest_neighbors的離線模型來計算,返回值使用label來定義,返回最近鄰居的真實標籤label也就是那個人的名字
(1)使用knnmodel中的query方法,也就是使用query函式(呼叫這個函式,可以直觀的顯示出一個表格,表格中有相關的從上到下的距離排列