網頁

2019年6月30日 星期日

A Beginner Intro to Neural Networks

What are Neural networks?
神經網絡是受人類brian功能啟發的演算法。 一般來說,當你睜開眼睛時,你所看到的就是所謂的數據,由大腦中的Nuerons(數據處理細胞)處理,並識別你身邊的東西。 這就是神經網絡的工作方式。 它們獲取大量數據,處理數據(從數據中提取模式),並輸出它的內容。

What they do ?
神經網絡有時被稱為人工神經網絡(ANN),因為它們不像大腦中的神經元那樣自然。 它們巧妙地模仿了神經網絡的本質和功能。 ANN由大量高度互連的處理元件(神經元)組成,它們協同工作以解決特定問題。

人工神經網絡就像人一樣,他們甚至可以通過實例來學習。 ANN被配置用於特定應用,例如模式識別(pattern recognition)或數據分類(data classification),圖像識別(Image recognition),語音識別(voice recognition)。

神經網絡(NN)是通用函數近似(universal function approximaters),因此神經網絡可以學習任何函數f()的近似值。

y = f(x)



你可以在這裡查看其他幾個神經網絡。

[補充1] Universal approximation theorem


Universal approximation theorem:用一層隱藏層的神經網絡,若使用的激勵函數具有單調遞增、有上下界、非常數且連續的性質,則總是存在一個擁有有限N個神經元的單隱藏層神經網絡可以無限逼近這個連續函數(鮑萊耳可測函數)。

但這個定理沒有說在這個神經網路裡的參數要怎麼學,只知道隱藏層的寬度會隨著問題複雜度提升變得非常大,因此,增加網絡深度的原因正是為了可以用更少的參數量實現同樣的逼近。

[補充2] 無免費午餐定理 No Free Lunch Theorem



無免費午餐定理:最佳化演算法的總體效能並無法定義孰優孰劣,也就是說,不存在一個對所有問題具有普遍優勢的演算法;換一個樂觀一點的說法:一定存在某個演算法在解某種問題時表現最好。

這可以回答激勵函數選擇上,或任意最佳化演算法設計上的問題;不可能有一個最好的最佳化演算法設計適合所有的任務。

參考
https://mropengate.blogspot.com/2017/02/deep-learning-role-of-activation.html

Why use Neural networks?
神經網絡具有從複雜或不精確的數據中獲得意義的顯著能力,可用於提取模式並檢測過於複雜而無法被人類或其他計算機技術注意到的趨勢。 訓練有素的神經網絡被認為是分析類別中的“專家”。 然後,在感興趣的新情況的情況下可以使用該專家提供預測並回答“假設”問題。

其他優點包括:
1.Adaptive learning:根據訓練或初始經驗提供的數據,學習如何完成任務的能力。
2.Self-Organisation:人工神經網絡可以創建自己的組織(organisation)或在學習期間收到資訊的表示(representation)。

Network layers
人工神經網絡最常見類型由三個單元groups或單元layers組成:一層“輸入”單元連接到一層“隱藏”單元,它連接到一層“輸出”單元。(見圖4.1)

Input units:輸入單位的行為表示饋入網絡的原始資訊(raw information)。 這也稱為輸入層。
Hidden units:每個隱藏單位的行為由輸入單位的行為和輸入與隱藏單位之間的權重決定。 這也稱為隱藏層。
Output units:輸出單位的行為取決於隱藏單位的行為以及隱藏單位和輸出單位之間的權重。 這也稱為輸出層。



這種簡單類型的網絡很有趣,因為隱藏單元可以自由構建input的representations。 輸入和隱藏單元之間的權重確定每個隱藏單元何時處於active,因此透過修改這些權重,隱藏單元可以選擇它表現出什麼特徵。

在我們研究整個/深度神經網絡之前,讓我們看一下單個神經元。

A Single Neuron
神經網絡中的基本計算單元是神經元,通常稱為節點(node)或單元(unit)。 它從一些其他節點或external source接收input來計算output。 每個input都有一個相關的權重(w),它是根據其對其他input的相對重要性來分配的。 節點將應用函數f來加權input總和,如下圖所示。



上述網絡採用數字input X1和X2,並具有與這些input相關的權重w1和w2。 另外,存在另一個與input 1相關聯的權重b(稱為Bias)。

