PRML(1)--绪论(上)多项式曲线拟合、概率论

PRML绪论

  • 1.1 多项式曲线拟合
    • 1.1.1 问题描述
    • 1.1.2 最小化平方和误差
    • 1.1.3 多项式阶数确定
    • 1.1.4 有趣问题--高阶模型为什么效果不好
    • 1.1.4 数据集规模对模型的影响
    • 1.1.5 参数正则化缓解过拟合问题
  • 1.2 概率论
    • 1.2.1离散型随机变量
    • 1.2.2 连续型随机变量
    • 1.2.3 期望和方差
    • 1.2.4 贝叶斯概率
    • 1.2.5 单高斯分布参数的最大似然估计
    • 1.2.6 重新考虑曲线拟合问题--MLE,MAP
    • 1.2.7 贝叶斯曲线拟合

模式识别领域 希望 利用个计算机算法自动发现数据中的规律,然后依据这些规律采取一些行动。模式识别的关键是获得反映数据规律的模型。

泛化能力(generalization)–不同于机理建模需要大量的专业知识,机器学习建模过程中使用(大规模)训练集(training set)来调节模型参数,测试集(test set)测试模型性能,反映模型的泛化能力(书中说的是–正确分类于训练集不同的新样本的能力)。

特征抽取(feature extract)–在实际应用中, 原始数据的量化向量(图像-像素值向量, 音频-波形向量)通常需要预处理(pre-processed),变换到新的变量空间中。

  1. 预处理可以过滤一些无关的特干扰(大小,角度,光亮…侧面模型能力还远远不足,人对这些干扰的鲁棒性强的多);
  2. 预处理抽取有用特征,降低输入数据纬度,加快计算速度
  3. 预处理会滤掉有效信息,使系统整体精度下降
    测试集数据必须采取和训练集一致的方法进行预处理

模式识别主要研究内容:

  1. 有监督学习–分类问题,回归问题
  2. 无监督学习–聚类、密度估计、 降维
  3. 强化学习–在给定条件下,找到合适的动作,使得累计奖励最大

本章主要包括:一个demo, 三个重要工具–概率论、决策论、信息论

1.1 多项式曲线拟合

1.1.1 问题描述

问题描述:观测到一个输入变量x(实数),希望能够预测目标变量t(实数)的值。

给定 x 和 t 的N次观测作为训练集,自变量集合记作x≡(x1,x2,...,xN)T\bm{x}\equiv(x_1,x_2,...,x_N)^Tx(x1,x2,...,xN)T,对应的目标标量集合记作t≡(t1,t2...,tN)T\bm{t}\equiv(t_1,t_2...,t_N)^Tt(t1,t2...,tN)T

目标变量 t 的特点:拥有一个内在规律t = f(x),这个规律是我们想要探索的。但是目标变量的观测值被随机噪声干扰。

图1.2

目标:利用训练集,建模自变量和因变量之间的内在规律,实现预测新的输入变量x^\hat{x}x^对应的目标变量t^\hat{t}t^的值。

对于实现这个目标,概率论 提供了以精确的形式描述(目标变量)不确定性 的解题框架; 决策论提供合适的标准用于最优决策(采取下一步的应对措施)。

1.1.2 最小化平方和误差

下面先介绍一种(通用?习惯性)做法 – 采用M阶多项式函数拟合数据:
y(x,w)=w0+w1x+w2x2+...+wMxM=∑j=0Mwjxj(1.1)y(x,\bm{w}) = w_0 + w_1x +w_2x^2+...+w_Mx^M=\sum_{j=0}^Mw_jx^j\tag{1.1}y(x,w)=w0+w1x+w2x2+...+wMxM=j=0Mwjxj(1.1)

其中:多项式系数{w0,w1,...,wM}\{w_0,w_1,...,w_M\}{w0,w1,...,wM}记作w\bm{w}wkey point: 虽然y(x,w)y(x,\bm{w})y(x,w)xxx的非线性函数,却是系数的w\bm{w}w的线性函数。这一类关于未知参数满足线性关系的函数,被叫做 线性模型,有重要的性质,将在第三章第四章展开讨论。

