pythonmse
⑴ 人工智慧一些術語總結
隨著智能時代慢慢的到來,有一些基本概念都不知道真的是要落伍了,作為正在積極學習向上的青年,我想總結一份筆記,此份筆記會記錄眾多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(詞義消歧)
⑵ 求python支持向量機多元回歸預測代碼
這是一段用 Python 來實現 SVM 多元回歸預測的代碼示例:
# 導入相關核胡庫
from sklearn import datasets
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 載入數據集
X, y = datasets.load_boston(return_X_y=True)
# 將數據集拆分為訓練集和測試改塌攔集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 創建SVM多元回歸模型
reg = SVR(C=1.0, epsilon=0.2)
# 訓練模型
reg.fit(X_train, y_train)
# 預測結果
y_pred = reg.predict(X_test)
# 計算均方誤差
mse = mean_squared_error(y_test, y_pred)
print("Mean Squared Error:", mse)
在這段代碼中,首先導入了相關的庫,包括 SVR 函數衫仔、train_test_split 函數和 mean_squared_error 函數。然後,使用 load_boston 函數載入數據集,並將數據集分為訓練集和測試集。接著,使用 SVR 函數創建了一個 SVM 多元回歸模型,並使用 fit 函數對模型進行訓練。最後,使用 predict 函數進行預測,並使用 mean_squared_error 函數計算均方誤差。
需要注意的是,這僅僅是一個示例代碼,在實際應用中,可能需要根據項目的需求進行更改,例如使用不同的超參數
⑶ 一文搞懂梯度下降&反向傳播
如果把神經網路模型比作一個黑箱,把模型參數比作黑箱上面一個個小旋鈕,那麼根據通用近似理論(universal approximation theorem),只要黑箱上的旋鈕數量足夠多,而且每個旋鈕都被調節到合適的位置,那這個模型就可以實現近乎任意功能(可以逼近任意的數學模型)。
顯然,這些旋鈕(參數)不是由人工調節的,所謂的機器學習,就是通過程序來自動調節這些參數。神經網路不僅參數眾多(少則十幾萬,多則上億),而且網路是由線性層和非線性層交替疊加而成,上層參數的變化會對下層的輸出產生非線性的影響,因此,早期的神經網路流派一度無法往多層方向發展,因為他們找不到能用於任意多層網路的、簡潔的自動調節參數的方法。
直到上世紀80年代,祖師爺辛頓發明了反向傳播演算法,用輸出誤差的均方差(就是loss值)一層一層遞進地反饋到各層神經網路,用梯度下降法來調節每層網路的參數。至此,神經網路才得以開始它的深度之旅。
本文用python自己動手實現梯度下降和反向傳播演算法。 請點擊這里 到Github上查看源碼。
梯度下降法是一種將輸出誤差反饋到神經網路並自動調節參數的方法,它通過計算輸出誤差的loss值( J )對參數 W 的導數,並沿著導數的反方向來調節 W ,經過多次這樣的操作,就能將輸出誤差減小到最小值,即曲線的最低點。
雖然Tensorflow、Pytorch這些框架都實現了自動求導的功能,但為了徹底理解參數調節的過程,還是有必要自己動手實現梯度下降和反向傳播演算法。我相信你和我一樣,已經忘了之前學的微積分知識,因此,到可汗學院復習下 Calculus
和 Multivariable Calculus 是個不錯的方法,或是拜讀 這篇關於神經網路矩陣微積分的文章 。
Figure2是求導的基本公式,其中最重要的是 Chain Rule ,它通過引入中間變數,將「 y 對 x 求導」的過程轉換為「 y 對中間變數 u 求導,再乘以 u 對 x 求導」,這樣就將一個復雜的函數鏈求導簡化為多個簡單函數求導。
如果你不想涉及這些求導的細節,可以跳過具體的計算,領會其思想就好。
對於神經網路模型: Linear -> ReLu -> Linear -> MSE(Loss function) 來說,反向傳播就是根據鏈式法則對 求導,用輸出誤差的均方差(MSE)對模型的輸出求導,並將導數傳回上一層神經網路,用於它們來對 w 、 b 和 x (上上層的輸出)求導,再將 x 的導數傳回到它的上一層神經網路,由此將輸出誤差的均方差通過遞進的方式反饋到各神經網路層。
對於 求導的第一步是為這個函數鏈引入中間變數:
接著第二步是對各中間變數求導,最後才是將這些導數乘起來。
首先,反向傳播的起點是對loss function求導,即 。 :
mse_grad()之所以用unsqueeze(-1)給導數增加一個維度,是為了讓導數的shape和tensor shape保持一致。
linear層的反向傳播是對 求導,它也是一個函數鏈,也要先對中間變數求導再將所有導數相乘:
這些中間變數的導數分別是:
對向量 求導,指的是對向量所有的標量求偏導( ),即: ,這個橫向量也稱為y的梯度。
這里 ,是一個向量,因此, 求導,指的是y的所有標量(y_1, y_2, ..., y_n)對向量x求偏導,即:
。
這個矩陣稱為雅克比矩陣,它是個對角矩陣,因為 ,因此 。
同理, 。
因此,所有中間導數相乘的結果:
lin_grad() 中的inp.g、w.g和b.g分別是求 的導數,以inp.g為例,它等於 ,且需要乘以前面各層的導數,即 outp.g @ w.t() ,之所以要用點積運算符(@)而不是標量相乘,是為了讓它的導數shape和tensor shape保持一致。同理,w.g和b.g也是根據相同邏輯來計算的。
ReLu層的求導相對來說就簡單多了,當輸入 <= 0時,導數為0,當輸入 > 0時,導數為1。
求導運算終於結束了,接下來就是驗證我們的反向傳播是否正確。驗證方法是將forward_backward()計算的導數和Pytorch自動微分得到的導數相比較,如果它們相近,就認為我們的反向傳播演算法是正確的。
首先,將計算好的參數導數保存到w1g、b1g、w2g和b2g中,再用Pytorch的自動微分來求w11、b11、w22和b22的導數。
最後,用np.allclose()來比較導數間的差異,如果有任何一個導數不相近,assert就會報錯。結果證明,我們自己動手實現的演算法是正確的。
反向傳播是遵循鏈式法則的,它將前向傳播的輸出作為輸入,輸入作為輸出,通過遞進的方式將求導這個動作從後向前傳遞回各層。神經網路參數的求導需要進行矩陣微積分計算,根據這些導數的反方向來調節參數,就可以讓模型的輸出誤差的優化到最小值。
歡迎關注和點贊,你的鼓勵將是我創作的動力
⑷ arima模型python 怎麼看平穩性
時間序列分析(一) 如何判斷序列是否平穩
序列平穩不平穩,一般採用兩種方法:
第一種:看圖法
圖是指時序圖,例如(eviews畫滴):
分析:什麼樣的圖不平穩,先說下什麼是平穩,平穩就是圍繞著一個常數上下波動。
看看上面這個圖,很明顯的增長趨勢,不平穩。
第二種:自相關系數和偏相關系數
還以上面的序列為例:用eviews得到自相關和偏相關圖,Q統計量和伴隨概率。
分析:判斷平穩與否的話,用自相關圖和偏相關圖就可以了。
平穩的序列的自相關圖和偏相關圖不是拖尾就是截尾。截尾就是在某階之後,系數都為 0 ,怎麼理解呢,看上面偏相關的圖,當階數為 1 的時候,系數值還是很大, 0.914. 二階長的時候突然就變成了 0.050. 後面的值都很小,認為是趨於 0 ,這種狀況就是截尾。再就是拖尾,拖尾就是有一個衰減的趨勢,但是不都為 0 。
自相關圖既不是拖尾也不是截尾。以上的圖的自相關是一個三角對稱的形式,這種趨勢是單調趨勢的典型圖形。
下面是通過自相關的其他功能
如果自相關是拖尾,偏相關截尾,則用 AR 演算法
如果自相關截尾,偏相關拖尾,則用 MA 演算法
如果自相關和偏相關都是拖尾,則用 ARMA 演算法, ARIMA 是 ARMA 演算法的擴展版,用法類似 。
不平穩,怎麼辦?
答案是差分
還是上面那個序列,兩種方法都證明他是不靠譜的,不平穩的。確定不平穩後,依次進行1階、2階、3階...差分,直到平穩位置。先來個一階差分,上圖。
從圖上看,一階差分的效果不錯,看著是平穩的。
⑸ python gradientboostingregressor可以做預測嗎
可以
最近項目中涉及基於Gradient Boosting Regression 演算法擬合時間序列曲線的內容,利用python機器學習包scikit-learn 中的GradientBoostingRegressor完成
因此就學習了下Gradient Boosting演算法,在這里分享下我的理解
Boosting 演算法簡介
Boosting演算法,我理解的就是兩個思想:
1)「三個臭皮匠頂個諸葛亮」,一堆弱分類器的組合就可以成為一個強分類器;
2)「知錯能改,善莫大焉」,不斷地在錯誤中學習,迭代來降低犯錯概率
當然,要理解好Boosting的思想,首先還是從弱學習演算法和強學習演算法來引入:
1)強學習演算法:存在一個多項式時間的學習演算法以識別一組概念,且識別的正確率很高;
2)弱學習演算法:識別一組概念的正確率僅比隨機猜測略好;
Kearns & Valiant證明了弱學習演算法與強學習演算法的等價問題,如果兩者等價,只需找到一個比隨機猜測略好的學習演算法,就可以將其提升為強學習演算法。
那麼是怎麼實現「知錯就改」的呢?
Boosting演算法,通過一系列的迭代來優化分類結果,每迭代一次引入一個弱分類器,來克服現在已經存在的弱分類器組合的shortcomings
在Adaboost演算法中,這個shortcomings的表徵就是權值高的樣本點
而在Gradient Boosting演算法中,這個shortcomings的表徵就是梯度
無論是Adaboost還是Gradient Boosting,都是通過這個shortcomings來告訴學習器怎麼去提升模型,也就是「Boosting」這個名字的由來吧
Adaboost演算法
Adaboost是由Freund 和 Schapire在1997年提出的,在整個訓練集上維護一個分布權值向量W,用賦予權重的訓練集通過弱分類演算法產生分類假設(基學習器)y(x),然後計算錯誤率,用得到的錯誤率去更新分布權值向量w,對錯誤分類的樣本分配更大的權值,正確分類的樣本賦予更小的權值。每次更新後用相同的弱分類演算法產生新的分類假設,這些分類假設的序列構成多分類器。對這些多分類器用加權的方法進行聯合,最後得到決策結果。
其結構如下圖所示:
可以發現,如果要用Gradient Boosting 演算法的話,在sklearn包里調用還是非常方便的,幾行代碼即可完成,大部分的工作應該是在特徵提取上。
感覺目前做數據挖掘的工作,特徵設計是最重要的,據說現在kaggle競賽基本是GBDT的天下,優劣其實還是特徵上,感覺做項目也是,不斷的在研究數據中培養對數據的敏感度。
⑹ python多元線性回歸怎麼計算
1、什麼是多元線性回歸模型?
當y值的影響因素不唯一時,採用多元線性回歸模型。
y =y=β0+β1x1+β2x2+...+βnxn
例如商品的銷售額可能不電視廣告投入,收音機廣告投入,報紙廣告投入有關系,可以有 sales =β0+β1*TV+β2* radio+β3*newspaper.
2、使用pandas來讀取數據
pandas 是一個用於數據探索、數據分析和數據處理的python庫
[python]view plain
importpandasaspd
<prename="code"class="python">#
data=pd.read_csv('/home/lulei/Advertising.csv')
#displaythefirst5rows
data.head()
- 這里的Advertising.csv是來自Advertising.csv。大家可以自己下載。
- TV Radio Newspaper Sales
- 0 230.1 37.8 69.2 22.1
- 1 44.5 39.3 45.1 10.4
- 2 17.2 45.9 69.3 9.3
- 3 151.5 41.3 58.5 18.5
- 4 180.8 10.8 58.4 12.9
Series類似於一維數組,它有一組數據以及一組與之相關的數據標簽(即索引)組成。
DataFrame是一個表格型的數據結構,它含有一組有序的列,每列可以是不同的值類型。DataFrame既有行索引也有列索引,它可以被看做由Series組成的字典。
#displaythelast5rows
data.tail()
- 只顯示結果的末尾5行
- TV Radio Newspaper Sales
- 195 38.2 3.7 13.8 7.6
- 196 94.2 4.9 8.1 9.7
- 197 177.0 9.3 6.4 12.8
- 198 283.6 42.0 66.2 25.5
- 199 232.1 8.6 8.7 13.4
#checktheshapeoftheDataFrame(rows,colums)
data.shape
- 查看DataFrame的形狀,注意第一列的叫索引,和資料庫某個表中的第一列類似。
TV:對於一個給定市場中單一產品,用於電視上的廣告費用(以千為單位)
Radio:在廣播媒體上投資的廣告費用
Newspaper:用於報紙媒體的廣告費用
Sales:對應產品的銷量
importseabornassns
importmatplotlib.pyplotasplt
#ots
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8)
plt.show()#注意必須加上這一句,否則無法顯示。
這里選擇TV、Radio、Newspaper作為特徵,Sales作為觀測值
返回的結果:
- seaborn的pairplot函數繪制X的每一維度和對應Y的散點圖。通過設置size和aspect參數來調節顯示的大小和比例。可以從圖中看出,TV特徵和銷量是有比較強的線性關系的,而Radio和Sales線性關系弱一些,Newspaper和Sales線性關系更弱。通過加入一個參數kind='reg',seaborn可以添加一條最佳擬合直線和95%的置信帶。
sns.pairplot(data,x_vars=['TV','Radio','Newspaper'],y_vars='Sales',size=7,aspect=0.8,kind='reg')
plt.show()
- 結果顯示如下:
#
feature_cols=['TV','Radio','Newspaper']
#
X=data[feature_cols]
#
#X=data[['TV','Radio','Newspaper']]#只需修改這里即可<prename="code"class="python"style="font-size:15px;line-height:35px;">X=data[['TV','Radio']]#去掉newspaper其他的代碼不變
- # print the first 5 rowsprint X.head()# check the type and shape of Xprint type(X)print X.shape
- 2.81843904823
- [ 0.04588771 0.18721008]
- RMSE by hand: 1.28208957507
- 然後再次使用ROC曲線來觀測曲線的整體情況。我們在將Newspaper這個特徵移除之後,得到RMSE變小了,說明Newspaper特徵可能不適合作為預測銷量的特徵,於是,我們得到了新的模型。我們還可以通過不同的特徵組合得到新的模型,看看最終的誤差是如何的。
- 之前我提到了這種錯誤:
- ImportError Traceback (most recent call last)<ipython-input-182-3eee51fcba5a> in <mole>() 1 ###構造訓練集和測試集----> 2 from sklearn.cross_validation import train_test_split 3 #import sklearn.cross_validation 4 X_train,X_test, y_train, y_test = train_test_split(X, y, random_state=1) 5 # default split is 75% for training and 25% for testingImportError: cannot import name train_test_split
- 這里我給出我自己寫的函數:
importrandom
<spanstyle="font-family:microsoftyahei;">######自己寫一個隨機分配數的函數,分成兩份,並將數值一次存儲在對應的list中##########
deftrain_test_split(ylabel,random_state=1):
importrandom
index=random.sample(range(len(ylabel)),50*random_state)
list_train=[]
list_test=[]
i=0
forsinrange(len(ylabel)):
ifiinindex:
list_test.append(i)
else:
list_train.append(i)
i+=1
returnlist_train,list_test
###############對特徵進行分割#############################
feature_cols=['TV','Radio','Newspaper']
X1=data[feature_cols]
[html]view plain
上面代碼的運行結果:
上面顯示的結果類似一個電子表格,這個結構稱為Pandas的數據幀(data frame),類型全稱:pandas.core.frame.DataFrame.
pandas的兩個主要數據結構:Series和DataFrame:
[python]view plain
[html]view plain
(200,4)
3、分析數據
特徵:
響應:
在這個案例中,我們通過不同的廣告投入,預測產品銷量。因為響應變數是一個連續的值,所以這個問題是一個回歸問題。數據集一共有200個觀測值,每一組觀測對應一個市場的情況。
注意:這里推薦使用的是seaborn包。網上說這個包的數據可視化效果比較好看。其實seaborn也應該屬於matplotlib的內部包。只是需要再次的單獨安裝。
[python]view plain
[html]view plain
[html]view plain
[python]view plain
直到這里整個的一次多元線性回歸的預測就結束了。
6、改進特徵的選擇
在之前展示的數據中,我們看到Newspaper和銷量之間的線性關系竟是負關系(不用驚訝,這是隨機特徵抽樣的結果。換一批抽樣的數據就可能為正了),現在我們移除這個特徵,看看線性回歸預測的結果的RMSE如何?
依然使用我上面的代碼,但只需修改下面代碼中的一句即可:
[python]view plain
最後的到的系數與測度如下:
LinearRegression(_X=True, fit_intercept=True, normalize=False)
備註:
註:上面的結果是由train_test_spilit()得到的,但是我不知道為什麼我的版本的sklearn包中居然報錯:
處理方法:1、我後來重新安裝sklearn包。再一次調用時就沒有錯誤了。
2、自己寫函數來認為的隨機構造訓練集和測試集。(這個代碼我會在最後附上。)
[python]view plain
[python]view plain