Activation function:
來自神經元的output Y的計算如上圖所示。 函數f是非線性的,稱為激活函數(Activation Function)。 激活功能的目的是將非線性(non-linearity)引入神經元的output。 這很重要,因為大多數現實世界的數據都是非線性的,我們希望神經元學習這些非線性表示。

每個激活函數(或非線性)採用單個數字並對其執行某個公式的數學運算。 在實際中您可能會遇到幾種激活功能:

Sigmoid:得到real-valued input並將其壓縮到0到1之間

σ(x) = 1 / (1 + exp(−x))



Softmax function:在分類工作中,我們通常使用Softmax函數作為多層感知器輸出層中的激活函數,以確保輸出是概率,它們加起來為1. Softmax函數採用任意real-valued分數的向量,並將其壓縮為0到1之間的向量值,總和為1。 那麼,在這種情況下,

Probability (Pass) + Probability (Fail) = 1

tanh:得到real-valued input並將其壓縮到範圍[-1,1]

Image result for sigmoid activation function formula
Image result for tan activation function formula

ReLU:ReLU代表整流線性單元(Rectified Linear Unit)。 它需要一個real-valued input,並將其閾值設為零(將負值替換為零)

f(x) = max(0, x)



下圖顯示了其他幾種激活函數。



Bias的重要性:偏差的主要功能是為每個節點提供可訓練的常數值(除了節點接收的正常輸入之外)。 請參閱此連結以了解有關bias在神經元中的作用的更多資訊。

每個神經網絡有兩個主要部分:

Image result for feed forward backpropagation neural network

1.前饋傳播/前向傳播(Feed Forward Propogation/Forward Propogation)。
2.向後傳播/反向傳播(Backward Propogation/Back propogation)。

讓我們看看每個部分。

Feed Forward Propogation:
網絡中的所有權重都是隨機分配的。假設從輸入到該節點的連接的權重是w1,w2和w3。

然後網絡將第一個訓練範例作為輸入(我們知道對於輸入35和67,Pass的概率是1)。

輸入網絡= [35,67]
網絡想要的輸出(目標)= [1,0]
然後,可以如下計算輸出V(f是諸如sigmoid的激活函數):

V = f(1 * w1 + 35 * w2 + 67 * w3)

類似地,還計算來自隱藏層中的另一節點的輸出。隱藏層中兩個節點的輸出充當輸出層中兩個節點的輸入。這使我們能夠從輸出層中的兩個節點計算輸出概率。

假設輸出層中兩個節點的輸出概率分別為0.4和0.6(因為權重是隨機分配的,輸出也是隨機的)。我們可以看到計算的概率(0.4和0.6)與期望的概率(分別為1和0)相差很遠,因此圖5中的網絡被稱為具有“不正確的輸出”。


Back Propagation and Weight Updation:
我們計算輸出節點處的總誤差,並使用Backpropagation通過網絡將這些誤差傳播回來計算梯度。 然後我們使用諸如Gradient Descent之類的優化方法來“調整”網絡中的所有權重,目的是減少輸出層的誤差。

假設與所考慮的節點相關聯的新權重是w4,w5和w6(在反向傳播和調整權重之後)。



如果我們現在再次向網絡input相同的範例,則網絡應該比以前更好地執行,因為現在已經調整了權重以最小化預測中的錯誤。 如圖7所示,與之前的[0.6,-0.4]相比,輸出節點處的誤差現在減少到[0.2,-0.2]。 這意味著我們的網絡已經學會正確分類我們的第一個訓練範例。




我們在數據集中使用所有其他訓練範例重複此過程。 然後,我們的網絡可以說是已經學會了這些例子。

如果我們現在想要預測一個學習25個小時並且在學期中有70個分數的學生是否會通過最後一個學期,我們將通過前向傳播步驟找到及格和不及格的輸出概率。

以上避免了數學方程式和諸如“Gradient Descent”之類的概念的解釋。有關Backpropagation算法的更多數學討論,請參閱此連接



參考
https://medium.com/@purnasaigudikandula/a-beginner-intro-to-neural-networks-543267bda3c8

double descent risk curve

