當前位置:首頁 » 編程語言 » python共軛梯度

python共軛梯度

發布時間: 2023-04-01 02:20:11

㈠ 各種編程語言的深度學習庫整理大全!

各種編程語言的深度學習庫整理大全!
python1. Theano是一個python類庫,用數組向量來定義和計算數學表達式。它使得在Python環境下編寫深度學習演算法變得簡單。在它基礎之上還搭建了許多類庫。
1.Keras是一個簡潔、高度模塊化的神經網路庫,它的設計參考了Torch,用Python語言編寫,支持調用GPU和CPU優化後的Theano運算。
2.Pylearn2是一個集成大量深度學習常見模型和訓練演算法的庫,如隨機梯度下降等。它的功能庫都是基於Theano之上。
3.Lasagne是一個搭建和訓練神經網路的輕量級封裝庫,基於Theano。它遵循簡潔化、透明化、模塊化、實用化和專一化的原則。
4.Blocks也是一個基於Theano的幫助搭建神經網路的框架。
2. Caffe是深度學習的框架,它注重於代碼的表達形式、運算速度以及模塊化程度。它是由伯克利視覺和學習中心(Berkeley Vision and Learning Center, BVLC)以及社區成員共同開發。谷歌的DeepDream項目就是基於Caffe框架完成。這個框架是使用BSD許可證的C++庫,並提供了Python調用介面。
3. nolearn囊括了大量的現有神經網路函數庫的封裝和抽象介面、大名鼎鼎的Lasagne以及一些機器學習的常用模塊。
4. Genism也是一個用Python編寫的深度學習小工具,採用高效的演算法來處理大規模文本數據。
5. Chainer在深度學習的理論演算法和實際應用之間架起一座橋梁。它的特點是強大、靈活、直觀,被認為是深度學習的靈活框架。
6. deepnet是基於GPU的深度學習演算法函數庫,使用Python語言開發,實現了前饋神經網路(FNN)、受限玻爾茲曼機(RBM)、深度信念網路(DBN)、自編碼器(AE)、深度玻爾茲曼機(DBM)和卷積神經網路(CNN)等演算法。
7. Hebel也是深度學習和神經網路的一個Python庫,它通過pyCUDA控制支持CUDA的GPU加速。它實現了最重要的幾類神經網路模型,提供了多種激活函數和模型訓練方法,例如momentum、Nesterov momentum、dropout、和early stopping等方法。
8. CXXNET是一個基於MShadow開發的快速、簡潔的分布式深度學習框架。它是一個輕量級、易擴展的C++/CUDA神經網路工具箱,提供友好的Python/Matlab介面來進行訓練和預測。
9. DeepPy是基於NumPy的深度學習框架。
10. DeepLearning是一個用C++和Python共同開發的深度學習函數庫。
11. Neon是Nervana System 的深度學習框架,使用Python開發。
Matlab
1. ConvNet 卷積神經網路是一類深度學習分類演算法,它可以從原始數據中自主學習有用的特徵,通過調節權重值來實現。
2. DeepLearnToolBox是用於深度學習的Matlab/Octave工具箱,它包含深度信念網路(DBN)、棧式自編碼器(stacked AE)、卷積神經網路(CNN)等演算法。
3. cuda-convet是一套卷積神經網路(CNN)代碼,也適用於前饋神經網路,使用C++/CUDA進行運算。它能對任意深度的多層神經網路建模。只要是有向無環圖的網路結構都可以。訓練過程採用反向傳播演算法(BP演算法)。
4. MatConvNet是一個面向計算機視覺應用的卷積神經網路(CNN)Matlab工具箱。它簡單高效,能夠運行和學習最先進的機器學習演算法。
CPP
1. eblearn是開源的機器學習C++封裝庫,由Yann LeCun主導的紐約大學機器學習實驗室開發。它用基於能量的模型實現卷積神經網路,並提供可視化交互界面(GUI)、示例以及示範教程。
2. SINGA是Apache軟體基金會支持的一個項目,它的設計目標是在現有系統上提供通用的分布式模型訓練演算法。
3. NVIDIA DIGITS是用於開發、訓練和可視化深度神經網路的一套新系統。它把深度學習的強大功能用瀏覽器界面呈現出來,使得數據科學家和研究員可以實時地可視化神經網路行為,快速地設計出最適合數據的深度神經網路。
4. Intel? Deep Learning Framework提供了Intel?平台加速深度卷積神經網路的一個統一平台。
Java
1. N-Dimensional Arrays for Java (ND4J) 是JVM平台的科學計算函數庫。它主要用於產品中,也就是說函數的設計需求是運算速度快、存儲空間最省。
2. Deeplearning4j 是第一款商業級別的開源分布式深度學習類庫,用Java和Scala編寫。它的設計目的是為了在商業環境下使用,而不是作為一款研究工具。
3. Encog是一個機器學習的高級框架,涵蓋支持向量機、人工神經網路、遺傳編程、貝葉斯網路、隱馬可夫模型等,也支持遺傳演算法。
JavaScript
1. Convnet.js 由JavaScript編寫,是一個完全在瀏覽器內完成訓練深度學習模型(主要是神經網路)的封裝庫。不需要其它軟體,不需要編譯器,不需要安裝包,不需要GPU,甚至不費吹灰之力。
Lua
1. Torch是一款廣泛適用於各種機器學習演算法的科學計算框架。它使用容易,用快速的腳本語言LuaJit開發,底層是C/CUDA實現。Torch基於Lua編程語言。
Julia
1. Mocha是Julia的深度學習框架,受C++框架Caffe的啟發。Mocha中通用隨機梯度求解程序和通用模塊的高效實現,可以用來訓練深度/淺層(卷積)神經網路,可以通過(棧式)自編碼器配合非監督式預訓練(可選)完成。它的優勢特性包括模塊化結構、提供上層介面,可能還有速度、兼容性等更多特性。
Lisp
1. Lush(Lisp Universal Shell)是一種面向對象的編程語言,面向對大規模數值和圖形應用感興趣的廣大研究員、實驗員和工程師們。它擁有機器學習的函數庫,其中包含豐富的深度學習庫。
Haskell
1. DNNGraph是Haskell用於深度神經網路模型生成的領域特定語言(DSL)。
.NET
1. Accord.NET 是完全用C#編寫的.NET機器學習框架,包括音頻和圖像處理的類庫。它是產品級的完整框架,用於計算機視覺、計算機音頻、信號處理和統計應用領域。
R
1. darch包可以用來生成多層神經網路(深度結構)。訓練的方法包括了對比散度的預訓練和眾所周知的訓練演算法(如反向傳播法或共軛梯度法)的細調。
2. deepnet實現了許多深度學習框架和神經網路演算法,包括反向傳播(BP)、受限玻爾茲曼機(RBM)、深度信念網路(DBP)、深度自編碼器(Deep autoencoder)等等。

㈡ 銷售量服從泊松分布,怎樣獲取最大利潤

如何實現大數據利潤最大利潤化

制定合適的價格很重要,再怎麼誇大都不過分。價格提高1%意味著經營利潤平均可以增長8.7%(當然,假設銷量沒有損失)。不過我們估計,在許多公司每年制定的成千上萬個定價決策中,多達30%未能給出最合適的價格——這意味著收入大量流失。而且考慮到如今海量數據為公司提供了難得的機會,可以做出合理得多的定價決策,這種現狀尤其令人不安。對那些能夠井然有序地應對復雜的大數據的公司而言,這蘊含著巨大價值。

將數據轉化為利潤的四個步驟

想制定更合適的價格,關鍵是完全明白現在可供公司使用的數據。這就需要放大目標,而不是縮小目標。正如綜合性能源和化工企業沙索(Sasol)集團副總裁兼營銷和銷售總經理湯姆·奧布賴恩(Tom O』Brien)提及這種做法時說:「銷售團隊知道價格,還可能知道銷量,但這種做法需要了解更多信息:極其精細的數據,實際上來自每一張發票,按產品、客戶和包裝分門別類。」

事實上,將大數據成功應用於B2B環境方面最激動人心的一些例子實際上不僅僅著眼於定價,還涉及一家公司的商業引擎的其他方面。比如說,「動態交易評分」(dynamic deal scoring)提供了單筆交易層面的價格指導,還提供了決策逐級上報點、激勵機制、績效評分及更多方面,立足於一系列相似的盈/虧交易。使用較小的、相關的交易樣本很有必要,因為與任何一筆交易息息相關的因素會有變化,這導致一系列總體交易成為毫無用處的衡量基準。我們已見過這種方法應用於技術行業,取得了巨大成功。將銷售利潤率提高了4到8個百分點(相對於同一家公司的對照組)。