我们需要调整y(x,w)y(x,\bm{w})y(x,w)的参数,找到使y(x,w)y(x,\bm{w})y(x,w)与对应的t\bm{t}t之间的差距最小的参数组合。常用的做法为构造一个衡量差距度量函数,该差距度量函数为w的函数;通过梯度下降法最小化该差距度量函数,得到最优的参数组合。差距度量函数常被称作 误差函数(error function), 在拟合问题中可以使用平方误差函数(1/2是为了计算方便加入的):
E(w)=12∑n=1N{y(xn,w)−tn}2(1.2)E(\bm{w})=\frac{1}{2}\sum_{n=1}^N\{y(x_n,\bm{w})-t_n\}^2\tag{1.2}E(w)=21n=1N{y(xn,w)tn}2(1.2)

其实还有许多函数也能作为误差函数用于衡量模型输出与目标值之间的差距,这类函数有两个特点:
(1)非负
(2)当且仅当模型输出与目标值相同时,误差函数取得最小值为0.

求解w\bm{w}w: E(w)E(\bm{w})E(w)w\bm{w}w的二次函数,所以存在唯一的最小值解。可以通过对w\bm{w}w的各个分量求导,另梯度为0,解方程组得到最优的解w∗\bm{w^*}w,最终多项式函数由y(x,w∗)y(x,\bm{w^*})y(x,w)给出。

1.1.3 多项式阶数确定

问题解决了么?没有!不同的M必定得到不同的多项式函数,这多项式的阶数M该怎么确定呢?图1.4展示了四种不同阶数的拟合曲线(红色):当M较小时(M=1,2)模型无法准确 表示 观测数据规律,欠拟合现象发生; 当M较大时(M=9),模型曲线可以完美适配所有训练数据点,但是震荡现象太明显,将无法准确预测新数据的值,过拟合现象发生。图1.4

如何选择合适的M涉及到模型选择(model selection)/模型对比(model comaprison)的问题。通过不同M对应的模型在测试集上的性能指标 完成模型选择。性能指标推荐使用根均方误差,其中去除了样本规模(N)、量纲的影响。
ERMS=2E(w∗)/N(1.3)E_{RMS} = \sqrt{2E(\bm{w^*})/N}\tag{1.3}ERMS=2E(w)/N(1.3)

图1.5 为不同的M对应的训练集和测试集合根均方误差折线图,选择测试集合误差小且M小的M,即最优的M=3。

1.1.4 有趣问题–高阶模型为什么效果不好

考虑一个有趣问题: 直觉高阶数的多项式 包含了 低阶数的多项式(多出来的系数置为0即可) ,那么M = 9的多项式 至少能产生和 M = 3 的多项式一样好的结果才对,可是结果却与直觉相反,问题出在哪里?
观察到的现象是:M越大时,最优解对应的系数也会较大。(书中描述,不甚理解):更大的M使得模型被过渡调参,使得多项式被调节成与噪声相符的模型。

1.1.4 数据集规模对模型的影响

给定M,训练数据集规模越大,过拟合现象越不明显。也就是说,数据集规模越大,能够用来拟合的模型就越复杂。一个粗略的启示:数据数量不应该 < 模型可以调节参数的若干倍(5/10倍)。但是实际上很多参数都是不必要的。

问题在哪?以上启示使得我们需要依据数据集来确定模型的复杂度,但是更加合理的方式应该是:依据待解决问题的复杂性来确定模型复杂度。

在1.2.3中将看到 最小化平方误差拟合 实际是最大似然(Max likelihood)的一种特例,而过拟合问题 是 最大似然的通用属性。而使用**贝叶斯(Bayesan)**可以避免过拟合问题,(模型参数超过训练数据的情形并不难解)==(书中描述,不甚理解)==在贝叶斯模型中,参数的有效数量 会自动依据 数据集规模调节。

1.1.5 参数正则化缓解过拟合问题