Overparameterization這個字的意思就是模型會用非常多的參數來製作。在早期很多人認為模型產生overfitting是因為參數過多,讓整個模型的自由度太大。那些參數讓decision boudary非常凌亂,因此讓訓練時期的模型表現很好,但測試的時候就會非常糟糕。但是近期的理論告訴大家如果參數超過一個量級,整個模型會有截然不同的表現。這奇怪的現象李宏毅教授有在上課錄影中demo過,現在無法demo的狀況下,只能用一張圖來稍微說明:

https://i.redd.it/g4q983jk7lq21.png
(來源: https://arxiv.org/pdf/1812.11118.pdf)

這張圖的a其實就是大家常看到的基礎機器學習課程中看到很典型的圖。他說明模型的參數量(H其實應該是複雜度,不過如果單純簡化來說,越複雜的模型大概會有越多的參數,那目前就簡單當成模型參數的多寡來看)如果越少的時候會有一個underfitting的region,但參數過多則是會overfitting;也就是說train accuracy數值很漂亮,但是test的時候慘不忍睹,因此模型參數不能太多不能太少要剛剛好,然後得到一個看似道路邊招牌掉下來砸到的人都可以回答出這樣的現象。但是這幾年許多人在算力足夠的狀態下開始測試如果把參數反其道而行的往上增加會發生甚麼事情。結果當然是出人意料的,模型竟然也開始反其道而行(https://www.groundai.com/media/arxiv_projects/325467/x9.png.750x0_q75_crop.png)。這件事情大家反覆確認了很久,又在經過幾年的努力,儘管我們並不知道發生了甚麼事情,但整個機器學習的模型的狀況應該要稍微修正可以用b來看。也就是說,當模型到達一個複雜度的時候,即使你看到模型在訓練時產生了overfitting,你可能還不太需要太害怕。你就用力把參數給他催下去進入到零的領域後,今天你的模型可能就沒有極限了。



Benign Overfitting in Linear Regression

參考
https://arxiv.org/pdf/1906.11300.pdf

2019年6月27日 星期四

Artificial Intelligence vs Machine Learning vs Deep Learning



人工智能與機器學習與深度學習相比,這些術語讓很多人感到困惑。 如果你也是其中之一,那麼這篇文章絕對適合你。

人工智能是機器學習和深度學習的更廣泛的扇形組織結構。 您還可以在圖表中看到,即使是深度學習也是機器學習的一個子集。 所以人工智能,機器學習和深度學習三個之間只是彼此的子集。 因此,讓我們繼續前進並了解它們之間的確切差異。



Starting with Artificial Intelligence
人工智能這個術語最早是在1956年創造出來的,但是現在人工智能已經變得越來越受歡迎了? 嗯,這是因為數據量的大量增加,先進的演算法以及計算能力和存儲的改進。

我們的數據不足以預測準確的結果。 但現在數據量大幅增加。 統計數據表明,到2020年,大數據的累積量將從4.4 zettabytes增加到大約44 zettabytes或44萬億GB的數據。

現在我們甚至擁有更先進的演算法和高端計算能力和存儲,可以處理如此大量的數據。 因此,預計70%的企業將在未來12個月實施人工智能,從2016年的40%上升到2017年的51%。

What is Artificial Intelligence?
人工智能是一種允許機器通過複製其行為和性質而像人類一樣行動的技術。

人工智能使機器可以從他們的經驗中學習。 機器根據新輸入調整其響應,從而通過處理大量數據並識別其中的模式來執行類似人類的任務。

AI Explained with an Analogy: Construction of a Church

您可以認為構建人工智能就像建造教堂一樣。

第一個教會需要幾個世代才能完成,因此大多數從事這項工作的工人從未見過最後的結果。 那些工作的人為他們的工藝,建造磚塊和鑿石頭而感到自豪。 因此,作為人工智能研究人員,我們應該將自己視為不起眼的磚塊製造者,他們的工作就是研究如何構建組件(例如解析器,規劃器,學習算法等),這些組件有一天會在某個地方集成到智能係統中。

我們日常生活中的人工智能的一些例子是Apple的Siri,國際象棋電腦,特斯拉的自動駕駛汽車等等。 這些範例基於深度學習和自然語言處理。

嗯,這是關於什麼是AI以及它是如何獲得炒作的。 因此,繼續前進讓我們討論機器學習,看看它是什麼,為什麼它甚至被引入。

機器學習在80年代末和90年代初期就已經存在。 但是實現機器學習的人們面臨的問題是什麼?

統計:如何有效地訓練大型複雜模型?

計算機科學與人工智能:如何訓練出更強大的AI系統版本?

神經科學:如何設計大腦的運作模型?

What is Machine Learning?
機器學習是人工智能的一個子集。 它允許機器根據其經驗(數據)學習和預測。

Understanding Machine Learning with an Example
假設您想要創建一個系統,該系統可以根據人的身高來預測人的預期體重。 您要做的第一件事就是收集數據。 以下是我們的數據分佈:


圖表上的每個點代表一個數據點。 首先,我們可以繪製一條簡單的線來預測基於高度的權重。 例如,一個簡單的行:

W = H - 100

其中W是以kg為單位的重量,H是以cm為單位的高度

這一行可以幫助我們做出預測。 我們的主要目標是減少估計值與實際值之間的差異。 因此,為了實現它,我們嘗試繪製一條適合這些數據點的直線,並儘量減少誤差。 減小誤差或實際值與估計值之間的差異會提高性能。

此外,我們收集的數據點越多,我們的模型就越好。 我們還可以通過添加更多變量(例如性別)並為它們創建不同的預測線來改進我們的模型。 一旦創建了線,所以將來如果將新數據(例如人的身高)輸入模型,它將很容易為您預測數據並告訴他預測的重量。

希望你對機器學習有一個清晰的認識。 繼續前進讓我們了解深度學習。

What is Deep Learning?
深度學習是一種特殊的機器學習,透過學習將世界表示為概念性或抽象性的嵌套層次結構來實現強大的功能和靈活性。

您可以將深度學習模型視為火箭引擎,其燃料是我們為這些演算法提供大量數據。

深度學習的概念並不新鮮。 但最近它的炒作增加了,深度學習越來越受到關注。 這個領域是一種特殊的機器學習,它受到我們的腦細胞功能的啟發,稱為人工神經網絡。 它只需要在所有人工神經元之間建立數據連接,並根據數據模式對其進行調整。 如果數據的大小很大,則需要更多的神經元。 它自動以多個抽象級別進行特徵學習,從而允許系統學習複雜的函數映射,而不依賴於任何特定的演算法。

Understanding Deep Learning with Analogies
讓我們從一個簡單的例子開始,解釋事物在概念層面的運作方式。

Example 1:
讓我們試著理解如何識別其他形狀的正方形。

首先要檢查是否有4條線與一個圖形相關聯。 如果是,我們進一步檢查,如果它們已連接並關閉,如果是,我們最終檢查它是否垂直的並且其所有邊長都相等。 這只是一個嵌套的概念層次結構(nested hierarchy of concept)。

我們做了什麼,我們在這種情況下完成了識別正方形的複雜任務,並將其分解為更簡單的任務。 現在,這種深度學習也可以做到這一點,但規模更大。

Example 2:
讓我們舉一個識別動物的機器的例子。 機器的任務是識別給定的圖像是貓還是狗。

如果我們被要求使用機器學習的概念來解決同樣的問題,我們會做什麼呢? 首先,我們將定義諸如檢查動物是否有鬍鬚的特徵,或檢查動物是否有尖耳或尾巴是直的還是彎曲的。

簡而言之,我們將定義面部特徵,讓系統識別哪些特徵在對特定動物進行分類時更為重要。

深度學習比機器學習更進階是在於深度學習會自動找出對分類,但機器學習必須手動提供特徵。

到現在為止,我想我的文章已經讓你明白AI是一個更大的圖景,機器學習和深度學習是它的子部分,所以總結它我會說最簡單的方法來理解機器學習和深度學習之間的區別就是知道深度學習是機器學習。更具體地說,它是機器學習的下一個發展。



參考
https://medium.com/edureka/ai-vs-machine-learning-vs-deep-learning-1725e8b30b2e?fbclid=IwAR34lZayoZvj4af_vDfkhgxPtU1FIpB1rSKKo7eJkbDElvwTg7cRpQ-FG5g

2019年6月26日 星期三

Data Pre-processing for Deep Learning models (Deep Learning with Keras – Part 2)



Dealing with Data

Motivation
訓練深度學習模型需要數據......很多數據! 不幸的是,在大多數情況下,數據變得混亂,我們的模型對此非常敏感。 因此,我們在準備數據時要小心,以達到最佳效果。在直接開始構建和訓練模型之前,我們認為最好能夠全面概述數據處理技術。 在這篇文章中,我們將向您展示如何處理數字,分類和圖像數據集。

Working with Numerical Data
數值將是最常見的數據類型。即使它們已經符合合適的計算格式,我們仍然需要做一些處裡。

數值數據的主要問題是每個特徵所具有的不同尺度。考慮房屋價格數據集,其中包含以下資訊:房屋面積,臥室數量,建築年份和價格。假設我們的目標是預測房屋大小,臥室數量和建築年份的價格。每個功能都以不同的比例呈現。房屋面積可以說是100到500平方米之間,建築年份是一個4位數,可以追溯到200年前,最後臥室的數量是1-4之間的數字。

這裡的問題是模型可能會根據其值給予更多關注。這樣,房屋大小可能會受到更多的關注,因為它的值更大,而其他重要的特徵,如臥室數量可能會被忽略,因為它們的值很小。

接下來有兩個簡單的解決方案來解決這個問題,它們被稱為正規化(Normalization)和標準化(Standardization)。何謂正規化跟標準化可以參考一下連結。
https://aifreeblog.herokuapp.com/posts/54/data_science_203/

Normalization
正規化只是縮放[0-1]範圍內的值。 要將其應用於數據集,您只需從每個元素中減去最小值並將其除以範圍(max-min)。



Standardization
標準化將數據轉換為平均值為0和單位標準偏差為1。



Implementation
在Keras實施上述技術比您想像的要容易。 我們將向您展示使用可輕鬆加載Keras的Boston Housing數據集的示例。
from keras.datasets import boston_housing
# data is returned as a tuple for the training and the testing datasets
(X_train, y_train), (X_test, y_test) = boston_housing.load_data()

讓我們看一下訓練數據集的第一個例子:
print(X_train[0])
# Output
[  1.23247   0.        8.14      0.        0.538     6.142    91.7
   3.9769    4.      307.       21.      396.9      18.72   ]

看到不同的尺度? 為了解決這個問題,我們將使用流行的Scikit-Learn函式庫。

使用MinMaxScaler進行數據正規化:
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X_train)
print(X_normalized[0])
# Output
[0.01378163 0.         0.28152493 0.         0.31481481 0.49980635
 0.91452111 0.29719123 0.13043478 0.22753346 0.89361702 1.
 0.46881898]

或者,使用StandardScaler標準化:
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X_train)
print(X_scaled[0])
# Output
[-0.27224633 -0.48361547 -0.43576161 -0.25683275 -0.1652266  -0.1764426
  0.81306188  0.1166983  -0.62624905 -0.59517003  1.14850044  0.44807713
  0.8252202 ]