想獲得足夠精細的數據,公司就要做好這四項工作

傾聽數據。制定最合理的價格不是牽涉數據的挑戰(公司通常已經坐擁龐大的數據寶庫),而是牽涉分析的挑戰。最出色的B2C公司知道如何解釋自己擁有的海量數據,並見機行事,但B2B公司往往一味管理數據,而不是利用數據推動決策。優秀的分析工具可以幫助公司確定經常被忽視的因素(比如更宏觀的經濟形勢、產品偏好以及銷售代表的洽談),揭示什麼因素左右針對每個客戶群和產品的價格。

提高自動化。人工分析數千種孝頃產品太耗費時間和財力。自動化系統可以識別狹小的客戶群,確定什麼因素左右每個客戶群的價值,並且拿來與歷史交易數據進行比較。這樣一來,公司就可以根據數據,為產品群和客戶群制定有針對性的價格。自動化還大大簡化了復制和調整分析的工作,因此沒必要每次都從頭開始分析。

培養技能、樹立信心。實施新價格既在運營方面帶來了挑戰,又在溝通攜族方面帶來了挑戰。成功的公司非常注重深思熟慮的變革計劃,幫助銷售隊伍了解並接受新的定價方法。公司需要與銷售代表們齊心協力,解釋為什麼實行建議價,這巧隱陸套價格體系是如何運作的,那樣銷售代表就會非常信任價格,從而竭力說服顧客。同樣重要的是制定一套明確清晰的溝通方法,為價格給出一個理由,從而著重突出價值,然後針對具體顧客給出相應的理由。全面的洽談培訓也至關重要,以便讓銷售代表獲得信心和工具,那樣與客戶面對面交流時,能拿出頗有說服力的理由。最優秀的領導陪同銷售代表會見最難拿下的客戶,專注於迅速見效,那樣銷售代表就能樹立起信心,積極奉行新的定價方法。林德集團旗下瑞士PanGas AG公司的總經理羅伯特·克里格(Robert Krieger)說:「表明領導層支持這種新的定價方法這個立場,至關重要。為此,我們採取的做法就是領導層與銷售代表一起拜見難纏的客戶。我們不僅能夠幫助銷售代表,還能夠闡明為什麼制定新價格。」

積極管理績效。想改善績效管理,公司就需要藉助實用的績效指標支持銷售隊伍。最大的影響來自確保銷售一線對於客戶帶來的利潤瞭然於胸;銷售和營銷部門擁有合適的分析技能,得以發現機會,並牢牢抓住機會。還需要將權力下放給銷售隊伍,讓他們自行調整價格,而不是依賴集中式團隊。這不僅需要創業理念,還需要在針對特定的客戶制定價格策略時有一定的創造力。在改變定價策略和績效衡量標準的同時,可能還要改變激勵機制。

我們已經看到了這一幕:軟體、化工、建材和電信等眾多行業的公司利用大數據,幫助制定更合理的定價決策,因而收到顯著成效。這些公司都有數量眾多的庫存單位(SKU)和交易,還有一大批高度分散的客戶;重新制定價格後,都發現利潤率提高了3%到8%,這些價格是在極其精細的產品數據層面制定的。僅舉一例,一家歐洲建材公司為幾種有所選擇的產品制定合適的價格後,利潤增幅高達20%。如果公司想制定合適的價格,就應該充分利用大數據,並投入足夠的資源來支持銷售代表,否則它們會發現自己在為此付出高昂的代價:利潤流失。

轉載請註明:數據分析 » 如何實現大數據利潤最大利潤化

量化分析師的Python_python 金融量化分析_python金融大數據分析

量化分析師的Python_python 金融量化分析_python金融大數據分析

一、SciPy概述
前篇已經大致介紹了NumPy,接下來讓我們看看SciPy能做些什麼。NumPy替我們搞定了向量和矩陣的相關操作,基本上算是一個高級的科學計算器。SciPy基於NumPy提供了更為豐富和高級的功能擴展,在統計、優化、插值、數值積分、時頻轉換等方面提供了大量的可用函數,基本覆蓋了基礎科學計算相關的問題。

在量化分析中,運用最廣泛的是統計和優化的相關技術,本篇重點介紹SciPy中的統計和優化模塊,其他模塊在隨後系列文章中用到時再做詳述。

本篇會涉及到一些矩陣代數,如若感覺不適,可考慮跳過第三部分或者在理解時簡單採用一維的標量代替高維的向量。

首先還是導入相關的模塊,我們使用的是SciPy裡面的統計和優化部分:

In[1]:

import numpy as npimport scipy.stats as statsimport scipy.optimize as opt

二、統計部分2.1 生成隨機數

我們從生成隨機數開始,這樣方便後面的介紹。生成n個隨機數可用rv_continuous.rvs(size=n)或rv_discrete.rvs(size=n),其中rv_continuous表示連續型的隨機分布,如均勻分布(uniform)、正態分布(norm)、貝塔分布(beta)等;rv_discrete表示離散型的隨機分布,如伯努利分布(bernoulli)、幾何分布(geom)、泊松分布(poisson)等。我們生成10個[0, 1]區間上的隨機數和10個服從參數$a = 4$,$b = 2$的貝塔分布隨機數:

In[2]:

rv_unif = stats.uniform.rvs(size=10)print rv_unifrv_beta = stats.beta.rvs(size=10, a=4, b=2)print rv_beta

[ 0.20630272 0.25929204 0.16859206 0.92573462 0.16383319 0.3475617 0.83792048 0.79574153 0.37945051 0.23439682][ 0.71216492 0.85688464 0.70310131 0.3783662 0.69507561 0.78626586 0.54529967 0.4261079 0.26646767 0.8519046 ]

在每個隨機分布的生成函數里,都內置了默認的參數,如均勻分布的上下界默認是0和1。可是一旦需要修改這些參數,每次生成隨機都要敲這么老長一串有點麻煩,能不能簡單點?SciPy里頭有一個Freezing的功能,可以提供簡便版本的命令。SciPy.stats支持定義出某個具體的分布的對象,我們可以做如下的定義,讓beta直接指代具體參數$a = 4$和$b = 2$的貝塔分布。為讓結果具有可比性,這里指定了隨機數的生成種子,由NumPy提供。

In[3]:

np.random.seed(seed=2015)rv_beta = stats.beta.rvs(size=10, a=4, b=2)print "method 1:"print rv_betanp.random.seed(seed=2015)beta = stats.beta(a=4, b=2)print "method 2:"print beta.rvs(size=10)

method 1:[ 0.43857338 0.9411551 0.75116671 0.92002864 0.62030521 0.56585548 0.41843548 0.5953096 0.88983036 0.94675351]method 2:[ 0.43857338 0.9411551 0.75116671 0.92002864 0.62030521 0.56585548 0.41843548 0.5953096 0.88983036 0.94675351]

2.2 假設檢驗

