當前位置:首頁 » 編程語言 » tfidfpython

tfidfpython

發布時間: 2023-01-07 18:46:43

⑴ 用python採用TF IDF實現從多個文本文檔中選出特徵詞應該怎樣實現

如果最終就是文本分類的話,對所有詞彙得到TF-IDF後,再建立各文本對詞彙表的特徵向量,用餘弦定理判斷相似度,然後做一下聚類,從而實現文本分類。
應該從工程角度效果應該不錯,吳軍博士《數學之美》第14章講到過,裡面把原理也解釋了,很符合直覺,雖然沒有用到太高深的理論。

⑵ 如何用Python玩轉TF-IDF之尋找相似文章並生成摘要

應用1:關鍵詞自動生成

核心思想是對於某個文檔中的某個詞,計算其在這個文檔中的標准化TF值,然後計算這個詞在整個語料庫中的標准化IDF值。在這里,標准化是說對原始的計算公式進行了一些變換以取得更好的衡量效果,並避免某些極端情況的出現。這個詞的TF-IDF值便等於TF*IDF。對於這個文檔中的所有詞計算它們的TF-IDF值,並按照由高到低的順序進行排序,由此我們便可以提取我們想要的數量的關鍵詞。

TF-IDF的優點是快捷迅速,結果相對來說比較符合實際情況。缺點是當一篇文檔中的兩個詞的IDF值相同的時候,出現次數少的那個詞有可能更為重要。再者,TF-IDF演算法無法體現我詞的位置信息,出現位置靠前的詞與出現位置靠後的詞,都被視為重要性相同,這是不正確的。存在的解決辦法是對文章的第一段和每段的第一句話給予比較大的權重。

應用2:計算文本相似度

明白了對於每個詞,如何計算它的TF-IDF值。那麼計算文本相似度也輕而易舉。我們已經計算了文章中每個詞的TF-IDF值,那麼我們便可以將文章表徵為詞的TF-IDF數值向量。要計算兩個文本的相似度,只需要計算餘弦即可,餘弦值越大,兩個文本便越相似。

應用3:自動摘要

2007年,美國學者的論文<A Survey on Automatic Text Summarization>總結了目前的自動摘要演算法,其中很重要的一種就是詞頻統計。這種方法最早出自1958年IBM公司一位科學家的論文<The Automatic Creation of Literature Abstracts>。這位科學家認為,文章的信息都包含在句子中,有的句子包含的信息多,有的句子包含的信息少。自動摘要就是找出那些包含信息最多的句子。那麼句子的信息量怎麼衡量呢?論文中採用了關鍵詞來衡量。如果包含的關鍵詞越多,就說明這個句子越重要,這位科學家提出用Cluster的來表示關鍵詞的聚集。所謂簇,就是包含多個關鍵詞的句子片段。