接下來讓我們看看我們現在如何處理類別資料......

Working with Categorical Data
類別資料(Categorical data)需要特殊處理,因為它們不能以自己的格式餵給神經網絡(因為神經網絡只接受數值數據類型)。

我們將介紹兩種處理分類數據的主要技術:索引(Indexing)和OneHotEncoding。

Indexing
用索引或數字取代類別名稱。
import numpy as np

data = np.array(['small', 'medium', 'small', 'large', 'xlarge', 'large'])

from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
data_encoded = encoder.fit_transform(data)
print(data_encoded)

# Output
array([2, 1, 2, 0, 3, 0])

值'small','medium','large'和'xlarge'由0到3之間的數字替換。要嚴格指定使用的數字,可以參考OrdinalEncoder

OneHotEncoding
One Hot Encoding用一個boolean值的list取代每個元素,在當前類別索引中為1,在其他索引中為0。
import numpy as np

data = np.array(['red', 'blue', 'orange', 'white', 'red', 'orange', 'white', 'red'])

from sklearn.preprocessing import LabelBinarizer
encoder = LabelBinarizer()
data_encoded = encoder.fit_transform(data)

print(data_encoded)

# Output
array([[0, 0, 1, 0],
       [1, 0, 0, 0],
       [0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 0, 1, 0],
       [0, 1, 0, 0],
       [0, 0, 0, 1],
       [0, 0, 1, 0]])

這裏不是用數字取代每種顏色,而是用list取代。 該list表示以下內容:is_blue,is_orange,is_red和is_white。 將值1添加到每個顏色存在的相對索引,否則添加0。 範例:紅色表示為:[0 0 1 0]。

Working with Images
我們將在這篇文章中僅討論兩個簡單的圖像處理。 稍後將介紹更先進的技術。

第一步我們將處理圖像作為平面連續像素的簡單陣列。 但是圖像通常是2維的,具有1或3個顏色通道(channels)。 因此,我們需要在使用之前將每個圖像可以透過Numpy reshape函式重整其陣列形狀。

假設我們有500個圖像的list,每個圖像具有28 * 28像素和3個顏色通道RGB。 該list需要reshape為(500,2352)以便餵給網絡。 2353這裡是調整大小後每個圖像的大小(28 * 28 * 3)。

注意:稍後我們將使用內核以原始格式處理圖像

使用Numpy reshape list非常容易:
data_reshaped = data.reshape(500, 28*28*3)

現在因為我們的像素是數值,我們也需要縮放它們。 圖像的一種簡單縮放技術是將每個像素除以255(每個像素的最大值)。
images = images / 255.

Conclusion
在這篇文章中,我們學習瞭如何處理深度學習模型的數據。 我們現在準備處理數字,分類和圖像數據集。 這些技術對於我們構建第一個神經網絡的下一個教學將非常關鍵!