好了,現在我們生成一組數據,並查看相關的統計量(相關分布的參數可以在這里查到:http://docs.scipy.org/doc/scipy/reference/stats.html):

In[4]:

norm_dist = stats.norm(loc=0.5, scale=2)n = 200dat = norm_dist.rvs(size=n)print "mean of data is: " + str(np.mean(dat))print "median of data is: " + str(np.median(dat))print "standard deviation of data is: " + str(np.std(dat))

mean of data is: 0.705195138069median of data is: 0.658167882933standard deviation of data is: 2.08967006905

假設這個數據是我們獲取到的實際的某些數據,如股票日漲跌幅,我們對數據進行簡單的分析。最簡單的是檢驗這一組數據是否服從假設的分布,如正態分布。這個問題是典型的單樣本假設檢驗問題,最為常見的解決方案是採用K-S檢驗( Kolmogorov-Smirnov test)。單樣本K-S檢驗的原假設是給定的數據來自和原假設分布相同的分布,在SciPy中提供了kstest函數,參數分別是數據、擬檢驗的分布名稱和對應的參數:

In[5]:

mu = np.mean(dat)sigma = np.std(dat)stat_val, p_val = stats.kstest(dat, 'norm', (mu, sigma))print 'KS-statistic D = %6.3f p-value = %6.4f' % (stat_val, p_val)

KS-statistic D = 0.045 p-value = 0.8195

假設檢驗的$p$-value值很大(在原假設下,$p$-value是服從[0, 1]區間上的均勻分布的隨機變數,可參考http://en.wikipedia.org/wiki/P-value ),因此我們接受原假設,即該數據通過了正態性的檢驗。在正態性的前提下,我們可進一步檢驗這組數據的均值是不是0。典型的方法是$t$檢驗($t$-test),其中單樣本的$t$檢驗函數為ttest_1samp:

In[6]:

stat_val, p_val = stats.ttest_1samp(dat, 0)print 'One-sample t-statistic D = %6.3f, p-value = %6.4f' % (stat_val, p_val)

One-sample t-statistic D = 4.761, p-value = 0.0000

我們看到$p$-value$ < 0.05$,即給定顯著性水平0.05的前提下,我們應拒絕原假設:數據的均值為0。我們再生成一組數據,嘗試一下雙樣本的$t$檢驗(ttest_ind):

In[7]:

norm_dist2 = stats.norm(loc=-0.2, scale=1.2)dat2 = norm_dist2.rvs(size=n/2)stat_val, p_val = stats.ttest_ind(dat, dat2, equal_var=False)print 'Two-sample t-statistic D = %6.3f, p-value = %6.4f' % (stat_val, p_val)

Two-sample t-statistic D = 5.565, p-value = 0.0000

注意,這里我們生成的第二組數據樣本大小、方差和第一組均不相等,在運用$t$檢驗時需要使用Welch』s $t$-test,即指定ttest_ind中的equal_var=False。我們同樣得到了比較小的$p$-value$,在顯著性水平0.05的前提下拒絕原假設,即認為兩組數據均值不等。

stats還提供其他大量的假設檢驗函數,如bartlett和levene用於檢驗方差是否相等;anderson_ksamp用於進行Anderson-Darling的K-樣本檢驗等。

2.3 其他函數

有時需要知道某數值在一個分布中的分位,或者給定了一個分布,求某分位上的數值。這可以通過cdf和ppf函數完成:

In[8]:

g_dist = stats.gamma(a=2)print "quantiles of 2, 4 and 5:"print g_dist.cdf([2, 4, 5])print "Values of 25%, 50% and 90%:"print g_dist.pdf([0.25, 0.5, 0.95])

quantiles of 2, 4 and 5:[ 0.59399415 0.90842181 0.95957232]Values of 25%, 50% and 90%:[ 0.1947002 0.30326533 0.36740397]

對於一個給定的分布,可以用moment很方便的查看分布的矩信息,例如我們查看$N(0, 1)$的六階原點矩:

In[9]:

stats.norm.moment(6, loc=0, scale=1)

Out[9]:

15.000000000895332

describe函數提供對數據集的統計描述分析,包括數據樣本大小,極值,均值,方差,偏度和峰度:

In[10]:

norm_dist = stats.norm(loc=0, scale=1.8)dat = norm_dist.rvs(size=100)info = stats.describe(dat)print "Data size is: " + str(info[0])print "Minimum value is: " + str(info[1][0])print "Maximum value is: " + str(info[1][1])print "Arithmetic mean is: " + str(info[2])print "Unbiased variance is: " + str(info[3])print "Biased skewness is: " + str(info[4])print "Biased kurtosis is: " + str(info[5])

Data size is: 100Minimum value is: -4.12414564687Maximum value is: 4.82577602489Arithmetic mean is: 0.0962913592209Unbiased variance is: 2.88719292463Biased skewness is: -0.00256548794681Biased kurtosis is: -0.317463421177

當我們知道一組數據服從某些分布的時候,可以調用fit函數來得到對應分布參數的極大似然估計(MLE, maximum-likelihood estimation)。以下代碼示例了假設數據服從正態分布,用極大似然估計分布參數:

In[11]:

norm_dist = stats.norm(loc=0, scale=1.8)dat = norm_dist.rvs(size=100)mu, sigma = stats.norm.fit(dat)print "MLE of data mean:" + str(mu)print "MLE of data standard deviation:" + str(sigma)

MLE of data mean:-0.249880829912MLE of data standard deviation:1.89195303507

pearsonr和spearmanr可以計算Pearson和Spearman相關系數,這兩個相關系數度量了兩組數據的相互線性關聯程度:

In[12]:

norm_dist = stats.norm()dat1 = norm_dist.rvs(size=100)exp_dist = stats.expon()dat2 = exp_dist.rvs(size=100)cor, pval = stats.pearsonr(dat1, dat2)print "Pearson correlation coefficient: " + str(cor)cor, pval = stats.pearsonr(dat1, dat2)print "Spearman's rank correlation coefficient: " + str(cor)

Pearson correlation coefficient: -0.0262911931014Spearman's rank correlation coefficient: -0.0262911931014

其中的$p$-value表示原假設(兩組數據不相關)下,相關系數的顯著性。

最後,在分析金融數據中使用頻繁的線性回歸在SciPy中也有提供,我們來看一個例子:

In[13]:

x = stats.chi2.rvs(3, size=50)y = 2.5 + 1.2 * x + stats.norm.rvs(size=50, loc=0, scale=1.5)slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)print "Slope of fitted model is:" , slopeprint "Intercept of fitted model is:", interceptprint "R-squared:", r_value**2

Slope of fitted model is: 1.44515601191Intercept of fitted model is: 1.91080684516R-squared: 0.798786910173

在前面的鏈接中,可以查到大部分stat中的函數,本節權作簡單介紹,挖掘更多功能的最好方法還是直接讀原始的文檔。另外,StatsModels(http://statsmodels.sourceforge.net )模塊提供了更為專業,更多的統計相關函數。若在SciPy沒有滿足需求,可以採用StatsModels。

三、優化部分

優化問題在投資中可謂是根本問題,如果手上有眾多可選的策略,應如何從中選擇一個「最好」的策略進行投資呢?這時就需要用到一些優化技術針對給定的指標進行尋優。隨著越來越多金融數據的出現,機器學習逐漸應用在投資領域,在機器學習中,優化也是十分重要的一個部分。以下介紹一些常見的優化方法,雖然例子是人工生成的,不直接應用於實際金融數據,我們希望讀者在後面遇到優化問題時,能夠從這些簡單例子迅速上手解決。

3.1 無約束優化問題

所謂的無約束優化問題指的是一個優化問題的尋優可行集合是目標函數自變數的定義域,即沒有外部的限制條件。例如,求解優化問題 [

minimizef(x)=x24.8x+1.2

] 就是一個無約束優化問題,而求解 [

minimizef(x)=x24.8x+1.2subject tox≥0

]則是一個帶約束的優化問題。更進一步,我們假設考慮的問題全部是凸優化問題,即目標函數是凸函數,其自變數的可行集是凸集。(詳細定義可參考斯坦福大學Stephen Boyd教授的教材convex optimization,下載鏈接:http://stanford.e/~boyd/cvxbook )

我們以Rosenbrock函數 [ f(mathbf{x}) = sum{i=1}^{N-1} 100 (x_i – x{i-1}^2)^2 + (1 – x_{i-1})^2 ] 作為尋優的目標函數來簡要介紹在SciPy中使用優化模塊scipy.optimize。

首先需要定義一下這個Rosenbrock函數:

In[14]:

def rosen(x): """The Rosenbrock function""" return sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)

3.1.1 Nelder-Mead單純形法

單純形法是運籌學中介紹的求解線性規劃問題的通用方法,這里的Nelder-Mead單純形法與其並不相同,只是用到單純形的概念。設定起始點$mathbf{x}_0 = (1.3, 0.7, 0.8, 1.9, 1.2)$,並進行最小化的尋優。這里『xtol』表示迭代收斂的容忍誤差上界:

In[15]:

x_0 = np.array([0.5, 1.6, 1.1, 0.8, 1.2])res = opt.minimize(rosen, x_0, method='nelder-mead', options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Nelder-Mead Simplex algorithm:"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 436 Function evaluations: 706Result of minimizing Rosenbrock function via Nelder-Mead Simplex algorithm: status: 0 nfev: 706 success: True fun: 1.6614969876635003e-17 x: array([ 1., 1., 1., 1., 1.]) message: 'Optimization terminated successfully.' nit: 436

Rosenbrock函數的性質比較好,簡單的優化方法就可以處理了,還可以在minimize中使用method=』powell』來指定使用Powell』s method。這兩種簡單的方法並不使用函數的梯度,在略微復雜的情形下收斂速度比較慢,下面讓我們來看一下用到函數梯度進行尋優的方法。

3.1.2 Broyden-Fletcher-Goldfarb-Shanno法

Broyden-Fletcher-Goldfarb-Shanno(BFGS)法用到了梯度信息,首先求一下Rosenbrock函數的梯度:

[ begin{split} frac{partial f}{partial xj} &= sum{i=1}^N 200(xi – x{i-1}^2)(delta{i,j} – 2x{i-1}delta{i-1,j}) -2(1 – x{i-1})delta_{i-1,j} &= 200(xj – x{j-1}^2) – 400xj(x{j+1} – x_j^2) – 2(1 – x_j) end{split}] 其中當$i=j$時,$delta_{i,j} = 1$,否則$delta_{i,j} = 0$。

邊界的梯度是特例,有如下形式: [ begin{split} frac{partial f}{partial x_0} &= -400x_0(x_1 – x_0^2) – 2(1 – x_0), frac{partial f}{partial x{N-1}} &= 200(x{N-1} – x_{N-2}^2) end{split}]

我們可以如下定義梯度向量的計算函數了:

In[16]:

def rosen_der(x): xm = x[1:-1] xm_m1 = x[:-2] xm_p1 = x[2:] der = np.zeros_like(x) der[1:-1] = 200*(xm-xm_m1**2) - 400*(xm_p1 - xm**2)*xm - 2*(1-xm) der[0] = -400*x[0]*(x[1]-x[0]**2) - 2*(1-x[0]) der[-1] = 200*(x[-1]-x[-2]**2) return der

梯度信息的引入在minimize函數中通過參數jac指定:

In[17]:

res = opt.minimize(rosen, x_0, method='BFGS', jac=rosen_der, options={'disp': True})print "Result of minimizing Rosenbrock function via Broyden-Fletcher-Goldfarb-Shanno algorithm:"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 52 Function evaluations: 63 Gradient evaluations: 63Result of minimizing Rosenbrock function via Broyden-Fletcher-Goldfarb-Shanno algorithm: status: 0 success: True njev: 63 nfev: 63 hess_inv: array([[ 0.00726515, 0.01195827, 0.0225785 , 0.04460906, 0.08923649], [ 0.01195827, 0.02417936, 0.04591135, 0.09086889, 0.18165604], [ 0.0225785 , 0.04591135, 0.09208689, 0.18237695, 0.36445491], [ 0.04460906, 0.09086889, 0.18237695, 0.36609277, 0.73152922], [ 0.08923649, 0.18165604, 0.36445491, 0.73152922, 1.46680958]]) fun: 3.179561068096293e-14 x: array([ 1. , 0.99999998, 0.99999996, 0.99999992, 0.99999983]) message: 'Optimization terminated successfully.' jac: array([ 4.47207141e-06, 1.30357917e-06, -1.86454207e-07, -2.00564982e-06, 4.98799446e-07])

3.1.3 牛頓共軛梯度法(Newton-Conjugate-Gradient algorithm)

用到梯度的方法還有牛頓法,牛頓法是收斂速度最快的方法,其缺點在於要求Hessian矩陣(二階導數矩陣)。牛頓法大致的思路是採用泰勒展開的二階近似: [ f(mathbf{x}) approx f(mathbf{x}_0) + nabla f(mathbf{x}_0)(mathbf{x} – mathbf{x}_0) + frac{1}{2}(mathbf{x} – mathbf{x}_0)^Tmathbf{H}(mathbf{x}_0)(mathbf{x} – mathbf{x}_0) ] 其中$mathbf{H}(mathbf{x}_0)$表示二階導數矩陣。若Hessian矩陣是正定的,函數的局部最小值可以通過使上面的二次型的一階導數等於0來獲取,我們有: [ mathbf{x}_{mathrm{opt}} = mathbf{x}_0 – mathbf{H}^{-1}nabla f ]

這里可使用共軛梯度近似Hessian矩陣的逆矩陣。下面給出Rosenbrock函數的Hessian矩陣元素通式:

[ begin{split} H{i,j} = frac{partial^2 f}{partial x_i partial x_j} &= 200(delta{i,j} – 2x{i-1}delta{i-1,j}) – 400xi(delta{i+1,j} – 2xidelta{i,j}) – 400delta{i,j}(x{i+1} – xi^2) + 2delta{i,j}, &= (202 + 1200xi^2 – 400x{i+1}) delta{i,j} – 400x_idelta{i+1,j} – 400x{i-1}delta{i-1,j} end{split}] 其中$i,j in [1, N-2]$。其他邊界上的元素通式為: [ begin{split} frac{partial^2 f}{partial x_0^2} &= 1200x_0^2 – 400x_1 + 2, frac{partial^2 f}{partial x_0 partial x_1} = frac{partial^2 f}{partial x_1 partial x_0} &= -400x_0, frac{partial^2 f}{partial x{N-1} partial x{N-2}} = frac{partial^2 f}{partial x{N-2} partial x{N-1}} &= -400x_{N-2}, frac{partial^2 f}{partial x_{N-1}^2} &= 200. end{split}]

例如,當$N=5$時的Hessian矩陣為:

[ mathbf{H} =

[1200x20400x1+2400x0000400x0202+1200x21400x2400x1000400x1202+1200x22400x3400x2000400x2202+1200x23400x4400x3000400x3200]

]為使用牛頓共軛梯度法,我們需要提供一個計算Hessian矩陣的函數:

In[18]:

def rosen_hess(x): x = np.asarray(x) H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1) diagonal = np.zeros_like(x) diagonal[0] = 1200*x[0]**2-400*x[1]+2 diagonal[-1] = 200 diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:] H = H + np.diag(diagonal) return H

In[19]:

res = opt.minimize(rosen, x_0, method='Newton-CG', jac=rosen_der, hess=rosen_hess, options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian):"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 20 Function evaluations: 22 Gradient evaluations: 41 Hessian evaluations: 20Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian): status: 0 success: True njev: 41 nfev: 22 fun: 1.47606641102778e-19 x: array([ 1., 1., 1., 1., 1.]) message: 'Optimization terminated successfully.' nhev: 20 jac: array([ -3.62847530e-11, 2.68148992e-09, 1.16637362e-08, 4.81693414e-08, -2.76999090e-08])

對於一些大型的優化問題,Hessian矩陣將異常大,牛頓共軛梯度法用到的僅是Hessian矩陣和一個任意向量的乘積,為此,用戶可以提供兩個向量,一個是Hessian矩陣和一個任意向量$mathbf{p}$的乘積,另一個是向量$mathbf{p}$,這就減少了存儲的開銷。記向量$mathbf{p} = (p_1, ldots, p_{N-1})$,可有

[ mathbf{H(x)p} = begin{bmatrix} (1200x0^2 – 400x_1 + 2)p_0 -400x_0p_1 vdots -400x{i-1}p{i-1} + (202 + 1200x_i^2 – 400x{i+1})pi – 400x_ip{i+1} vdots -400x{N-2}p{N-2} + 200p_{N-1} end{bmatrix} ]

我們定義如下函數並使用牛頓共軛梯度方法尋優:

In[20]:

def rosen_hess_p(x, p): x = np.asarray(x) Hp = np.zeros_like(x) Hp[0] = (1200*x[0]**2 - 400*x[1] + 2)*p[0] - 400*x[0]*p[1] Hp[1:-1] = -400*x[:-2]*p[:-2]+(202+1200*x[1:-1]**2-400*x[2:])*p[1:-1] -400*x[1:-1]*p[2:] Hp[-1] = -400*x[-2]*p[-2] + 200*p[-1] return Hpres = opt.minimize(rosen, x_0, method='Newton-CG', jac=rosen_der, hessp=rosen_hess_p, options={'xtol': 1e-8, 'disp': True})print "Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian times arbitrary vector):"print res

Optimization terminated successfully. Current function value: 0.000000 Iterations: 20 Function evaluations: 22 Gradient evaluations: 41 Hessian evaluations: 58Result of minimizing Rosenbrock function via Newton-Conjugate-Gradient algorithm (Hessian times arbitrary vector): status: 0

轉載請註明:數據分析 » 量化分析師的Python_python 金融量化分析_python金融大數據分析

㈢ python邏輯回歸怎麼求正系數

Python 邏輯回歸求正系數的方法可以分為兩種:

1. 使用線性模型的求解方法:可以使用sklearn中的LogisticRegression類來求解正系數,調用其中的fit()方法就可以求解出正系數。

2. 使用梯度下降法:可以自己實現梯度下降法,通過不斷迭代更新正系數,最終獲得最優的正系數。

㈣ 人工智慧一些術語總結

隨著智能時代慢慢的到來,有一些基本概念都不知道真的是要落伍了,作為正在積極學習向上的青年,我想總結一份筆記,此份筆記會記錄眾多AI領域的術語和概念,當然,學一部分記錄一部分,並且可能會夾雜著自己的一些理解,由於能力有限,有問題希望大家多多賜教。當然,由於內容太多,僅僅只是記錄了中英名對照,有的加上了簡單的解釋,沒加的後續大家有需求,我會慢慢完善~~。目錄暫定以首字母的字典序排序。可以當作目錄方便以後查閱~~建議收藏加點贊哈哈哈

------------------------------------------------這里是分割線--------------------------------------------------

A

准確率(accuracy)

分類模型預測准確的比例。

二分類問題中,准確率定義為:accuracy = (true positives +true negatives)/all samples

多分類問題中,准確率定義為:accuracy = correctpredictions/all samples

激活譽租函數(activation function)

一種函數,將前一層所有神經元激活值的加權和 輸入到一個非線性函數中,然後作為下一層神經元的輸入,例如 ReLU 或 Sigmoid

AdaGrad

一種復雜的梯度下降演算法,重新調節每個參數的梯度,高效地給每個參數一個單獨的學習率。

AUC(曲線下面積)

一種考慮到所有可能的分類閾值的評估標准。ROC 曲線下面積代表分類器隨機預測真正類(Ture Positives)要比假正類(False Positives)概率大的確信度。

Adversarial example(對抗樣本)

Adversarial Networks(對抗網路)

Artificial General Intelligence/AGI(通用人工智慧)

Attention mechanism(注意力機制)

Autoencoder(自編碼器)

Automatic summarization(自動摘要)

Average gradient(平均梯度)

Average-Pooling(平均池化)

B

反向傳播(Backpropagation/BP)

神經網路中完成梯度下降的重要演算法核返。首先,在前向傳播的過程中計算每個節點的輸出值。然後,在反向傳播的過程中計算與每個參數對應的誤差的偏導數。

基線(Baseline)

被用為對比模型表現參考的簡單模型。

批量(Batch)

模型訓練中一個迭代(指一次梯度更新)使用的樣本集。

批量大小(Batch size)

一個批量中樣本的數量。例如,SGD 的批量大小為 1,而 mini-batch 的批慶氏兆量大小通常在 10-1000 之間。

偏置(Bias)

與原點的截距或偏移量。

二元分類器(Binary classification)

一類分類任務,輸出兩個互斥類別中的一個。比如垃圾郵件檢測。

詞袋(Bag of words/Bow)

基學習器(Base learner)

基學習演算法(Base learning algorithm)

貝葉斯網路(Bayesian network)

基準(Bechmark)

信念網路(Belief network)

二項分布(Binomial distribution)

玻爾茲曼機(Boltzmann machine)

自助采樣法/可重復采樣/有放回採樣(Bootstrap sampling)

廣播(Broadcasting)

C

類別(Class)

所有同類屬性的目標值作為一個標簽。

分類模型(classification)

機器學習模型的一種,將數據分離為兩個或多個離散類別。

收斂(convergence)

訓練過程達到的某種狀態,其中訓練損失和驗證損失在經過了確定的迭代次數後,在每一次迭代中,改變很小或完全不變。

凸函數(concex function)

一種形狀大致呈字母 U 形或碗形的函數。然而,在退化情形中,凸函數的形狀就像一條線。

成本(cost)

loss 的同義詞。深度學習模型一般都會定義自己的loss函數。

交叉熵(cross-entropy)

多類別分類問題中對 Log 損失函數的推廣。交叉熵量化兩個概率分布之間的區別。

條件熵(Conditional entropy)

條件隨機場(Conditional random field/CRF)

置信度(Confidence)

共軛方向(Conjugate directions)

共軛分布(Conjugate distribution)

共軛梯度(Conjugate gradient)

卷積神經網路(Convolutional neural network/CNN)

餘弦相似度(Cosine similarity)

成本函數(Cost Function)

曲線擬合(Curve-fitting)

D

數據集(data set)

樣本的集合

深度模型(deep model)

一種包含多個隱藏層的神經網路。深度模型依賴於其可訓練的非線性性質。和寬度模型對照(widemodel)。

dropout 正則化(dropoutregularization)

訓練神經網路時一種有用的正則化方法。dropout 正則化的過程是在單次梯度計算中刪去一層網路中隨機選取的固定數量的單元。刪去的單元越多,正則化越強。

數據挖掘(Data mining)

決策樹/判定樹(Decisiontree)

深度神經網路(Deep neural network/DNN)

狄利克雷分布(Dirichlet distribution)

判別模型(Discriminative model)

下采樣(Down sampling)

動態規劃(Dynamic programming)

E

早期停止法(early stopping)

一種正則化方法,在訓練損失完成下降之前停止模型訓練過程。當驗證數據集(validationdata set)的損失開始上升的時候,即泛化表現變差的時候,就該使用早期停止法了。

嵌入(embeddings)

一類表示為連續值特徵的明確的特徵。嵌入通常指將高維向量轉換到低維空間中。

經驗風險最小化(empirical risk minimization,ERM)

選擇能使得訓練數據的損失函數最小化的模型的過程。和結構風險最小化(structualrisk minimization)對照。

集成(ensemble)

多個模型預測的綜合考慮。可以通過以下一種或幾種方法創建一個集成方法:

設置不同的初始化;

設置不同的超參量;

設置不同的總體結構。

深度和廣度模型是一種集成。

樣本(example)

一個數據集的一行內容。一個樣本包含了一個或多個特徵,也可能是一個標簽。參見標注樣本(labeledexample)和無標注樣本(unlabeled example)。

F

假負類(false negative,FN)

被模型錯誤的預測為負類的樣本。例如,模型推斷一封郵件為非垃圾郵件(負類),但實際上這封郵件是垃圾郵件。

假正類(false positive,FP)

被模型錯誤的預測為正類的樣本。例如,模型推斷一封郵件為垃圾郵件(正類),但實際上這封郵件是非垃圾郵件。

假正類率(false positive rate,FP rate)

ROC 曲線(ROC curve)中的 x 軸。FP 率的定義是:假正率=假正類數/(假正類數+真負類數)

特徵工程(feature engineering)

在訓練模型的時候,挖掘對模型效果有利的特徵。

前饋神經網路(Feedforward Neural Networks/FNN )

G

泛化(generalization)

指模型利用新的沒見過的數據而不是用於訓練的數據作出正確的預測的能力。

廣義線性模型(generalized linear model)

最小二乘回歸模型的推廣/泛化,基於高斯雜訊,相對於其它類型的模型(基於其它類型的雜訊,比如泊松雜訊,或類別雜訊)。廣義線性模型的例子包括:

logistic 回歸

多分類回歸

最小二乘回歸

梯度(gradient)

所有變數的偏導數的向量。在機器學習中,梯度是模型函數的偏導數向量。梯度指向最陡峭的上升路線。

梯度截斷(gradient clipping)

在應用梯度之前先修飾數值,梯度截斷有助於確保數值穩定性,防止梯度爆炸出現。

梯度下降(gradient descent)

通過計算模型的相關參量和損失函數的梯度最小化損失函數,值取決於訓練數據。梯度下降迭代地調整參量,逐漸靠近權重和偏置的最佳組合,從而最小化損失函數。

圖(graph)

在 TensorFlow 中的一種計算過程展示。圖中的節點表示操作。節點的連線是有指向性的,表示傳遞一個操作(一個張量)的結果(作為一個操作數)給另一個操作。使用 TensorBoard 能可視化計算圖。

高斯核函數(Gaussian kernel function)

高斯混合模型(Gaussian Mixture Model)

高斯過程(Gaussian Process)

泛化誤差(Generalization error)

生成模型(Generative Model)

遺傳演算法(Genetic Algorithm/GA)

吉布斯采樣(Gibbs sampling)

基尼指數(Gini index)

梯度下降(Gradient Descent)

H

啟發式(heuristic)

一個問題的實際的和非最優的解,但能從學習經驗中獲得足夠多的進步。

隱藏層(hidden layer)

神經網路中位於輸入層(即特徵)和輸出層(即預測)之間的合成層。一個神經網路包含一個或多個隱藏層。

超參數(hyperparameter)

連續訓練模型的過程中可以擰動的「旋鈕」。例如,相對於模型自動更新的參數,學習率(learningrate)是一個超參數。和參量對照。

硬間隔(Hard margin)

隱馬爾可夫模型(Hidden Markov Model/HMM)

層次聚類(Hierarchical clustering)

假設檢驗(Hypothesis test)

I

獨立同分布(independently and identicallydistributed,i.i.d)

從不會改變的分布中獲取的數據,且獲取的每個值不依賴於之前獲取的值。i.i.d. 是機器學習的理想情況——一種有用但在現實世界中幾乎找不到的數學構建。

推斷(inference)

在機器學習中,通常指將訓練模型應用到無標注樣本來進行預測的過程。在統計學中,推斷指在觀察到的數據的基礎上擬合分布參數的過程。

輸入層(input layer)

神經網路的第一層(接收輸入數據)。

評分者間一致性(inter-rater agreement)

用來衡量一項任務中人類評分者意見一致的指標。如果意見不一致,則任務說明可能需要改進。有時也叫標注者間信度(inter-annotator agreement)或評分者間信度(inter-raterreliability)。

增量學習(Incremental learning)

獨立成分分析(Independent Component Analysis/ICA)

獨立子空間分析(Independent subspace analysis)

信息熵(Information entropy)

信息增益(Information gain)

J

JS 散度(Jensen-ShannonDivergence/JSD)

K

Kernel 支持向量機(KernelSupport Vector Machines/KSVM)

一種分類演算法,旨在通過將輸入數據向量映射到更高維度的空間使正類和負類之間的邊際最大化。例如,考慮一個輸入數據集包含一百個特徵的分類問題。為了使正類和負類之間的間隔最大化,KSVM 從內部將特徵映射到百萬維度的空間。KSVM 使用的損失函數叫作 hinge 損失。

核方法(Kernel method)

核技巧(Kernel trick)

k 折交叉驗證/k 倍交叉驗證(K-fold cross validation)

K - 均值聚類(K-MeansClustering)

K近鄰演算法(K-Nearest NeighboursAlgorithm/KNN)

知識圖譜(Knowledge graph)

知識庫(Knowledge base)

知識表徵(Knowledge Representation)

L

L1 損失函數(L1 loss)

損失函數基於模型對標簽的預測值和真實值的差的絕對值而定義。L1 損失函數比起 L2 損失函數對異常值的敏感度更小。

L1 正則化(L1regularization)

一種正則化,按照權重絕對值總和的比例進行懲罰。在依賴稀疏特徵的模型中,L1 正則化幫助促使(幾乎)不相關的特徵的權重趨近於 0,從而從模型中移除這些特徵。

L2 損失(L2 loss)

參見平方損失。

L2 正則化(L2regularization)

一種正則化,按照權重平方的總和的比例進行懲罰。L2 正則化幫助促使異常值權重更接近 0 而不趨近於 0。(可與 L1 正則化對照閱讀。)L2 正則化通常改善線性模型的泛化效果。

標簽(label)

在監督式學習中,樣本的「答案」或「結果」。標注數據集中的每個樣本包含一或多個特徵和一個標簽。在垃圾郵件檢測數據集中,特徵可能包括主題、發出者何郵件本身,而標簽可能是「垃圾郵件」或「非垃圾郵件」。

標注樣本(labeled example)

包含特徵和標簽的樣本。在監督式訓練中,模型從標注樣本中進行學習。

學習率(learning rate)

通過梯度下降訓練模型時使用的一個標量。每次迭代中,梯度下降演算法使學習率乘以梯度,乘積叫作 gradient step。學習率是一個重要的超參數。

最小二乘回歸(least squares regression)

通過 L2 損失最小化進行訓練的線性回歸模型。

線性回歸(linear regression)

對輸入特徵的線性連接輸出連續值的一種回歸模型。

logistic 回歸(logisticregression)

將 sigmoid 函數應用於線性預測,在分類問題中為每個可能的離散標簽值生成概率的模型。盡管 logistic 回歸常用於二元分類問題,但它也用於多類別分類問題(這種情況下,logistic回歸叫作「多類別 logistic 回歸」或「多項式 回歸」。

對數損失函數(Log Loss)

二元 logistic 回歸模型中使用的損失函數。

損失(Loss)

度量模型預測與標簽距離的指標,它是度量一個模型有多糟糕的指標。為了確定損失值,模型必須定義損失函數。例如,線性回歸模型通常使用均方差作為損失函數,而 logistic 回歸模型使用對數損失函數。

隱狄利克雷分布(Latent Dirichlet Allocation/LDA)

潛在語義分析(Latent semantic analysis)

線性判別(Linear Discriminant Analysis/LDA)

長短期記憶(Long-Short Term Memory/LSTM)

M

機器學習(machine learning)

利用輸入數據構建(訓練)預測模型的項目或系統。該系統使用學習的模型對與訓練數據相同分布的新數據進行有用的預測。機器學習還指與這些項目或系統相關的研究領域。

均方誤差(Mean Squared Error/MSE)

每個樣本的平均平方損失。MSE 可以通過平方損失除以樣本數量來計算。

小批量(mini-batch)

在訓練或推斷的一個迭代中運行的整批樣本的一個小的隨機選擇的子集。小批量的大小通常在10 到 1000 之間。在小批量數據上計算損失比在全部訓練數據上計算損失要高效的多。

機器翻譯(Machine translation/MT)

馬爾可夫鏈蒙特卡羅方法(Markov Chain Monte Carlo/MCMC)

馬爾可夫隨機場(Markov Random Field)

多文檔摘要(Multi-document summarization)

多層感知器(Multilayer Perceptron/MLP)

多層前饋神經網路(Multi-layer feedforward neuralnetworks)

N

NaN trap

訓練過程中,如果模型中的一個數字變成了 NaN,則模型中的很多或所有其他數字最終都變成 NaN。NaN 是「Not aNumber」的縮寫。

神經網路(neural network)

該模型從大腦中獲取靈感,由多個層組成(其中至少有一個是隱藏層),每個層包含簡單的連接單元或神經元,其後是非線性。

神經元(neuron)

神經網路中的節點,通常輸入多個值,生成一個輸出值。神經元通過將激活函數(非線性轉換)應用到輸入值的加權和來計算輸出值。

歸一化(normalization)

將值的實際區間轉化為標准區間的過程,標准區間通常是-1 到+1 或 0 到 1。例如,假設某個特徵的自然區間是 800 到 6000。通過減法和分割,你可以把那些值標准化到區間-1 到+1。參見縮放。

Numpy

Python 中提供高效數組運算的開源數學庫。pandas 基於 numpy 構建。

Naive bayes(樸素貝葉斯)

Naive Bayes Classifier(樸素貝葉斯分類器)

Named entity recognition(命名實體識別)

Natural language generation/NLG(自然語言生成)

Natural language processing(自然語言處理)

Norm(范數)

O

目標(objective)

演算法嘗試優化的目標函數。

one-hot 編碼(獨熱編碼)(one-hotencoding)

一個稀疏向量,其中:一個元素設置為 1,所有其他的元素設置為 0。。

一對多(one-vs.-all)

給出一個有 N 個可能解決方案的分類問題,一對多解決方案包括 N 個獨立的二元分類器——每個可能的結果都有一個二元分類器。例如,一個模型將樣本分為動物、蔬菜或礦物,則一對多的解決方案將提供以下三種獨立的二元分類器:

動物和非動物

蔬菜和非蔬菜

礦物和非礦物

過擬合(overfitting)

創建的模型與訓練數據非常匹配,以至於模型無法對新數據進行正確的預測

Oversampling(過采樣)

P

pandas

一種基於列的數據分析 API。很多機器學習框架,包括 TensorFlow,支持 pandas 數據結構作為輸入。參見 pandas 文檔。

參數(parameter)

機器學習系統自行訓練的模型的變數。例如,權重是參數,它的值是機器學習系統通過連續的訓練迭代逐漸學習到的。注意與超參數的區別。

性能(performance)

在軟體工程中的傳統含義:軟體運行速度有多快/高效?

在機器學習中的含義:模型的准確率如何?即,模型的預測結果有多好?

困惑度(perplexity)

對模型完成任務的程度的一種度量指標。例如,假設你的任務是閱讀用戶在智能手機上輸入的單詞的頭幾個字母,並提供可能的完整單詞列表。該任務的困惑度(perplexity,P)是為了列出包含用戶實際想輸入單詞的列表你需要進行的猜測數量。

流程(pipeline)

機器學習演算法的基礎架構。管道包括收集數據、將數據放入訓練數據文件中、訓練一或多個模型,以及最終輸出模型。

Principal component analysis/PCA(主成分分析)

Precision(查准率/准確率)

Prior knowledge(先驗知識)

Q

Quasi Newton method(擬牛頓法)

R

召回率(recall)

回歸模型(regression model)

一種輸出持續值(通常是浮點數)的模型。而分類模型輸出的是離散值。

正則化(regularization)

對模型復雜度的懲罰。正則化幫助防止過擬合。正則化包括不同種類:

L1 正則化

L2 正則化

dropout 正則化

early stopping(這不是正式的正則化方法,但可以高效限制過擬合)

正則化率(regularization rate)

一種標量級,用 lambda 來表示,指正則函數的相對重要性。從下面這個簡化的損失公式可以看出正則化率的作用:

minimize(loss function + λ(regularization function))

提高正則化率能夠降低過擬合,但可能會使模型准確率降低。

表徵(represention)

將數據映射到有用特徵的過程。

受試者工作特徵曲線(receiver operatingcharacteristic/ROC Curve)

反映在不同的分類閾值上,真正類率和假正類率的比值的曲線。參見 AUC。

Recurrent Neural Network(循環神經網路)

Recursive neural network(遞歸神經網路)

Reinforcement learning/RL(強化學習)

Re-sampling(重采樣法)

Representation learning(表徵學習)

Random Forest Algorithm(隨機森林演算法)

S

縮放(scaling)

特徵工程中常用的操作,用於控制特徵值區間,使之與數據集中其他特徵的區間匹配。例如,假設你想使數據集中所有的浮點特徵的區間為 0 到 1。給定一個特徵區間是 0 到 500,那麼你可以通過將每個值除以 500,縮放特徵值區間。還可參見正則化。

scikit-learn

一種流行的開源機器學習平台。網址:www.scikit-learn.org。

序列模型(sequence model)

輸入具有序列依賴性的模型。例如,根據之前觀看過的視頻序列對下一個視頻進行預測。

Sigmoid 函數(sigmoid function)

softmax

為多類別分類模型中每個可能的類提供概率的函數。概率加起來的總和是 1.0。例如,softmax 可能檢測到某個圖像是一隻狗的概率為 0.9,是一隻貓的概率為 0.08,是一匹馬的概率為 0.02。(也叫作 full softmax)。

結構風險最小化(structural risk minimization/SRM)

這種演算法平衡兩個目標:

構建預測性最強的模型(如最低損失)。

使模型盡量保持簡單(如強正則化)。

比如,在訓練集上的損失最小化 + 正則化的模型函數就是結構風險最小化演算法。更多信息,參見 http://www.svms.org/srm/。可與經驗風險最小化對照閱讀。

監督式機器學習(supervised machine learning)

利用輸入數據及其對應標簽來訓練模型。監督式機器學習類似學生通過研究問題和對應答案進行學習。在掌握問題和答案之間的映射之後,學生就可以提供同樣主題的新問題的答案了。可與非監督機器學習對照閱讀。

Similarity measure(相似度度量)

Singular Value Decomposition(奇異值分解)

Soft margin(軟間隔)

Soft margin maximization(軟間隔最大化)

Support Vector Machine/SVM(支持向量機)

T

張量(tensor)

TensorFlow 項目的主要數據結構。張量是 N 維數據結構(N 的值很大),經常是標量、向量或矩陣。張量可以包括整數、浮點或字元串值。

Transfer learning(遷移學習)

U

無標簽樣本(unlabeled example)

包含特徵但沒有標簽的樣本。無標簽樣本是推斷的輸入。在半監督學習和無監督學習的訓練過程中,通常使用無標簽樣本。

無監督機器學習(unsupervised machine learning)

訓練一個模型尋找數據集(通常是無標簽數據集)中的模式。無監督機器學習最常用於將數據分成幾組類似的樣本。無監督機器學習的另一個例子是主成分分析(principal componentanalysis,PCA)

W

Word embedding(詞嵌入)

Word sense disambiguation(詞義消歧)

㈤ 平面內一點到另兩點距離之和最小的求法

怎樣「求空間內一點到其它所有點的距離之和友塵嘩最小」?首先將這個問題形式化:
公式代碼:
\min f(x,y) = \min \sum_i \sqrt {(x - x_i)^2 + (y - y_i)^2}
這里是距離之和,而不是平方和。Kmeans聚類中用的評價標準是平方和,如果只有一個類中心,那麼可以直接求偏導得到使得平方和最小的點就是中心。這里問題與平方和的解是不是一樣的,比如三角形到三個頂點距離之和最短的點就是費馬點。
這里可以用最優化方法中的「搜索」來求解,這一系列方法包括了梯度下降法、牛頓法和共軛梯度法等。在這里用梯度下降法是最簡單的,通過這個例子我也明白了為什麼實際運用中梯度下降法是應用最廣的。相比梯度下降法,牛頓法需要求Hesse矩陣,還是相對麻 煩不少。梯度下降法搜索步驟就是每一步都向導數的逆方向將自變數前進一個步長(可變),在這里導數方向就是

公式代碼:
abla f(x,y) =
\left[
\begin{array} {lcr}
\displaystyle \sum_i \frac{x - x_i}{\sqrt{(x - x_i)^2 + (y - y_i)^2pan >}} \\
\displaystyle \sum_i \frac{y - y_i}{\sqrt{(x - x_i)^2 + (y - y_i)^2}}
\end{array}
\right]
梯度下兄裂降法也有它使用起來讓人比較為難的地方,那就是步長很難選取,課本上所給出的例子一般都是針對較簡單表達式提出的可變步長計算。在本問題的求解中為簡單起見,步長是取的定值。整個過程用Python3實現(起初想用R來做,但是R沒法調試……歸根結底還是功力不夠)實現,結合了scipy和matplotlib兩個好行包,結果看起來還是比較靠譜:

最後附上源代碼:
Python 3語言: 高亮代碼由發芽網提供
from scipy import *
import pylab
def f(p, pts):
return sum(sum((p - pts) ** 2, axis=1) ** 0.5)
def fd(p, pts):
dx = sum((p[0] - pts[:, 0]) / sum((p - pts) ** 2, axis=1) ** 0.5)
dy = sum((p[1] - pts[:, 1]) / sum((p - pts) ** 2, axis=1) ** 0.5)
s = (dx ** 2 + dy ** 2) ** 0.5
br> dx /= s
dy /= s
return array([dx, dy])

pts = rand(10, 2)
x = array([0, 0])
t = 0.1
xstep = x
for k in range(100):
y = f(x, pts)
xk = x - t * fd(x, pts)
yk = f(xk, pts)
if y - yk > 1e-8:
x = xk
y = yk
elif yk - y > 1e-8:
t *= 0.5
else:
break
xstep = vstack((xstep, x))
print(x, y)
pylab.plot(pts[:, 0], pts[:, 1], 'bo')
pylab.plot(xstep[:, 0], xstep[:, 1], 'ro')
pylab.plot(xstep[:, 0], xstep[:, 1], 'k-')
pylab.xlabel('iter = %d, Min = %.3f, p = (%.3f, %.3f), t = %f' % (k, y, x[0], x[1], t))
pylab.show()

㈥ Python怎麼做最優化

一、概觀
scipy中的optimize子包中提供了常用的最優化演算法函數實現。我們可以直接調用這些函數完成我們的優化問題。optimize中函數最典型的特點就是能夠從函數名稱上看出是使用了什麼演算法。下面optimize包中函數的概覽:
1.非線性最優化
fmin -- 簡單Nelder-Mead演算法
fmin_powell -- 改進型Powell法
fmin_bfgs -- 擬Newton法
fmin_cg -- 非線性共軛梯度法
fmin_ncg -- 線性搜索Newton共軛梯度法
leastsq -- 最小二乘
2.有約束的多元函數問題
fmin_l_bfgs_b ---使用L-BFGS-B演算法
fmin_tnc ---梯度信息
fmin_cobyla ---線性逼近
fmin_slsqp ---序列最小二乘法
nnls ---解|| Ax - b ||_2 for x>=0
3.全局優化
anneal ---模擬退火演算法
brute --強力法
4.標量函數
fminbound
brent
golden
bracket
5.擬合
curve_fit-- 使用非線性最小二乘法擬合
6.標量函數求根
brentq ---classic Brent (1973)
brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出這個演算法的人名
bisect ---二分法
newton ---牛頓法
fixed_point
7.多維函數求根
fsolve ---通用
broyden1 ---Broyden』s first Jacobian approximation.
broyden2 ---Broyden』s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixing
excitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.實用函數
line_search ---找到滿足強Wolfe的alpha值
check_grad ---通過和前向有限差分逼近比較檢查梯度函數的正確性二、實戰非線性最優化
fmin完整的調用形式是:
fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不過我們最常使用的就是前兩個參數。一個描述優化問題的函數以及初值。後面的那些參數我們也很容易理解。如果您能用到,請自己研究。下面研究一個最簡單的問題,來感受這個函數的使用方法:f(x)=x**2-4*x+8,我們知道,這個函數的最小值是4,在x=2的時候取到。
from scipy.optimize import fmin #引入優化包def myfunc(x):
return x**2-4*x+8 #定義函數
x0 = [1.3] #猜一個初值
xopt = fmin(myfunc, x0) #求解
print xopt #列印結果
運行之後,給出的結果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
程序准確的計算得出了最小值,不過最小值點並不是嚴格的2,這應該是由二進制機器編碼誤差造成的。
除了fmin_ncg必須提供梯度信息外,其他幾個函數的調用大同小異,完全類似。我們不妨做一個對比:
from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):
return x**2-4*x+8
x0 = [1.3]
xopt1 = fmin(myfunc, x0)
print xopt1
print
xopt2 = fmin_powell(myfunc, x0)
print xopt2
print
xopt3 = fmin_bfgs(myfunc, x0)
print xopt3
print
xopt4 = fmin_cg(myfunc,x0)
print xopt4
給出的結果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 53
1.99999999997
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 12
Gradient evaluations: 4
[ 2.00000001]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
[ 2.]
我們可以根據給出的消息直觀的判斷演算法的執行情況。每一種演算法數學上的問題,請自己看書學習。個人感覺,如果不是純研究數學的工作,沒必要搞清楚那些推導以及定理雲雲。不過,必須了解每一種演算法的優劣以及能力所及。在使用的時候,不妨多種演算法都使用一下,看看效果分別如何,同時,還可以互相印證演算法失效的問題。
在from scipy.optimize import fmin之後,就可以使用help(fmin)來查看fmin的幫助信息了。幫助信息中沒有例子,但是給出了每一個參數的含義說明,這是調用函數時候的最有價值參考。
源碼研究癖好的,或者當你需要改進這些已經實現的演算法的時候,可能需要查看optimize中的每種演算法的源代碼。在這里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聰明的你肯定發現了,順著這個鏈接往上一級、再往上一級,你會找到scipy的幾乎所有源碼!

㈦ Python怎麼做最優化

一、概觀scipy中的optimize子包中提供了常用的最優化演算法函數實現。我們可以直接調用這些函數完成我們的優化問題。optimize中函數最典型的特點就是能夠從函數名稱上看出是使用了什麼演算法。下面optimize包中函數的概覽:1.非線性最優化fmin -- 簡單Nelder-Mead演算法fmin_powell -- 改進型Powell法fmin_bfgs -- 擬Newton法fmin_cg -- 非線性共軛梯度法fmin_ncg -- 線性搜索Newton共軛梯度法leastsq -- 最小二乘2.有約束的多元函數問題fmin_l_bfgs_b ---使用L-BFGS-B演算法fmin_tnc ---梯度信息fmin_cobyla ---線性逼近fmin_slsqp ---序列最小二乘法nnls ---解|| Ax - b ||_2 for x=03.全局優化anneal ---模擬退火演算法brute --強力法4.標量函數fminboundbrentgoldenbracket5.擬合curve_fit-- 使用非線性最小二乘法擬合6.標量函數求根brentq ---classic Brent (1973)brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出這個演算法的人名bisect ---二分法newton ---牛頓法fixed_point7.多維函數求根fsolve ---通用broyden1 ---Broyden』s first Jacobian approximation.broyden2 ---Broyden』s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixingexcitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.實用函數line_search ---找到滿足強Wolfe的alpha值check_grad ---通過和前向有限差分逼近比較檢查梯度函數的正確性二、實戰非線性最優化fmin完整的調用形式是:fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不過我們最常使用的就是前兩個參數。一個描述優化問題的函數以及初值。後面的那些參數我們也很容易理解。如果您能用到,請自己研究。下面研究一個最簡單的問題,來感受這個函數的使用方法:f(x)=x**2-4*x+8,我們知道,這個函數的最小值是4,在x=2的時候取到。from scipy.optimize import fmin #引入優化包def myfunc(x):return x**2-4*x+8 #定義函數x0 = [1.3] #猜一個初值xopt = fmin(myfunc, x0) #求解print xopt #列印結果運行之後,給出的結果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]程序准確的計算得出了最小值,不過最小值點並不是嚴格的2,這應該是由二進制機器編碼誤差造成的。除了fmin_ncg必須提供梯度信息外,其他幾個函數的調用大同小異,完全類似。我們不妨做一個對比:from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):return x**2-4*x+8x0 = [1.3]xopt1 = fmin(myfunc, x0)print xopt1printxopt2 = fmin_powell(myfunc, x0)print xopt2printxopt3 = fmin_bfgs(myfunc, x0)print xopt3printxopt4 = fmin_cg(myfunc,x0)print xopt4給出的結果是:Optimization terminated successfully.Current function value: 4.000000Iterations: 16Function evaluations: 32[ 2.00001953]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 531.99999999997Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 12Gradient evaluations: 4[ 2.00000001]Optimization terminated successfully.Current function value: 4.000000Iterations: 2Function evaluations: 15Gradient evaluations: 5[ 2.]我們可以根據給出的消息直觀的判斷演算法的執行情況。每一種演算法數學上的問題,請自己看書學習。個人感覺,如果不是純研究數學的工作,沒必要搞清楚那些推導以及定理雲雲。不過,必須了解每一種演算法的優劣以及能力所及。在使用的時候,不妨多種演算法都使用一下,看看效果分別如何,同時,還可以互相印證演算法失效的問題。在from scipy.optimize import fmin之後,就可以使用help(fmin)來查看fmin的幫助信息了。幫助信息中沒有例子,但是給出了每一個參數的含義說明,這是調用函數時候的最有價值參考。有源碼研究癖好的,或者當你需要改進這些已經實現的演算法的時候,可能需要查看optimize中的每種演算法的源代碼。在這里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聰明的你肯定發現了,順著這個鏈接往上一級、再往上一級,你會找到scipy的幾乎所有源碼!

㈧ deep dream演算法怎樣玩

SVM方面,首選的肯定是libsvm這個庫,應該是應用最廣的機器學習庫了。
下面主要推薦一些DeepLearning的GitHub項目吧!
1. convnetjs - star:2200+
實現了卷積神經網路,可以用來做分類,回歸,強化學習等。
2. DeepLearn Toolbox - star:1000+
Matlab實現中最熱的庫存,包括了cnn,DBN,sae,cae等主流模型褲穗。
3. Deep Learning(yusugomo) - star:800+
實現了深度學習網路,從演算法與實寬純激現上都比較全,提供了5種語言的實現:Python,C/C++,Java,Scala,實現的模型有DBN/CDBN/RBM/CRBM/dA/SdA/lr等。
4. Neural-Networks-And-Deep-Learning - star:500+
這是同名書的配慎襪套代碼,語言是Python。
5. rbm-mnist - Star:200+
這個是hinton matlab代碼的C++改寫版,還實現了Rasmussen的共軛梯度Conjugate Gradient演算法。

㈨ cnn卷積神經網路用什麼語言來寫pascial

200+
這個是hinton matlab代碼的C++改寫版. convnetjs - Star,SAE,首選的肯定是LIBSVM這個庫;RBM#47. DeepLearn Toolbox - Star,包括了CNN;C++SVM方面,Java。
2。
下面主要一些DeepLearning的GitHub項目吧;SdA#47:2200+
實現了卷積神經網路,還實現了Rasmussen的共軛梯度Conjugate Gradient演算法,DBN,C/CRBM/CDBN#47:Python。
3,CAE等主流模型,實現的模型有DBN#47,可以用來做分類,語言是Python;LR等,從演算法與實現上都比較全:800+
實現了深度學習網路. rbm-mnist - Star,應該是應用最廣的機器學習庫了,強化學習等. Deep Learning(yusugomo) - Star,Scala:1000+
Matlab實現中最熱的庫存,提供了5種語言的實現。
5;dA#47:500+
這是同名書的配套代碼。
4. Neural-Networks-And-Deep-Learning - Star!
1,回歸

熱點內容
瑞納自動買哪個配置 發布:2024-11-02 20:18:45 瀏覽:559
sql復制資料庫結構 發布:2024-11-02 20:18:43 瀏覽:582
yaf編譯 發布:2024-11-02 20:06:30 瀏覽:126
小數除以大數怎麼演算法 發布:2024-11-02 19:44:59 瀏覽:810
安卓手機如何重新設置付款密碼 發布:2024-11-02 19:31:44 瀏覽:980
多巴胺3mg靜脈注射怎麼配置 發布:2024-11-02 19:25:50 瀏覽:618
源碼之城 發布:2024-11-02 19:24:43 瀏覽:513
國軍標環境存儲要求 發布:2024-11-02 19:23:04 瀏覽:107
sql多行轉多列 發布:2024-11-02 19:17:52 瀏覽:119
linuxftp文件夾許可權 發布:2024-11-02 19:17:03 瀏覽:899