以第一個圖為例,其中的cluster一共有7個詞,其中4個是關鍵詞。因此它的重要性分值就等於(4*4)/7=2.3。然後,找出包含cluster重要性分值最高的句子(比如5句),把它們合在一起,就構成了這篇文章的自動摘要。具體實現可以參見<Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites>(O'Reilly, 2011)一書的第8章,Python代碼見github。這種演算法後來被簡化,不再區分cluster,只考慮句子包含的關鍵詞。偽代碼如下。

Summarizer(originalText,maxSummarySize):
//計算文本的詞頻,生成一個列表,比如[(10,'the'),(3,'language'),(8,'code')...]
wordFrequences=getWordCounts(originalText)
//過濾掉停用詞,列表變成[(3,'language'),(8,'code')...]
contentWordFrequences=filtStopWords(wordFrequences)
//按照詞頻的大小進行排序,形成的列表為['code','language'...]
contentWordsSortbyFreq=sortByFreqThenDropFreq(contentWordFrequences)
//將文章分成句子
sentences=getSentences(originalText)
//選擇關鍵詞首先出現的句子
setSummarySentences={}
:
firstMatchingSentence=search(sentences,word)
setSummarySentences.add(firstMatchingSentence)
ifsetSummarySentences.size()=maxSummarySize:
break
//將選中的句子按照出現順序,組成摘要
summary=""
foreachsentenceinsentences:
:
summary=summary+""+sentence
returnsummary


類似的演算法已經被寫成了工具,比如基於Java的Classifier4J庫的SimpleSummariser模塊、基於C語言的OTS庫、以及基於classifier4J的C#實現和python實現。

⑶ 能夠用於tf-idf的語料庫(python學習).

您好,推薦使用CRAFT語料庫
CRAFT(Colorado Richly Annotated Full-Text)語料庫,中文名科羅拉多豐富語料注釋庫。CRAFT收錄了97篇可公開獲取全文的生物醫學期刊文獻,並將這些文章在語義和句法上都作了詳盡的注釋以作為自然語言處理(NLP)社區的生物醫學研究資源。CRAFT基於9個常用的生物醫學本體,從這97篇文獻中識別了所有的生物學實體,這些本體包括:細胞類型本體,小分子化合物本體(CHEBI),NCBI分類法,蛋白質本體,序列本體,Entrez Gene資料庫的條目,以及基因本體(Gene Ontology)的三個子條目。CRAFT語料庫已被廣泛應用於對文本挖掘工具的性能測試中。當然也可以用於TF-IDF方法。
TF-IDF(term frequency–inverse document frequency)是一種用於信息檢索與數據挖掘的常用加權技術。TF意思是詞頻(Term Frequency),IDF意思是逆文本頻率指數(Inverse Document Frequency)。TF-IDF是一種統計方法,用以評估一字詞對於一個文件集或一個語料庫中的其中一份文件的重要程度。字詞的重要性隨著它在文件中出現的次數成正比增加,但同時會隨著它在語料庫中出現的頻率成反比下降。TF-IDF加權的各種形式常被搜索引擎應用,作為文件與用戶查詢之間相關程度的度量或評級。

⑷ 關鍵詞提取算不算自然語言處理的任務


⾃然語⾔處理(⼀)--關鍵詞提取

最近學習使⽤了傳統的⾃然語⾔處理技術進⾏關鍵詞的提取,接下來我介紹⼀下兩種常⽤的演算法:TFIDF和TextRank。⽬前BiLSTM 也可以⽤於提取⽂本關鍵詞,有空再學。

1.TF-IDF

TF-IDF(term frequency-inverse document frequency)是⼀種⽤於信息檢索與數據挖掘的常⽤加權技術。TF-IDF是⼀種統計⽅法,⽤來評估⼀個字詞對於⼀個⽂件集或語料庫中的⼀份⽂件的重要程度。

⾸先解釋⼀下TF-IDF的意思:

TF(term frequency):詞語在⼀篇⽂章中出現的頻率

IDF(inverse document frequency):反⽂檔頻率,與詞語在其他⽂檔中出現的頻率負相關

TF-IDF的主要思想是:如果某個詞或短語在⼀篇⽂章中出現的頻率⾼,即TF值⾼;並且在其他⽂章中很少出現,即IDF值⾼,那麼認為這個詞或短語具有很好的類別區分能⼒,適合作為該⽂章的關鍵詞。

TF-IDF的具體計算公式為:

⽂檔中詞的tfidf值越⾼,便認為該詞越可以代表該⽂檔的主題。TF-IDF演算法的python實現如下,同時jieba庫中也實現了TF-IDF,有興趣的話也可以去了解⼀下。

# TF-IDf演算法python實現

import re

import math

# 獲取⼀個⽂檔中每個詞的TF值,doc參數保存⽂檔中的句⼦列表,返回單詞與其tf值的字典

# ⾸先對⽂檔中的單詞進⾏切分,然後統計每個詞的詞頻

def GetWordTF(doc):

words_count =0# 單詞總數

words_map ={}# 單詞與單詞數的映射

tf_map ={}# tf值映射詞典,格式: tf_map[word] = tf_word

for sentence in doc:# 遍歷⽂檔中的每個句⼦

# 單詞的切分⽅式可以根據所給的數據格式進⾏修改

# 我將提取英⽂句⼦中的每個單詞,使⽤正則表達式提取並去除空字元串

words_arr =[word for word in re.split(r'\W+',sentence)if word]

words_count +=len(words_arr)# 統計有效詞的總長度

for word in words_arr:# 遍歷每⼀個詞並進⾏統計單詞數

words_map[word]= words_map.get(word,0)+1

for key,val in words_map.items():# 計算每個單詞的tf值

tf_map[key]= val / words_count

return tf_map

# 獲取⽂檔每個單詞在⽂檔集docSet中的IDF值映射

def GetWordIDF(tfMap,docSet):

docs_num =len(docSet)# ⽂檔集中⽂檔的總數

word_doc_num ={}# 包含word的⽂檔數,格式為word_doc_num[word] = num of doc that contains word

idf_map ={}# idf值映射字典,格式idf_map[word] = idf_word

for key,val in tfMap.items():# 遍歷⽂檔中出現的單詞

for doc in docSet:# 遍歷每個⽂檔,檢查該⽂檔中是否出現了單詞key

for sentence in doc:# 遍歷⽂檔中的每個句⼦

words_arr =[word for word in re.split(r'\W+', sentence)if word]# 提取句⼦中的每個單詞

if key in words_arr:# 如果該⽂檔中有該詞,則統計

word_doc_num[key]= word_doc_num.get(key,0)+1

break

for key,val in word_doc_num.items():# 計算每個單詞的idf值

idf_map[key]= math.log(docs_num / val)

return idf_map

# 使⽤TFIDF演算法獲取⽂檔的前topNum個關鍵詞,其中每個⽂檔是以列表表⽰的,列表項為⽂檔的⼀個句⼦

def GetKeywordsByTFIDF(entityDescriptionList,docSet,topNum):

tf_map = GetWordTF(entityDescriptionList)# 獲取每個單詞的tf值

idf_map = GetWordIDF(tf_map,docSet)# 獲取每個單詞的idf值

tfidf_map ={}

for key,val in tf_map.items():# 計算每個詞的tfidf值

tfidf_map[key]= tf_map[key]* idf_map[key]

tfidf_sorted_list =sorted(tfidf_map.items(),key =lambda x:x[1],reverse=True)# 將字典按值從⼤到⼩排序

if topNum >len(tfidf_sorted_list):# 保證topNum不⼤於⽂檔中詞的總數

topNum =len(tfidf_sorted_list)

keywords =[]# 保存⽂檔的前topNum個關鍵字

for i in range(topNum):

keywords.append(tfidf_sorted_list[i][0])# 關鍵字保存在元組的第0個元素中

return keywords

2.TextRank

TF-IDF演算法對於有多段⽂本的關鍵詞提取⾮常有效,但是對於單篇或⽂檔集較少的⽂本則表現得不很好。對於單篇⽂檔,可以使⽤TextRank演算法實現關鍵詞提取。

TextRank是⼀種基於圖排序的演算法,思想源於⾕歌的PageRank演算法,通過把⽂本分割為若⼲組成單元(單詞、句⼦)並建⽴圖模型,利⽤投票機制對⽂本中的重要成分進⾏排序,僅利⽤單篇⽂檔本⾝的信息即可實現關鍵詞提取。

TextRank利⽤投票的原理,讓每⼀個單詞給它的鄰居投贊成票,票的權重取決於⾃⼰的票數。假設每⼀個詞是⼀個頂點(Vertex),那麼所有的詞就構成了⼀個⽹絡,這個⽹絡⾥⾯每個頂點會有指向其他頂點的邊,也會有其他頂點指向⾃⼰的邊。通過計算每個頂點所連接的指向⾃⼰的頂點的權重和,最終得到該頂點的權重值。

TextRank存在的主要問題是初始值的確定,為了後續計算的簡便性,這⾥會給初值賦為⼀個⾮0值。同時,引⼊了⼀個阻尼系數的概念,該參數表⽰從某⼀個指定的頂點,到任意⼀個其他頂點的概率。TextRank的具體公式如下:

於是,使⽤TextRank演算法提取關鍵詞時,⾸先需要把圖構建出來。圖的節點就是單詞,⾄於邊可以利⽤n-gram的思路,認為某個單詞只與它附近的n個單詞有關,即與它附近的n個詞對應的節點連⼀條⽆向邊。也可以做⼀些其他操作,⽐如把某類詞性的詞刪掉,⼀些⾃定義詞刪掉,只保留⼀部分單詞等。我的代碼實現中,假設每個長為k的滑動窗⼝中的任意兩個單詞對應的節點之間存在⼀條⽆向⽆權邊。當構圖成功後,就可以使⽤上述公式進⾏迭代求解了。Python實現的代碼如下:

# 使⽤TextRank演算法實現關鍵詞提取,返回關鍵詞列表,參數含義如下:

# sentence 保存待提取關鍵字的句⼦

# windowLength 保存滑動窗⼝的⼤⼩

# topNum 表⽰需要返回排名前topNum的關鍵詞

# d 表⽰textrank演算法的阻尼系數,默認為0.85

# maxIter 表⽰演算法最⼤迭代次數

# minDiff 迭代後變化值⼩於minDiff時也停⽌迭代

def GetKeywordsByTextRank(sentence,windowLength,topNum=3,d=0.85,maxIter=10000,minDiff=0.0001):

# 單詞的切分⽅式可以根據所給的數據格式進⾏修改

# 我將提取英⽂句⼦中的每個單詞,使⽤正則表達式提取並去除空字元串

words_arr =[word for word in re.split(r'\W+', sentence)if word]

words_num =len(words_arr)# 句⼦的長度

word_graph ={}# 保存每個單詞的連接狀態,格式為word_graph[word] = [與該詞存在邊的單詞的集合]

textrank_map ={}# 保存每個textrank值的字典,格式為textrank_map[word] = textrank value of the word

textrank_map_t ={}# ⽤於保存前⼀次迭代的tankrank結果

for words_index in range(words_num):# 遍歷句⼦中的每個單詞,開始根據給定的窗⼝值構圖

textrank_map[words_arr[words_index]]=1- d # 為每個詞初始化⼀個textrank值

window_lower =max(0, words_index - windowLength)# 滑動窗⼝的下邊界

window_upper =min(words_num, words_index + windowLength)# 滑動窗⼝的上邊界

for window_index in range(window_lower,window_upper):# 遍歷窗⼝中的單詞,構建單詞的連接關系

if window_index == words_index:# ⾃⼰與⾃⼰認為沒有邊

continue

if not words_arr[window_index]in word_graph.get(words_arr[words_index],[]):# 檢查兩詞節點之間是否有邊

if word_graph.get(words_arr[words_index],0)==0:# 檢查該詞的邊集是否為空

word_graph[words_arr[words_index]]=[words_arr[window_index]]# 為空則⽣成包含該點的邊集

else:

word_graph[words_arr[words_index]].append(words_arr[window_index])# 將該邊添加到邊集中

for iter_i in range(maxIter):# 利⽤textrank計算公式迭代計算

max_diff =0# 表⽰迭代前後兩次的變化

for word,neibor_list in word_graph.items():# 遍歷每個單詞

for con_word in neibor_list:# 遍歷與每個單詞存在相鄰關系的單詞

con_word_out_len =len(word_graph[con_word])# 計算當前節點連接的節點個數

if word == con_word or con_word_out_len ==0:

continue# 如果是該節點本⾝或⽆連出節點則不更新

# 使⽤公式對textrank值進⾏更新

textrank_map[word]=1- d + d * textrank_map_t.get(con_word,0)/con_word_out_len

max_diff =max(max_diff,abs(textrank_map[word]-textrank_map_t.get(word,0)))

for word,val in textrank_map.items():

textrank_map_t[word]= val

if(max_diff < minDiff):# 各個單詞節點的textrank值如果均⽆明顯變化,則可結束迭代

break

textrank_sorted_list =sorted(textrank_map.items(),key=lambda x:x[1],reverse=True)# 按照textrank值從⼤到⼩排序

if topNum >len(textrank_sorted_list):# 保證topNum不⼤於⽂檔中詞的總數

topNum =len(textrank_sorted_list)

if topNum <1:# 保證topNum⼤於0

topNum =1

keywords =[]# 保存將要返回的關鍵詞

for i in range(topNum):

keywords.append(textrank_sorted_list[i][0])

return keywords

可以看出TextRank演算法對於⼀段⽂本中多次出現的詞,會賦予更⼤的權重,因為它連出的節點更多,所以當各個節點初始權重⼀致時,則最終出現次數最多的詞權重就會更⼤。這也會使該演算法對類似於「的」、「你、我、他」等常⽤詞,會出現⽐較⼤的誤差。對於這種情況,可以在最開始構建邊時進⾏處理,去掉⼀些停⽤詞或者選擇⾃⼰需要的詞性的詞,從⽽得出實際有⽤的詞語。

後記:前端暫時不⽀持Latex,公式我只能貼圖了。深度學習最近⽐較流⾏,還有很多需要學的呀!

網路文庫VIP已幫您省69元現在恢復最低僅需0.3元/天​
​立即續費​
自然語言處理(一)--關鍵詞提取
⾃然語⾔處理(⼀)--關鍵詞提取

最近學習使⽤了傳統的⾃然語⾔處理技術進⾏關鍵詞的提取,接下來我介紹⼀下兩種常⽤的演算法:TFIDF和TextRank。⽬前BiLSTM 也可以⽤於提取⽂本關鍵詞,有空再學。

1.TF-IDF

TF-IDF(term frequency-inverse document frequency)是⼀種⽤於信息檢索與數據挖掘的常⽤加權技術。TF-IDF是⼀種統計⽅法,⽤來評估⼀個字詞對於⼀個⽂件集或語料庫中的⼀份⽂件的重要程度。

⑸ 用python採用TF IDF實現從多個文本文檔中選出特徵詞應該怎樣實現

最簡單的就是自己分詞,統計詞頻,獲取公式需要的相關數據,計算tfidf之後,判斷文檔下相關度最高的詞就行了

⑹ 請教一下Python中models.TfidfModel的用法

中括弧可以表示取字典的某個鍵對應的值,也可以表示列表的某個元素
你這代碼應該是人工智慧相關的吧,這里重點並不是python,而是相關數學知識

⑺ python怎樣對tfidf計算出來的權值進行排序'

1.使用python+selenium分析dom結構爬取網路|互動網路文本摘要信息;
2.使用jieba結巴分詞對文本進行中文分詞,同時插入字典關於關鍵詞;
3.scikit-learn對文本內容進行tfidf計算並構造N*M矩陣(N個文檔 M個特徵詞);
4.再使用K-means進行文本聚類(省略特徵詞過來降維過程);
5.最後對聚類的結果進行簡單的文本處理,按類簇歸類,也可以計算P/R/F特徵值;
6.總結這篇論文及K-means的缺點及知識圖譜的一些內容。

⑻ TF-IDF計算過程

本文內容主要摘自python  machine  learning  2nd   edition

1、假設我們有以下三個文本

• 'The sun is shining'

•  'The weather is sweet'

•  'The sun is shining, the weather is sweet, and one and one is  two

2、利用CountVectorizer類得到如下字典

{'and': 0,'two': 7,'shining': 3,'one': 2,'sun': 4,'weather': 8,'the': 6,'sweet': 5, 'is': 1 }

3、將步驟1的文檔轉換為矩陣

[[0 1 0 1 1 0 1 0 0]

[0 1 0 0 0 1 1 0 1]

[2 3 2 1 1 1 2 1 1]]

4.計算tf-idf值

我們以is為例進行計算,is對應的是矩陣第二列。

tf值,表示term在該文本中出現的次數,這里即is在文本3出現的次數,很容易看出是3.

idf值,sklearn做了小小的改動,公式是 (1+log ).  的意思就是文本總數(number of  document),df(d,t)表示包含is 的文件數目,很明顯,這里也是3.這樣,計算的結果為3*(1+log )=3.

需要注意的是,sklearn對結果進行了正則化處理。

最終得到的結果為

[[ 0.   0.43    0. 0.56 0.56  0.    0.43    0.    0. ]

[ 0.   0.43    0.   0.   0.    0.56 0.43  0.   0.56]

[ 0.5 0.45    0.5 0.19 0.19 0.19 0.3 0.25 0.19]]

每一行的平方和均為1,這是l2正則化處理的結果。

另外可以看出,原先is的詞頻是 1 1 3,最終tf-idf值是0.43 0.43 0.45 。

⑼ tf-idf演算法python實現

tf-idf=tf*idf
tf是詞頻,若一個文件中有n個次,詞word出現c次;,則tf=c/n
idf是逆文檔概率,一共有N個文件,詞word在w個文檔中出現,則idf=w/N

⑽ Python語言下的機器學習庫

Python語言下的機器學習庫
Python是最好的編程語言之一,在科學計算中用途廣泛:計算機視覺、人工智慧、數學、天文等。它同樣適用於機器學習也是意料之中的事。當然,它也有些缺點;其中一個是工具和庫過於分散。如果你是擁有unix思維(unix-minded)的人,你會覺得每個工具只做一件事並且把它做好是非常方便的。但是你也需要知道不同庫和工具的優缺點,這樣在構建系統時才能做出合理的決策。工具本身不能改善系統或產品,但是使用正確的工具,我們可以工作得更高效,生產率更高。因此了解正確的工具,對你的工作領域是非常重要的。
這篇文章的目的就是列舉並描述Python可用的最有用的機器學習工具和庫。這個列表中,我們不要求這些庫是用Python寫的,只要有Python介面就夠了。我們在最後也有一小節關於深度學習(Deep Learning)的內容,因為它最近也吸引了相當多的關注。
我們的目的不是列出Python中所有機器學習庫(搜索「機器學習」時Python包索引(PyPI)返回了139個結果),而是列出我們所知的有用並且維護良好的那些。另外,盡管有些模塊可以用於多種機器學習任務,我們只列出主要焦點在機器學習的庫。比如,雖然Scipy包含一些聚類演算法,但是它的主焦點不是機器學習而是全面的科學計算工具集。因此我們排除了Scipy(盡管我們也使用它!)。
另一個需要提到的是,我們同樣會根據與其他科學計算庫的集成效果來評估這些庫,因為機器學習(有監督的或者無監督的)也是數據處理系統的一部分。如果你使用的庫與數據處理系統其他的庫不相配,你就要花大量時間創建不同庫之間的中間層。在工具集中有個很棒的庫很重要,但這個庫能與其他庫良好集成也同樣重要。
如果你擅長其他語言,但也想使用Python包,我們也簡單地描述如何與Python進行集成來使用這篇文章列出的庫。
Scikit-LearnScikit Learn是我們在CB Insights選用的機器學習工具。我們用它進行分類、特徵選擇、特徵提取和聚集。我們最愛的一點是它擁有易用的一致性API,並提供了很多開箱可用的求值、診斷和交叉驗證方法(是不是聽起來很熟悉?Python也提供了「電池已備(譯註:指開箱可用)」的方法)。錦上添花的是它底層使用Scipy數據結構,與Python中其餘使用Scipy、Numpy、Pandas和Matplotlib進行科學計算的部分適應地很好。因此,如果你想可視化分類器的性能(比如,使用精確率與反饋率(precision-recall)圖表,或者接收者操作特徵(Receiver Operating Characteristics,ROC)曲線),Matplotlib可以幫助進行快速可視化。考慮到花在清理和構造數據的時間,使用這個庫會非常方便,因為它可以緊密集成到其他科學計算包上。
另外,它還包含有限的自然語言處理特徵提取能力,以及詞袋(bag of words)、tfidf(Term Frequency Inverse Document Frequency演算法)、預處理(停用詞/stop-words,自定義預處理,分析器)。此外,如果你想快速對小數據集(toy dataset)進行不同基準測試的話,它自帶的數據集模塊提供了常見和有用的數據集。你還可以根據這些數據集創建自己的小數據集,這樣在將模型應用到真實世界中之前,你可以按照自己的目的來檢驗模型是否符合期望。對參數最優化和參數調整,它也提供了網格搜索和隨機搜索。如果沒有強大的社區支持,或者維護得不好,這些特性都不可能實現。我們期盼它的第一個穩定發布版。
StatsmodelsStatsmodels是另一個聚焦在統計模型上的強大的庫,主要用於預測性和探索性分析。如果你想擬合線性模型、進行統計分析,或者預測性建模,那麼Statsmodels非常適合。它提供的統計測試相當全面,覆蓋了大部分情況的驗證任務。如果你是R或者S的用戶,它也提供了某些統計模型的R語法。它的模型同時也接受Numpy數組和Pandas數據幀,讓中間數據結構成為過去!
PyMCPyMC是做貝葉斯曲線的工具。它包含貝葉斯模型、統計分布和模型收斂的診斷工具,也包含一些層次模型。如果想進行貝葉斯分析,你應該看看。
ShogunShogun是個聚焦在支持向量機(Support Vector Machines, SVM)上的機器學習工具箱,用C++編寫。它正處於積極開發和維護中,提供了Python介面,也是文檔化最好的介面。但是,相對於Scikit-learn,我們發現它的API比較難用。而且,也沒提供很多開箱可用的診斷和求值演算法。但是,速度是個很大的優勢。
GensimGensim被定義為「人們的主題建模工具(topic modeling for humans)」。它的主頁上描述,其焦點是狄利克雷劃分(Latent Dirichlet Allocation, LDA)及變體。不同於其他包,它支持自然語言處理,能將NLP和其他機器學習演算法更容易組合在一起。如果你的領域在NLP,並想進行聚集和基本的分類,你可以看看。目前,它們引入了Google的基於遞歸神經網路(Recurrent Neural Network)的文本表示法word2vec。這個庫只使用Python編寫。
OrangeOrange是這篇文章列舉的所有庫中唯一帶有圖形用戶界面(Graphical User Interface,GUI)的。對分類、聚集和特徵選擇方法而言,它是相當全面的,還有些交叉驗證的方法。在某些方面比Scikit-learn還要好(分類方法、一些預處理能力),但與其他科學計算系統(Numpy, Scipy, Matplotlib, Pandas)的適配上比不上Scikit-learn。但是,包含GUI是個很重要的優勢。你可以可視化交叉驗證的結果、模型和特徵選擇方法(某些功能需要安裝Graphviz)。對大多數演算法,Orange都有自己的數據結構,所以你需要將數據包裝成Orange兼容的數據結構,這使得其學習曲線更陡。
PyMVPAPyMVPA是另一個統計學習庫,API上與Scikit-learn很像。包含交叉驗證和診斷工具,但是沒有Scikit-learn全面。
深度學習盡管深度學習是機器學習的一個子節,我們在這里創建單獨一節的原因是,它最新吸引了Google和Facebook人才招聘部門的很多注意。
TheanoTheano是最成熟的深度學習庫。它提供了不錯的數據結構(張量,tensor)來表示神經網路的層,對線性代數來說很高效,與Numpy的數組類似。需要注意的是,它的API可能不是很直觀,用戶的學習曲線會很高。有很多基於Theano的庫都在利用其數據結構。它同時支持開箱可用的GPU編程。
PyLearn2還有另外一個基於Theano的庫,PyLearn2,它給Theano引入了模塊化和可配置性,你可以通過不同的配置文件來創建神經網路,這樣嘗試不同的參數會更容易。可以說,如果分離神經網路的參數和屬性到配置文件,它的模塊化能力更強大。
DecafDecaf是最近由UC Berkeley發布的深度學習庫,在Imagenet分類挑戰中測試發現,其神經網路實現是很先進的(state of art)。
Nolearn如果你想在深度學習中也能使用優秀的Scikit-learn庫API,封裝了Decaf的Nolearn會讓你能夠更輕松地使用它。它是對Decaf的包裝,與Scikit-learn兼容(大部分),使得Decaf更不可思議。
OverFeatOverFeat是最近貓vs.狗(kaggle挑戰)的勝利者,它使用C++編寫,也包含一個Python包裝器(還有Matlab和Lua)。通過Torch庫使用GPU,所以速度很快。也贏得了ImageNet分類的檢測和本地化挑戰。如果你的領域是計算機視覺,你可能需要看看。
HebelHebel是另一個帶有GPU支持的神經網路庫,開箱可用。你可以通過YAML文件(與Pylearn2類似)決定神經網路的屬性,提供了將神級網路和代碼友好分離的方式,可以快速地運行模型。由於開發不久,就深度和廣度上說,文檔很匱乏。就神經網路模型來說,也是有局限的,因為只支持一種神經網路模型(正向反饋,feed-forward)。但是,它是用純Python編寫,將會是很友好的庫,因為包含很多實用函數,比如調度器和監視器,其他庫中我們並沒有發現這些功能。
NeurolabNeuroLab是另一個API友好(與Matlabapi類似)的神經網路庫。與其他庫不同,它包含遞歸神經網路(Recurrent Neural Network,RNN)實現的不同變體。如果你想使用RNN,這個庫是同類API中最好的選擇之一。
與其他語言集成你不了解Python但是很擅長其他語言?不要絕望!Python(還有其他)的一個強項就是它是一個完美的膠水語言,你可以使用自己常用的編程語言,通過Python來訪問這些庫。以下適合各種編程語言的包可以用於將其他語言與Python組合到一起:R -> RPythonMatlab -> matpythonJava -> JythonLua -> Lunatic PythonJulia -> PyCall.jl
不活躍的庫這些庫超過一年沒有發布任何更新,我們列出是因為你有可能會有用,但是這些庫不太可能會進行BUG修復,特別是未來進行增強。MDPMlPyFFnetPyBrain如果我們遺漏了你最愛的Python機器學習包,通過評論讓我們知道。我們很樂意將其添加到文章中。

熱點內容
sql創建鏈接 發布:2025-07-08 00:08:38 瀏覽:398
ftp上傳中斷 發布:2025-07-08 00:08:37 瀏覽:641
linux雲計算課程 發布:2025-07-08 00:07:23 瀏覽:23
安卓網易雲怎麼發布歌曲 發布:2025-07-07 23:42:29 瀏覽:626
安卓內存讀取腳本 發布:2025-07-07 23:42:19 瀏覽:871
python27漢化 發布:2025-07-07 23:42:18 瀏覽:721
源碼鎖屏 發布:2025-07-07 23:26:52 瀏覽:944
手機版編程軟體 發布:2025-07-07 22:57:22 瀏覽:122
linux下執行sh腳本 發布:2025-07-07 22:49:00 瀏覽:127
雲盤怎麼存儲資料 發布:2025-07-07 22:49:00 瀏覽:915