正则化(regularization)–给目标函数增加参数w惩罚项,限制参数w的大小。惩罚项可以使用参数的一范数(减少参数数量),二范数(限制参数大小)。二范数和平方和是等价的(书中此处用平方和),加了正则想的误差函数为:
E~(w)=12∑n=1N{y(xn,w)−tn}2+λ2∣∣w∣∣2(1.4)\tilde{E}(\bm{w})=\frac{1}{2}\sum_{n=1}^N\{y(x_n,\bm{w})-t_n\}^2+\frac{\lambda}{2}||\bm{w}||^2\tag{1.4}E~(w)=21n=1N{y(xn,w)tn}2+2λw2(1.4)

其中:∣∣w∣∣2=wTw||\bm{w}||^2=\bm{w}^T\bm{w}w2=wTwλ\lambdaλ为这则化系数,又是需要通过验证集来确定其大小 (1.4)式也可用解析的形式求解最小值。相关技术在神经网络中叫权值衰减(weight decay),==(书中描述,不甚理解)==在统计学中叫收缩(shrinkage),二次正则项的一个特殊情况叫山脊回归(ride regresion).

1.2 概率论

不确定性 是模式识别领域的一个关键概念, 概率论提供了一个合理的框架,用来描述、量化、计算不确定性;结合决策论,使我们能够依据所提供的信息作出最优决策。

1.2.1离散型随机变量

demo1:盒子抽球
假设我们有红蓝两个盒子,红盒子中有2个苹果和6个橘子,蓝盒子中有3个苹果和1个橘子。每次随机选择一个盒子,然后再从该盒子中随机抽一个水果论;观察是什么水果后放回盒中。

在概率论中: 每次选的盒子的颜色是一个随机变量,记作B,这个随机变量的实际取之为红®或者蓝(b); 盒子中水果的种类也是一个随机变量,记作F,这个随机变量的取之为苹果(a)或者橘子(o).

由这个概率demo引发的问题:选择苹果的整体概率是多少?如果取出的是橘子,那么这个橘子来自蓝色盒子的概率是多少?

要解决这些问题,需要找我概率论的两个基本规则:加和规则(sum rule)、乘积规则(product relu),以下使用更为一般的符号系统。

假定有两个随机变量X、Y;其中X的可能取值为{xi∣i=1,2,...,M}\{x_i|i=1,2,...,M\}{xii=1,2,...,M};Y的可能取值为{x=yj∣j=1,2,...,L}\{x=y_j|j=1,2,...,L\}{x=yjj=1,2,...,L}。从X与Y的集合中随机的选取一个取值构成一次随机实验,重复N次随机实验。将X=xiandY=yjX=x_i\ and\ Y=y_jX=xi and Y=yj出现的次数记为ni,jn_{i,j}ni,j;将X=xiX=x_iX=xi出现的次数记为cic_ici;将Y=yjY=y_jY=yj出现的次数记为rjr_jrj。(依据概率论基础, 不严谨叙述,概率频率,不难得出)

联合概率(joint probability - - X=xiandY=yjX=x_i\ and\ Y=y_jX=xi and Y=yj两者同时出现的概率(joint probability)p(X=xi,Y=yj)p(X=x_i,Y=y_j)p(X=xi,Y=yj)为:
p(X=xi,Y=yj)=nijN(1.5)p(X=x_i,Y=y_j)=\frac{n_{ij}}{N}\tag{1.5}p(X=xi,Y=yj)=Nnij(1.5)

加和规则,得到各个随机变量的边缘概率(marginal probability):
p(X=xi)=ciN=∑j=1Lp(X=xi,Y=yj)(1.7)p(X=x_i)=\frac{c_i}{N}=\sum_{j=1}^Lp(X=x_i,Y=y_j)\tag{1.7}p(X=xi)=Nci=j=1Lp(X=xi,Y=yj)(1.7)

条件概率 - - 给定X=xiX=x_iX=xi条件下,Y=yjY=y_jY=yj的概率:
p(Y=yi∣X=xi)=nijci(1.8)p(Y=y_i|X=x_i)=\frac{n_{ij}}{c_i}\tag{1.8}p(Y=yiX=xi)=cinij(1.8)

乘积规则:由边缘概率 和 条件概率 得到联合概率:
p(X=xi,Y=yj)=p(Y=yi∣X=xi)p(X=xj)p(X=x_i,Y=y_j) = p(Y=y_i|X=x_i)p(X=x_j)p(X=xi,Y=yj)=p(Y=yiX=xi)p(X=xj)

符号规定:p(B)p(B)p(B)表示随机变量B的分布,p(r)p(r)p(r)随机变量B取特定的值rrr时的估计。重写 加和规则和乘积规则(PRML一书所有概率推导的基础):
p(X)=∑Yp(X,Y)(1.10)p(X)=\sum_Yp(X,Y)\tag{1.10}p(X)=Yp(X,Y)(1.10)

p(X,Y)=p(Y∣X)p(X)(1.11)p(X,Y)=p(Y|X)p(X)\tag{1.11}p(X,Y)=p(YX)p(X)(1.11)

贝叶斯定理(Bayes’ theorem)–在模式识别 和 机器学习中扮演着中心角色(实现条件转换
p(Y∣X)=p(X∣Y)p(Y)p(X)(1.12)p(Y|X)=\frac{p(X|Y)p(Y)}{p(X)}\tag{1.12}p(YX)=p(X)p(XY)p(Y)(1.12)

分母可以写为加和规则的展开,那么就完全转换为条件Y了。

先验概率:在没有观测到取出的水果是啥时,红盒子和蓝盒子被选中的先验概率(prior probability)分别是(410,610)(\frac{4}{10},\frac{6}{10})(104,106)
后验概率:假定已经观察到了取出的水果是橘子,那么红盒子和蓝盒子被选中的后验概率(posterior probability)分别是(23,13)(\frac{2}{3},\frac{1}{3})(32,31)

两个随机变量相互独立:联合分布可以分解成边缘分布的乘积,只能定性的理解一个变量对另一个变量的取值并没有影响(没有关系随机变量的分布就不能画在同一个直角坐标系下,但是联合概率密度是可以画在X和Y为轴的坐标系中)。
p(X,Y)=p(X)p(Y)p(X,Y)=p(X)p(Y)p(X,Y)=p(X)p(Y)

1.2.2 连续型随机变量

概率密度(probability density): 如果一维实值随机变量x在区间(x,x+δx)(x, x+\delta x)(x,x+δx)的概率用p(x)δxp(x)\delta xp(x)δx表示,那么p(x)p(x)p(x)就叫做x的概率密度。

x在区间(a, b)上的概率:
p(x∈(a,b))=∫abp(x)dx(1.24)p(x\in(a,b))=\int_a^bp(x)dx\tag{1.24}p(x(a,b))=abp(x)dx(1.24)

概率密度的两大性质:
p(x)>0(1.25)p(x)>0\tag{1.25}p(x)>0(1.25)

∫−∞∞p(x)dx=1(1.26)\int_{-\infty}^{\infty}p(x)dx=1\tag{1.26}p(x)dx=1(1.26)

随机变量函数变换(与通常的表示习惯相反):x=g(y)x=g(y)x=g(y),如果有函数f(x),那么f^(y)=f(g(y))\hat{f}(y)=f(g(y))f^(y)=f(g(y))。 如果x 的概率密度用pxxp_x{x}pxx表示,那么y的概率密度py(y)p_y(y)py(y)可以表示为:[存在一个同伦关系px(x)δx≃py(y)δyp_x(x)\delta x\simeq p_y(y)\delta ypx(x)δxpy(y)δy,式子的左边可以连续变换到右边]
py(y)=px(x)∣dxdy∣=px(g(y))∣g′(y)∣p_y(y)=p_x(x)|\frac{dx}{dy}|=p_x(g(y))|g'(y)|py(y)=px(x)dydx=px(g(y))g(y)

累计分布函数(cumulative distribution function)–又叫概率分布函数[有点像变上限积分函数]。
P(z)=∫−∞zp(x)dx(1.28)P(z)=\int_{-\infty}^zp(x)dx \tag{1.28}P(z)=zp(x)dx(1.28)

累计分布函数的导数就是概率密度:P′(x)=p(x)P'(x)=p(x)P(x)=p(x)

向量x=[x1,x2,...,xD]\bm{x}=[x_1,x_2,...,x_D]x=[x1,x2,...,xD]的规律类比于一维度p(x)=p(x1,x2,...,xD)p(\bm{x})=p(x_1,x_2,...,x_D)p(x)=p(x1,x2,...,xD)

概率质量函数(probability mass function):离散随机变量的p(x),可以看作集中在合法的x值处的“概率质量”的集合。

连续型随机变量的概率加和规则和乘积规则:
p(x)=∫p(x,y)dy(1.31)p(x)=\int p(x,y)dy \tag{1.31}p(x)=p(x,y)dy(1.31)

p(x,y)=p(y∣x)p(x)(1.32)p(x,y)=p(y|x)p(x) \tag{1.32}p(x,y)=p(yx)p(x)(1.32)

1.2.3 期望和方差

期望(expectation) : 函数f(x)f(x)f(x)对于随机变量x的均值。离散型随机变量和连续型随机变量的期望分别定义为:
E[f]=∑xp(x)f(x)(1.33)\mathbb{E}[f]=\sum_{x}p(x)f(x)\tag{1.33}E[f]=xp(x)f(x)(1.33)

E[f]=∫p(x)f(x)dx(1.34)\mathbb{E}[f] = \int p(x)f(x)dx\tag{1.34}E[f]=p(x)f(x)dx(1.34)

在实际应用中,用样本均值来近似样本的期望:
E[f]≈1N∑n=1Nf(xn)(1.35)\mathbb{E}[f]\approx \frac{1}{N}\sum_{n=1}^Nf(x_n)\tag{1.35}E[f]N1n=1Nf(xn)(1.35)

方差(variance):随机变量在均值附近的离散程度,定义为:
var[f]=E[(f(x)−E[f(x)])2]var[f]=\mathbb{E}[(f(x)-\mathbb{E}[f(x)])^2]var[f]=E[(f(x)E[f(x)])2]

将中间的平方项展开可以转化为:
var[f]=E[f(x)2]−E[f(x)]2(1.39)var[f]=\mathbb{E}[f(x)^2]-\mathbb{E}[f(x)]^2\tag{1.39}var[f]=E[f(x)2]E[f(x)]2(1.39)

协方差(covariance):描述两个随机变量x,y之间有多大程度会共同变化,定义为:
KaTeX parse error: Expected 'EOF', got '}' at position 124: …E}[y]\tag{1.42}}̲

1.2.4 贝叶斯概率

频率学家:利于用随机重复事件发生的频率来考察概率,数据集合可重复,参数是确定的。常用最大似然来计算w。
贝叶斯观点: 定量描述不确定性,依据少量新的证据修正不确定性,数据集合只有一个,参数具有不确定性

回顾水果盒子:利用贝叶斯定理,通过观察到的水果类型,将选择盒子的先验概率转化为后验概率。

在对模型参数w进行推断时,在观测到数据之前,我们有关于w的一些假设,以先验概率p(w)p(w)p(w)的形式给出。观测数据集D={t1,t2,...,tN}\mathcal{D}=\{t_1, t_2,...,t_N\}D={t1,t2,...,tN}的效果可以通过条件概率p(D∣w)p(\mathcal{D}|w)p(Dw)表示,此时观测数据集合利用贝叶斯定理修正模型参数:
p(w∣D)=P(D∣w)∗p(w)p(D)(1.43)p(w|\mathcal{D})=\frac{P(\mathcal{D}|w)*p(w)}{p(\mathcal{D})}\tag{1.43}p(wD)=p(D)P(Dw)p(w)(1.43)

其中p(D∣w)p(\mathcal{D|w})p(Dw)www已知的情况下依据具体观测数据集计算,被称作似然函数。表示在不同www条件下,观测数据出现的可能性。移项,两端对w积分可以得到p(D)p(\mathcal{D})p(D)

贝叶斯定理的自然语言描述方式:
posterior∝likelihood×priorposterior \propto likelihood \times prior posteriorlikelihood×prior

