2019/11/2 1、 表現層狀態轉換(REST, representational state transfer.)一種萬維網軟體架構風格,目的是便於不同軟體/程式在網路(例如互聯網)中互相傳遞信息。表現層狀態轉換是根基於超文本傳輸協議(HTTP)之上而確定的一組約束和屬性,是一種設計提供萬維網 ...
2019/11/2
1、 表現層狀態轉換(REST, representational state transfer.)一種萬維網軟體架構風格,目的是便於不同軟體/程式在網路(例如互聯網)中互相傳遞信息。表現層狀態轉換是根基於超文本傳輸協議(HTTP)之上而確定的一組約束和屬性,是一種設計提供萬維網路服務的軟體構建風格。符合或相容於這種架構風格(簡稱為 REST 或 RESTful)的網路服務,允許客戶端發出以統一資源標識符訪問和操作網路資源的請求,而與預先定義好的無狀態操作集一致化。因此表現層狀態轉換提供了在互聯網路的計算系統之間,彼此資源可交互使用的協作性質(interoperability)。
REST是設計風格而不是標準。REST通常基於使用HTTP,URI,和XML以及HTML這些現有的廣泛流行的協議和標準。
- 資源是由URI來指定。
- 對資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
- 通過操作資源的表現形式來操作資源。
- 資源的表現形式則是XML或者HTML,取決於讀者是機器還是人,是消費web服務的客戶軟體還是web瀏覽器。當然也可以是任何其他的格式,例如JSON。
REST架構風格最重要的架構約束有6個[2]:
- 客戶端-伺服器(Client-Server)
客戶端-伺服器結構約束的目的是將客戶端和伺服器端的關註點分離. 將用戶界面所關註的邏輯和數據存儲所關註的邏輯分離開來有助於提高用戶界面的跨平臺的可移植性.通過簡化伺服器模塊也有助於伺服器模塊的可擴展性.
- 無狀態(Stateless)
伺服器不能保存客戶端的信息, 每一次從客戶端發送的請求中, 要包含所有的必須的狀態信息, 會話信息由客戶端保存, 伺服器端根據這些狀態信息來處理請求. 伺服器可以將會話狀態信息傳遞給其他服務, 比如資料庫服務, 這樣可以保持一段時間的狀態信息, 從而實現認證功能. 當客戶端可以切換到一個新狀態的時候發送請求信息. 當一個或者多個請求被髮送之後, 客戶端就處於一個狀態變遷過程中. 每一個應用的狀態描述可以被客戶端用來初始化下一次的狀態變遷.
- 緩存(Cacheability)
如同萬維網一樣, 客戶端和中間的通訊傳遞者可以將響應緩存起來. 響應必須明確的或者間接的表明本身是否可以進行緩存,這可以預防客戶端在將來進行請求的時候得到陳舊的或者不恰當的數據. 管理良好的緩存機制可以 減少客戶端-伺服器之間的交互, 甚至完全避免客戶端-伺服器交互, 這進一步提了高性能和可擴展性。
- 統一介面(Uniform Interface)
統一介面是 RESTful 系統設計的基本出發點. 它簡化了系統的架構, 減少了耦合性, 可以讓所有模塊各自獨立的進行改進. 對於統一介面的四個約束是:
- 請求中包含資源的 ID (Resource identification in requests )
請求中包含了各種獨立資源的標識, 例如, 在 Web 服務中的 URIs. 資源本身和發送給客戶端的標識是獨立. 例如, 伺服器可以將自身的資料庫信息以 HTML XML 或者 JSON 的方式發送給客戶端, 但是這些可能都不是伺服器的內部記錄方式.
- 資源通過標識來操作(Resource manipulation through representations)
當客戶端擁有一個資源的標識, 包括附帶的元數據, 則它就有足夠的信息來刪除這個資源.
- 消息的自我描述性(Self-descriptive messages)
每一個消息都包含足夠的信息來描述如何來處理這個信息. 例如, 媒體類型 (midia-type) 就可以確定需要什麼樣的分析器來分析媒體數據.
- 用超媒體驅動應用狀態 ( Hypermedia as the engine of application state (HATEOAS))
同用戶訪問 Web 伺服器的 Home 頁面相似,當一個 REST 客戶端訪問了最初的 REST 應用的 URI 之後, REST 客戶端應該可以使用伺服器端提供的鏈接,動態的發現所有的可用的資源和可執行的操作.隨著訪問的進行, 伺服器在響應中提供文字超鏈接, 以便客戶端可以得到當前可用的操作. 客戶端無需用確定的編碼的方式記錄下伺服器端所提供的動態應用的結構信息.
- 分層系統(Layered System)
客戶端一般不知道是否直接連接到了最終的伺服器, 或者是路徑上的中間伺服器. 中間伺服器可以通過負載均衡和共用緩存的機制提高系統的可擴展性,這樣可也便於安全策略的部署.
- 按需代碼(Code-On-Demand,可選)
伺服器可以通過發送可執行代碼給客戶端的方式臨時性的擴展功能或者定製功能.例如Java Applet、Flash或JavaScript。
2、 Building an Ensemble Learning Model Using Scikit-learn. Ensemble learning uses multiple machine learning models to try to make better predictions on a dataset. An ensemble model works by training different models on a dataset and having each model make predictions individually.
3、 Gradient boosting is a machine learning technique for regression and classification problems, which produces a prediction model in the form of an ensemble of weak prediction models, typically decision trees. 梯度提升是一種針對回歸和分類問題的機器學習技術,它以弱預測模型的集合(通常為決策樹)的形式生成預測模型。像其他增強方法一樣,它以分階段的方式構建模型,並通過允許對任意可微分的損失函數進行優化來對其進行概括。 梯度增強的思想源自Leo Breiman的觀察,即可以將增強解釋為針對適當成本函數的優化演算法。
4、 提升方法(Boosting),是一種可以用來減小監督式學習中偏差的機器學習演算法。
5、 AdaBoost,是英文"Adaptive Boosting"(自適應增強)的縮寫。AdaBoost方法的自適應在於:前一個分類器分錯的樣本會被用來訓練下一個分類器。對於雜訊數據和異常數據很敏感。AdaBoost方法是一種迭代演算法,在每一輪中加入一個新的弱分類器,直到達到某個預定的足夠小的錯誤率。
6、 由於遞歸引起一系列的函數調用,並且有可能會有一系列的重覆計算,遞歸演算法的執行效率相對較低. 迭代:利用變數的原值推算出變數的一個新值. 如果遞歸是自己調用自己的話,迭代就是A不停的調用B. 所謂遞歸,簡而言之就是應用程式自身調用自身,以實現層次數據結構的查詢和訪問。
7、 枚舉(enumeration),在數學和電腦科學理論中,一個集的枚舉是列出某些有窮序列集的所有成員的程式,或者是一種特定類型對象的計數。這兩種類型經常(但不總是)重疊。枚舉是一個被命名的整型常數的集合!遍歷(traversal),是樹形結構的一種重要運算,指的是按照一定的規則訪問樹形結構中的每個節點,而且每個節點都只訪問一次。迭代(iterate),指的是按照某種順序逐個訪問列表中的每一項。迭代是重覆反饋過程的活動,其目的通常是為了接近併到達所需的目標或結果。 每一次對過程的重覆被稱為一次“迭代”,而每一次迭代得到的結果會被用來作為下一次迭代的初始值。迴圈(loop):指的是在滿足條件的情況下,重覆執行同一段代碼。一般語言都會有三種類型的迴圈語句:for語句、while語句和do While語句。遞歸函數(Recursion function):是在一個函數通過名字調用自身的情況下構成的。遞歸(recursion)在數學與電腦科學中,是指在函數的定義中使用函數自身的方法。遞歸一詞還較常用於描述以自相似方法重覆事物的過程。
8、 遞歸:recursion,典型例子,階乘,挪大小盤子的問題(河內塔?)