python數據分析工具——Keras、Gensim

python數據分析工具——Keras、Gensim

Keras

雖然 scikit-learn足夠強大,但是它並沒有包含一種強大的模型—人工神經網絡。人工神經網絡是功能相當強大的、但是原理又相當簡單的模型,在語言處理、圖像識別等領域有著重要的作用。近年來逐漸火起來的“深度學習”算法,本質上也就是一種神經網絡,可見在 Python中實現神經網絡是非常必要的。

python可以使用Keras庫來搭建神經網絡。事實上, Keras並非簡單的神經網絡庫,而是一個基於 Theano的強大的深度學習庫,利用它不僅僅可以搭建普通的神經網絡,還可以搭建各種深度學習模型,如自編碼器、循環神經網絡、遞歸神經網絡、卷積神經網絡等。由於它是基於 Theano的,因此速度也相當快。

Theano,也是 Python的一個庫,它是由深度學習專家 Yoshua Bengio帶領的實驗室開發出來的,用來定義、優化和高效地解決多維數組數據對應數學表達式的模擬估計問題。它具有高效地實現符號分解、高度優化的速度和穩定性等特點,最重要的是它還實現了GPU加速,使得密集型數據的處理速度是CPU的數十倍。

用 Theano就可以搭建起高效的神經網絡模型,但是對於一般開發者來說門檻還是相當高的, Keras正是為此而生,它大大簡化了搭建各種神經網絡模型的步驟,允許普通用戶輕鬆地搭建並求解具有幾百個輸入節點的深層神經網絡,而且定製的自由度非常大,甚至可能驚呼:搭建神經網絡可以如此簡單!

安裝 Keras之前首先需要安裝 Numpy、 Scipy和 Theano。安裝 Theano先要準備一個C++編譯器,這在 Linux下是自帶的。因此,在 Linux下安裝 Theano和 Keras非常簡單,只需要下載源代碼,然後用 python setup.py install安裝就行了,具體可以參考官方文檔。

可是在 Windows下就沒有那麼簡單了,因為它沒有現成的編譯環境。一般而言是先安裝Mingw( Windows下的GCC和G+),然後再安裝 Theano(提前裝好 Numpy等依賴庫),最後安裝 Keras。如果要實現GPU加速,還需要安裝和配置CUDA(天下沒有免費的午餐,想要速度、易用兩不誤,那麼就得花點心思),這裡就不做詳細介紹了。

值得一提的是,在 Windows下 Keras的速度會大打折扣,因此,想要在神經網絡和深度學習方面進行深入研究的讀者,請在 Linux下搭建相應的環境。

參考鏈接:

http://deeplearning.net/software/theano/install.html#install

https://github.com/keras-team/keras

用 Keras搭建神經網絡模型的過程相當簡潔,也相當直觀,就像搭積木一般。通過短短几十行代碼,我們就可以搭建起一個非常強大的神經網絡模型,甚至是深度學習模型。簡單搭建一個MLP(多層感知器),如下:

# -*- coding:utf-8 -*-

from keras.models import Sequential

from keras,.layers. core import Dense, Dropout, Activation

from keras optimizers import SGD

model= Sequential() #模型初始化

model.add( Dense(20,64)) #添加輸入層(20節點)、第一隱藏層(64節點)的連接

model.add(Activation('tanh')) #第一隱藏層用tanh作為激活函數

model,add( Dropout(0.5)) #使用 Dropout防止過擬合

mode1.add(Dense(64,64)) #添加第一隱藏層(64節點)、第二隱藏層(64節點)的連接

model.add(Activation('tanh')) #第二隱藏層用tanh作為激活函數

model.add(Dropout(0.5)) #使用 Dropout防止過擬合

model.add(Dense(64,1)) #添加第二隱藏層(64節點)、輸出層(1節點)的連接

model.add(Activation(' sigmoid’)) #輸出層用 sigmoid作為激活函數

sgd=SGD(1x=0.1, decay=1e-6, momentum=0.9, nesterov=True) #定義求解算法

model. compile(loss='mean_ squared error', optimizer=sgd) #編譯生成模型,損失函數為平均誤差平方和

model.fit(x_train; y_train, nb_epoch=20, batch_size=16)#訓練模型

score= model.evaluate(x_test, y_test, batch_size=16)#測試模型

要注意的是, Keras的預測函數與 scikit-leart有所差別, Keras用 model predict0方法給出概率, model predict classes方法給出分類結果。

Gensim

Gensim是用來處理語言方面的任務,如文本相似度計算、LDA、Word2vec等,這些領域的任務往往需要比較多的背景知識,通常的情況是:研究這方面的讀者,已經不需我再多說什麼;不研究這方面的讀者,在這裡也說不清楚。

因此,在這裡只是提醒讀者有這麼一個庫的存在,而且這個庫很強大,如果用得到這個庫,請讀者去閱讀官方幫助文檔或參考鏈接。

需要一提的是, Gensim把 Google公司在2013年開源的著名的詞向量構造工具Word2vec編譯好了作為它的子庫,因此需要用到Word2vec的讀者也可以直接用 Gensim而無需自行編譯了。據說 Gensim的作者對 Word2vec的代碼進行了優化,據說它在 Genin下的表現比原生的 Word2vec還要快。(為了實現加速,需要準備C++編譯器環境,因此,建議用到Genin的Word2vec的讀者在 Linux下環境運行。)

下面是一個 Gensim使用Word2vec的簡單例子。

# -*- coding:utf-8 -*-

import gensim, logging

logging. basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging. INFO)#logging是用來輸出訓練日誌

#分好詞的句子,每個句子以詞列表的形式輸入

sentences =[['first', 'sentence'],[' second', 'sentence']]

#用以上句子訓練詞向量模型

model= gensim models.Word2vec(sentences, min_count=1)

print(model[' sentence'])#輸出單詞 sentence的詞向量。

關於Python的軟件安裝、使用入門及相關注意事項和 Python數據分析及挖掘相關工具箱,就介紹到到這裡。由於 Python包含多個領域域的擴展庫,而且擴展庫的功能也相當豐富,這裡只介紹與數據分析及數據挖掘相關的一小部分,包括高維數組、數值計算、可視化、機器學習、神經網絡和語言模型等。這些擴展庫裡面包含的函數在今後的學習中會進一步實例分析。


分享到:


相關文章: