深度學習:用tensorflow建立線性迴歸模型
1. TensorFlow 是什麼
是一個深度學習庫,由 Google 開源,可以對定義在 Tensor(張量)上的函式自動求導。
Tensor(張量)意味著 N 維陣列,Flow(流)意味著基於資料流圖的計算,TensorFlow即為張量從圖的一端流動到另一端。
它的一大亮點是支援異構裝置分散式計算,它能夠在各個平臺上自動執行模型,從電話、單個CPU / GPU到成百上千GPU卡組成的分散式系統。
支援CNN、RNN和LSTM演算法,是目前在 Image,NLP 最流行的深度神經網路模型。
一週之前我連tensorflow、scikit-learn是什麼都不清楚,也不知道資料探勘分為傳統機器學習(scikit-learn)跟深度學習(tensorflow),但是不重要嘛,偉大的毛主席教導我們“戰略上藐視敵人,戰術上重視敵人”,不就是工具麼,不會造輪子了,本姑娘還不會用輪子麼?
不知道會不會有人質疑,人家問tensorflow,你說什麼scikit-learn,我回答就是找感覺,畢竟機器學習比深度學習看起來更接地氣一些。我先在我的電腦上安裝了,numpy、scipy、matplotlib這幾個基礎的python庫,然後numpy的基礎用法自己敲了一遍。為啥,因為我首先要知道矩陣也就是所謂的特徵,是個什麼樣子,最基礎的東西吧。順便複習一下高等資料矩陣部分。瞭解一下scipy裡面的前三個問題‘最小二乘擬合、函式最小值、非線形方程組求解’,這個部分會涉及到求導、函式微分的知識。其實我覺得倒數第二部分‘濾波器設計’應該也看一下,因為是神經網路很重要的一部分。matplotlib就是圖形化顯示,我覺得會用就行。
我是有條主線,然後不會的就在網上查,部落格啊什麼的,有的一個知識點不同人有很多不同的解釋,看不懂那個解釋,就再找另一個解釋,有時候突然就能想通。我之前看過一篇解釋傅立葉變換的文章,其實說到已經很清楚了,但當時就是轉不過視角來,後來有一天看神經網路的文章,就是解釋關於過濾不重要資訊的一個問題,突然兩個解釋一結合,兩個問題都想通了。
我大概學了‘協同過濾、主成分分析、k-means、svm、決策樹、線性迴歸、邏輯迴歸’這幾種演算法。
真正專案應該是幾種演算法的協同作戰,比如先用主成分分析找出重要的特徵,在進行下一步的線性擬合等。
我對這幾種演算法的的程度就是能寫出數學公式,以及為什麼要用這個數學公式,比如協同過濾求相似係數有很多中方法,歐幾里得、皮爾遜相似,歐幾里得不說了,兩點間的距離。皮爾遜相似跟歐幾里得比的好處是什麼,以及皮爾遜相似是協方差跟標準差的比,這裡又要複習一下期望、方差、標準差、均值等數學知識。其他類似。
每學到一個演算法都去網上找相應的小例子實現,輔助理解,加深記憶,更重要的是增強自信。而且這樣呼叫框架的時候就不覺得跟變魔術似的了。打個比方,自己實現決策樹的資訊增益比(c4.5)比較麻煩,但是實現一個協同過濾的歐幾里得很簡單吧,但是這樣心裡就會有數,不管看起來多複雜的演算法,就是這樣由一些簡單的數學公式堆砌的。
然後我就安裝了scikit-learn,有個推薦電影的例子,資料集、程式碼都是現成的、每個函式都要理解、不會就查,執行出結果我覺得這就算入門啦。
tensorflow好像主要是做用來做神經網路的吧,我就是用cnn實現了一個驗證碼識別,網上有例項。對cnn的理解,網上文章特別多,多看看總能找到一個自己能理解的角度。還有幾種常見的損失函式。為什麼選sigmoid函式,而不選softmax函式,我看過一篇非常好的文章,找不到連結了。
當然還有些細節沒提到,但是,我覺得這就算“入門”啦! 至於什麼清洗、特徵選取、調優……來日方長嘛~!
以下是用tensorflow建立線性迴歸模型,會python語言都看得懂,很簡單!