扔硬币3次朝上的例子:
概率学家:未来所有的投掷都会是正面朝上–极端结论
贝叶斯观点:依据新的观察来纠正现有的结论–严重依赖先验假设。

贝叶斯框架源于18世纪,但是近来才被重视。主要困难:执行完整的贝叶斯步骤,需要在整个参数空间求和或者求期望。

1.2.5 单高斯分布参数的最大似然估计

高斯分布/正态分布:一元实值随机变量x服从高斯分布,其概率密度可以写为:
N(x∣μ,σ2)=1(2πσ2)12exp⁡{−12σ2(x−μ)2}\mathcal{N}(x|\mu,\sigma^2)=\frac{1}{(2\pi\sigma^2)^{\frac{1}{2}}}\exp\{-\frac{1}{2\sigma^2}(x-\mu)^2\}N(xμ,σ2)=(2πσ2)211exp{2σ21(xμ)2}

随机变量x的N次独立观测构成数据集合(x1,x2,...,xN)(x_1,x_2,...,x_N)(x1,x2,...,xN)。各个数据独立同分布,相互独立的两个事件的联合概率可以由边缘概率的乘积得到,那么抽取到该数据集的概率为(似然函数):
p(x1,x2,...,xN∣μ,σ)=∏n=1NN(xn∣μ,σ2)p(x_1,x_2,...,x_N|\mu,\sigma)=\prod_{n=1}^N\mathcal{N}(x_n|\mu,\sigma^2)p(x1,x2,...,xNμ,σ)=n=1NN(xnμ,σ2)

有两种说法

  1. 给定数据集下最大化概率的参数–(最大化参数才不自然吧)
  2. 给定参数的情况下,最大化数据集出现的概率–(最大化概率才自然吧)

最大化对数似然函数(对应参数求导,令其等于零)来求解μ,σ\mu,\sigmaμ,σ–对数似然可以简化计算和避免小概率乘积下溢。

均值与方差的最大似然解为:
μML=1N∑n=1Nxn\mu_{ML}=\frac{1}{N}\sum_{n=1}^Nx_nμML=N1n=1Nxn

σML=1N∑n=1N(xn−μML)2\sigma_{ML}=\frac{1}{N}\sum_{n=1}^N(x_n-\mu_{ML})^2σML=N1n=1N(xnμML)2

对以上最大似然解求期望,可得到μML\mu_{ML}μML为无偏估计,σML2\sigma^2_{ML}σML2为有偏差估计。修正σML2\sigma^2_{ML}σML2为无偏估计量,有:
σ^2=1N−1∑n=1N(xn−μML)2\hat{\sigma}^2=\frac{1}{N-1}\sum_{n=1}^N(x_n-\mu _{ML})^2σ^2=N11n=1N(xnμML)2

最大似然估计的问题:低估分布的方差,这实质是过拟合问题的核心。

1.2.6 重新考虑曲线拟合问题–MLE,MAP

回顾曲线拟合问题:已知数据集x\bm{x}xt\bm{t}t,目标是预测给定新测试点x对应点目标值t.

可以使用概率分布来表达关于目标变量值的不确定性:假定对应的t值服从均值为y(x,w)y(x,\bm{w})y(x,w)的高斯分布。
p(t∣x,w,β)=N(t∣y(x,w),β−1)p(t|x,\bm{w},\beta)=\mathcal{N}(t|y(x,\bm{w}),\beta^{-1})p(tx,w,β)=N(ty(x,w),β1)

通过最大似然函数求解模型参数w\bm{w}w:可以得到最大似然函数 等价于 最小化平方误差函数。

引入w\bm{w}w先验假设–假定也服从高斯分布:
p(w∣a)=N(w∣0,α−1I)p(\bm{w}|a)=\mathcal{N}(\bm{w}|0,\alpha^{-1}\bm{I})p(wa)=N(w0,α1I)