參考
https://www.marktechpost.com/2019/06/14/data-pre-processing-for-deep-learning-models-deep-learning-with-keras-part-2/?fbclid=IwAR2PlhZI0w_rDdfRwxAv3gVrl2dzuJ1QycWwE1-PbQhxYV2JRsioPAzfDbk

Deep Learning Timeline

圖像裡可能有文字

2019年6月25日 星期二

Deep Learning with Keras Tutorial – Part 1

關於這個系列

這篇文章是Keras系列深度學習的第一部分。 本系列旨在介紹Keras深度學習庫以及如何使用它來訓練各種深度學習模型。 我們將討論回歸(regression),分類(classification),卷積(convolution),循環網絡(recurrent networks),轉移學習(transfer learning)等主題。 接下來會用範例的方式來學習概念以及如何將它們應用於真實數據集。

在第一篇文章中,我們將介紹Keras及其不同的組件。 我們將了解定義深度學習模型所需的最重要的功能和步驟。



What is Keras?
Keras是一個深度學習框架,提供了一種方便的方法來定義和訓練幾乎任何類型的深度學習模型。 它是用Python編寫的,可以在TensorFlow,CNTK或Theano之上運行。 您可以在商業專案中自由使用它,因為它是在MIT許可下發行的。

What makes Keras so popular?
Keras最重要的特性之一是它的API讓客戶在使用上感到相當友善。 您可以立即開發出最先進的深度學習模型。 因此,它非常適合簡單快速的原型設計。 此外,它支持許多現代深度學習層,如卷積層和循環層。 Keras層可以以非常簡單的方式串連或者以許多不同的組合添加。 關於硬件,您可以在CPU和GPU上運行Keras,並以非常簡單的方式在它們之間切換。

Keras Workflow
為了在Keras建立深度學習項目,您通常會遵循以下工作流程:

1.定義您的訓練數據(training data)
2.定義您的網路(network)
3.選擇以下內容配置學習過程:
(i)損失函數(Loss function)
(ii)優化器(Optimizer)
(iii)度量(Metrics)

4.迭代訓練數據並開始fitting模型




Keras Models
Keras的核心data structure是Model class。 在keras.models下可以找到兩種定義模型的方法:Sequential class和Model class。 Sequential class按順序逐層構建網絡。 Model類允許更複雜的網絡結構,將在之後的文章中會看到。

Model Lifecycle
Keras模型遵循以下生命週期:

1.模型創建
(i)使用Sequential或Model class定義模型
(ii)添加layer
2.指定損失,優化器和指標來配置模型。 這是藉由呼叫compile方法完成的。
3.藉由呼叫fit方法訓練模型。
4.接下來將會有一個訓練好一個模型,可用於evaluation測試數據(testing data )或prediction新數據。

Image result for keras workflow

