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