计算参数的后验概率:
p(w∣x,t,α,β)∝p(t∣x,w,β)∗p(w∣a)p(\bm{w}|\bm{x},\bm{t},\alpha,\beta)\propto p( \bm{t}|\bm{x},\bm{w},\beta)*p(\bm{w}|a)p(wx,t,α,β)p(tx,w,β)p(wa)

通过最大后验求解模型参数w\bm{w}w:可以得到最大后验 等价于 最小化带正则项的平方误差函数。
(最大后验可以减少过你和问题)

1.2.7 贝叶斯曲线拟合

贝叶斯的观点,预测分布可以写为如下积分形式:
p(w∣x,t,x)=∫p(t∣w,x)∗p(w∣x,t)dw(1.68)p(\bm{w}|\bm{x},\bm{t},x)=\int p(t|\bm{w},x)*p(\bm{w}|\bm{x},\bm{t})d\bm{w}\tag{1.68}p(wx,t,x)=p(tw,x)p(wx,t)dw(1.68)

p(t∣w,x)p(t|\bm{w},x)p(tw,x)–式子1.60的形式(实际值不知道,鸡生蛋蛋生鸡)
p(w∣x,t)p(\bm{w}|\bm{x},\bm{t})p(wx,t)–参数的后验概率、

具体怎么求会在3.3节中详细讲解,求出来p(w∣x,t,x)p(\bm{w}|\bm{x},\bm{t},x)p(wx,t,x)也是个高斯分布。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444779.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数加减乘

如标题&#xff0c;不解释。 加 #include<stdio.h> #include<string.h> int main() {char a[1000],b[1000];int i,s[1000],len1,len2,len,j;while(scanf("%s%s",a,b)!EOF) //用字符数组来储存数{for(i0;i<1000;i)s[i]0;len1strlen(a);len2strlen(b…

在GCC和Visual Studio中使用hash_map

熟悉STL或熟悉ACM/ICPC的话&#xff0c;其中的set, map, multiset, multimap一定用过无数次了&#xff0c;它们都是用平衡二叉树&#xff08;红黑树&#xff09;实现的&#xff0c;复杂度为O(lgn)。我们也知道set, map可以通过哈希来实现&#xff0c;复杂度只有O(1)&#xff0c…

C++(21)--Astah uml 画C++类图

Astah uml 画C类图1.安装2.使用《老九学堂C课程》《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#xff0c;重复的事情用心做&#xff0c;用心的事情坚持做(老九君)--------------- ASTAH&#xff1a;类图工具&#xff0c;用于理…

redis3.0.0 集群安装详细步骤

Redis集群部署文档(centos6系统) &#xff08;要让集群正常工作至少需要3个主节点&#xff0c;在这里我们要创建6个redis节点&#xff0c;其中三个为主节点&#xff0c;三个为从节点&#xff0c;对应的redis节点的ip和端口对应关系如下&#xff09; 127.0.0.1:7000 127.0.0.1:7…

Redis集群添加节点

Redis集群添加节点 1&#xff1a;首先把需要添加的节点启动 cd /usr/local/cluster/ mkdir 7006 cp /usr/local/cluster/redis.conf /usr/local/cluster/7006/ cd /usr/local/cluster/7006/ vi redis.conf ##修改redis.conf中的port参数的值为7006 redis-server redis.c…

PRML(2)--绪论(下)模型选择、纬度灾难、决策论、信息论

PRML绪论1.3 模型选择1.4 纬度灾难1.5 决策论1.5.1最小错误分率1.5.2最小化期望损失1.5.3拒绝选项1.5.4推断和决策1.5.5 回归问题的损失函数1.6 信息论1.3 模型选择 模型过复杂会造成过拟合问题&#xff0c;需要通过一些技术来降低模型的复杂度。 就最大似然而言&#xff0c;可…

leetcode112 路径总和

给定一个二叉树和一个目标和&#xff0c;判断该树中是否存在根节点到叶子节点的路径&#xff0c;这条路径上所有节点值相加等于目标和。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树&#xff0c;以及目标和 sum 22&#xff0c; 5 / \ …

关于游戏架构设计的一些整理吧

一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。 这里说的模块可以指一个进程,或者一个线程方式存在,本质上就是一些类的封装。