Core Layers
Keras支撐許多layers來構建我們的神經網絡。 可以從keras.layers訪問它們,下面顯示了我們將要使用的最基本的類別:

Dense:與上一層完全連接的神經元(fully connected neurons)之標準層。 執行output = activation(X * W + bias))

Activation:應用在輸出激活函數(activation function)

Dropout:應用於輸入。 根據predefined probability rate隨機停用一個given layer中的一組神經元。 用於防止overfitting

Conv2D:應用2D卷積來訓練主要在圖像數據集上的一組內核

Flatten:將輸入平化為1D矩陣。 主要用於卷積神經網絡中的特徵提取。

Losses and Optimizers
定義模型後,我們需要選擇一個損失函數和一個優化器。 優化器的工作是找到最小化損失函數的最佳模型參數。

可用的優化器:SGD,RMSprop,Adagrad,Adadelta,Adam,Adamax,Nadam

可用損失函數:平均絕對誤差(mean absolute error),平均絕對百分誤差(mean absolute percentage error),均方誤差(mean squared)。 對數誤差(logarithmic error),squared hinge,hinge,categorical hinge,logcosh,分類交叉熵(categorical crossentropy),稀疏分類交叉熵(sparse categorical crossentropy),二元交叉熵(binary crossentropy),kullback leibler divergence,poisson,餘弦近似(cosine proximity)。

Keras Utils
Keras提供了額外的實用功能,便於構建和檢視模型。 我們將主要使用它們來預處理數據(preprocess data)和檢視模型。 有關更多信息可用功能可以參考官方文檔。

Conclusion
這篇文章是對Keras的簡單介紹。 我們介紹了框架,了解了重要的類,標準工作流和模型生命週期。 在下一篇文章中,我們將學習如何使用Keras訓練線性回歸模型(linear regression model)。


參考
https://www.marktechpost.com/2019/06/11/deep-learning-with-keras-tutorial-part-1/?fbclid=IwAR1Vsum2zo7fM7aiH_b_BE34D3P7Rt3bLo6xNWxV8LcZ-Cw6n-ck7FL_pFc

2019年6月23日 星期日

利用Sklearn在機器學習中創建和可視化決策樹演算法

什麼是決策樹? Python Scikit-Learn中的決策樹
決策樹算法是最簡單但功能強大的監督機器學習演算法之一。決策樹算法可用於解決機器學習中的回歸和分類問題。這就是為什麼它也被稱為CART或分類(Classification)和回歸(Regression )樹。顧名思義,在決策樹中,我們形成了一個樹狀的決策模型及其可能的結果。

以下是在Data Science視頻中查看Intellipaat決策樹:
https://www.youtube.com/watch?v=3oU7-Lv1R1U

在我們深入了解這個有趣的算法之前,讓我們來看看這個blog提供的概念。

接下來讓我們開始進入主題吧!

決策樹演算法範例
莫妮卡的堂兄瑪麗本週末將訪問中央公園。現在,莫妮卡需要為周末制定一些計劃,無論是出去購物,去看電影,在中央公園咖啡館消磨時光,還是只是呆在一起玩棋盤遊戲。她決定創建一個決策樹,讓事情變得簡單。讓我們看看她創造了什麼。



內部節點(interior nodes)表示對屬性(attribute)的不同測試(例如,是否出去或留在),分支(branches)保存那些測試的結果,葉節點(leaf nodes)表示類別標籤(class label)或在測量所有屬性後做出的某些決定。從根節點到葉節點的每條路徑表示決策樹分類規則。

規則1:如果不下雨而不是太陽光,那就出去購物吧。

規則2:如果外面不下雨但外面太陽光,那就去看電影吧。

規則3:如果在外面下雨並且電纜有信號,那麼觀看電視節目。

規則4:如果下雨並且電纜信號失效,那麼花時間在樓下的咖啡店

這就是決策樹如何幫助Monica與她的堂兄一起制定完美的周末計劃。

決策樹演算法的類型
有兩種類型的決策樹。它們根據它們具有的目標變量(target variable)的類型進行分類。如果決策樹具有分類目標變量,則將其稱為“分類變量決策樹”(categorical variable decision tree)。同樣,如果它有一個連續的目標變量,它被稱為“連續變量決策樹”(continuous variable decision tree)。