linux时间轮 Timing-Wheel的实现

过一段时间上传更新自己的心得&#xff0c;以及linux的时间轮实现 现在git上传自己的C代码 gitgithub.com:pbymw8iwm/Timing-Wheel.git

leetcode128 最长连续序列

给定一个未排序的整数数组&#xff0c;找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为4 思路&#xff1a;map记录某个连续序列端点的最大长度。 对于数字i&#xff…

C++(22)--继承和派生

继承和派生1.基本概念2.实现公有继承3.私有继承的例子4. 继承和组合《老九学堂C课程》《C primer》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#xff0c;重复的事情用心做&#xff0c;用心的事情坚持做(老九君)----…

Python- 解决PIP下载安装速度慢

对于Python开发用户来讲&#xff0c;PIP安装软件包是家常便饭。但国外的源下载速度实在太慢&#xff0c;浪费时间。而且经常出现下载后安装出错问题。所以把PIP安装源替换成国内镜像&#xff0c;可以大幅提升下载速度&#xff0c;还可以提高安装成功率。 国内源&#xff1a; …

leetcode102 二叉树的层次遍历

给定一个二叉树&#xff0c;返回其按层次遍历的节点值。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果&#xff1a; [ [3], [9,20], [15…

Windows Git客户端搭建

最近开始做Windows 开发&#xff0c;所以找了一些windows下安装git的教程 本文环境&#xff1a; 操作系统&#xff1a;Windows XP SP3 Git客户端&#xff1a;TortoiseGit-1.8.16.0-32bit 一、安装Git客户端 全部安装均采用默认&#xff01; 1. 安装支撑软件 msysgit: http://ms…

C++(23)--多态性与虚函数

多态性与虚函数1.静态多态-重载2.动态多态-重写2.1 向上转换/向下转换3.虚函数的工作原理4.纯虚函数和抽象类5.补充项目(都市浮生记)-卒《老九学堂C课程》学习笔记。《老九学堂C课程》详情请到B站搜索《老九零基础学编程C入门》-------------简单的事情重复做&#xff0c;重复的…

如何在Appscale下发布自己的应用(一)

本篇文章主要讲如何在本地搭建appscale环境。由于国内的信息资源有限&#xff0c;很多重要的论坛被墙了&#xff0c;所以遇到不少麻烦&#xff0c;由于最近一段时间vpn也被封掉了&#xff0c;我只能通过特殊渠道方法来翻墙查阅资料&#xff0c;走了不少弯路。 1.先说系统和环境…

总结了线程安全性的二十四个精华问题

1、对象的状态&#xff1a;对象的状态是指存储在状态变量中的数据&#xff0c;对象的状态可能包括其他依赖对象的域。在对象的状态中包含了任何可能影响其外部可见行为的数据。 2、一个对象是否是线程安全的&#xff0c;取决于它是否被多个线程访问。这指的是在程序中访问对象的…

如何在Appscale下发布自己的应用(二)

本文开始讲如何发布自己的app应用到appscle上 建好appscle网站后&#xff0c;可以在命令行通过 appscle deploy apppathname 来发布自己应用。 除了用命令行提交应用之外&#xff0c;还可以通过appscale的网站直接提交&#xff0c;选择 upload application->选择上传文件-&g…

Python模块(7)-SciPy 简易使用教程

SciPy 简易使用教程1. 符号计算2. 函数向量化3. 波形处理scipy.signal3.1 滤波器3.2 波峰定位基于numpy的一个高级模块&#xff0c;为数学&#xff0c;物理&#xff0c;工程等方面的科学计算提供无可替代的支持。 做重要的思想是&#xff1a;符号计算和函数向量化 1. 符号计算…

Xcode的Architectures和Valid Architectures的区别

目录[-] Xcode的Architectures和Valid Architectures的区别 Architectures Valid Architectures 原因解释如下&#xff1a; 参考1&#xff1a; 所有IOS设备详情列表 List of iOS devices - Wikipedia, the free encyclopedia 参考2&#xff1a; iOS 7: 如何为iPhone 5S编译64位…