與決策樹演算法相關的術語
根節點(Root Node):此節點分為不同的同類(homogeneous )節點。它代表整個樣本。
拆分(Splitting):將節點拆分為兩個或多個子節點(sub-nodes)的過程。
內部節點(Interior Nodes):它們代表屬性的不同測試。
分支機構(Branches):他們持有這些測試的結果。
葉子節點(Leaf Nodes):當節點不能進一步分割時,它們被稱為葉子節點。
父節點和子節點(Parent and Child Nodes):創建子節點的節點稱為父節點。並且,子節點稱為子節點。

決策樹演算法的優點
  • 容易明白
  • 需要最少的數據清理
  • 對數據類型沒有約束

以下是在Data Science視頻中查看Intellipaat決策樹:
https://www.youtube.com/watch?v=4gqZLajDWh8

決策樹演算法的缺點
  • 過度擬合(overfitting)的可能性

機器學習中的決策樹如何作業?
下面給出了使用機器學習中的決策樹訓練和預測目標特徵(target features)的過程:

  • 使用一組特徵和目標來提供包含許多訓練實例(instances)的數據集
  • 在DecisionTreeClassifier()或DecisionTreeRegressor()方法的幫助下訓練決策樹分類或回歸模型,並在構建決策樹模型時添加所需的標準
  • 使用Graphviz可視化決策樹模型

如此而已! 您的決策樹模型已準備就緒。

機器學習中的決策樹-DecisionTreeClassifier()和DecisionTreeRegressor()
DecisionTreeClassifier():它只是決策樹分類器函數,在使用Python的機器學習中構建決策樹模型。 DecisionTreeClassifier()函數如下所示:

DecisionTreeClassifier (criterion = ‘gini’, random_state = None, max_depth = None, min_samples_leaf =1)

以下是一些重要參數:
  • criterion:用於衡量決策樹分類中的分割質量。默認情況下,它是'gini';它還支持'熵'(entropy)。
  • max_depth: 用於在擴展樹後為決策樹添加最大深度。
  • min_samples_leaf: 此參數用於添加在葉節點處出現所需的最小樣本數。

DecisionTreeRegressio():決策樹回歸函數用於在機器學習中使用Python構建決策樹模型。DecisionTreeRegressor()函數如下所示:

DecisionTreeRegressor (criterion = ‘mse’, random_state =None , max_depth=None, min_samples_leaf=1,)

  • criterion:此函數用於測量決策樹回歸中的分割質量。 默認情況下,它是'mse'(均方誤差),它還支持'mae'(平均絕對誤差)。
  • max_depth: 用於在擴展樹後為決策樹添加最大深度。
  • min_samples_leaf: 此參數用於添加在葉節點處出現所需的最小樣本數。

利用Python在機器學習中創建和可視化決策樹回歸模型
問題陳述:使用機器學習根據一些經濟因素預測房屋的售價。 使用Python中的決策樹構建模型。

數據集:波士頓住房數據集

讓我們快速瀏覽一下數據集:


建構模型

讓我們在Python中構建決策樹的回歸模型。

步驟1:加載所需的包


步驟2:加載Boston數據集


看一下數據集的前五項



步驟3:使用散點圖可視化數據集


步驟4:定義功能和目標


步驟5:將數據集拆分為訓練集和測試集


執行此步驟後,'clf_tree.dot'文件將保存在您的系統中。 現在可視化樹,使用“.dot”擴展名打開此文件並複制graphviz數據。 然後,轉到網站“http://www.webgraphviz.com/”並在其中粘貼graphviz數據,如下所示:


點擊‘Generate Graph’


完成此步驟後,現在讓我們執行決策樹分析。

步驟7:預測值


步驟8:比較y_test和y_pred



步驟9:找到該決策樹分類模型的混淆矩陣(confusion matrix)和其他度量(metric )參數



我們到底學到了什麼?
在這個決策樹教程blog中,我們回答了“什麼是決策樹演算法?”的問題。我們還學習瞭如何在決策樹分類器和決策樹回歸器,決策樹分析以及決策樹的幫助下構建決策樹分類模型。 使用Python,Scikit-Learn和Graphviz工具在機器學習中進行演算法可視化。


參考
https://intellipaat.com/blog/decision-tree-algorithm-in-machine-learning/


2019年6月5日 星期三