豆瓣9.6分统计学神作ISL之第七章读书笔记(上),带你系统学习多项式回归、阶梯函数、基函数和回归样条

本文主要是介绍豆瓣9.6分统计学神作ISL之第七章读书笔记(上),带你系统学习多项式回归、阶梯函数、基函数和回归样条,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1.原文内容概要
  • 2.算法知识总结
    • 2.1 多项式回归(Polynomial Regression)
    • 2.2 阶梯函数(Step Functions)
    • 2.3 基函数(Basis Functions)
    • 2.4 回归样条(Regression Splines)
      • 2.4.1 分段多项式回归(Piecewise Polynomials)
      • 2.4.2 约束条件与样条函数(Constraints and Splines)
      • 2.4.3 样条函数的基函数形式(The Spline Basis Representation)
      • 2.4.4 选择结点的数量和放置位置(Choosing the Number and Locations)
      • 2.4.5 与多项式回归的比较(Comparison to Polynomial Regression)
  • 引用

1.原文内容概要

想象一下,你已经在一条“笔直”的公路上飞驰了六章的距离,一路上你驾驶的都是线性模型这辆赛车——从最小二乘回归的老爷车到偏最小二乘回归的运动版,再到lasso回归ridge回归,甚至是主成分回归这些涡轮增压版本。但,它们都有一个共同的限制:那就是只能在直线赛道上竞速,无法应对那些复杂的非线性地形

线性模型就像是一种可靠的老伙计,它们的可解释性就像是一本打开的书,让你一目了然地理解每个变量如何影响结果,而它们的推断能力则像是一位经验丰富的侦探,帮你揭示数据背后的规律。但是,如果你想要的是预测能力——那种能够预见未来的能力,线性模型就可能显得有些力不从心了

现在,就在这一章节,我们准备升级我们的赛车,让它不再局限于笔直的道路。我们将放宽线性关系的限制,让赛车可以在曲折蜿蜒的山路上飙车,同时尽可能地保持它的稳定性,就像给你的赛车装上一套先进的导航系统,即便在最复杂的赛道上,你也能清楚地知道下一个弯道在哪里。

所以,坐稳了,准备好迎接非线性模型的狂野之旅吧,享受前所未有的速度与激情!

由于内容较多,第七章的笔记将分成【上】、【下】两个章节输出。本次先介绍【上】章的内容,主要包括多项式回归、阶梯函数、基函数和回归样条。

2.算法知识总结

2.1 多项式回归(Polynomial Regression)

首先,我们来探讨单变量回归的情形。一个一元线性回归模型可以表示为:
image.png
为了引入非线性特性,我们可以将自变量的 n n n阶多项式包含进模型中,形成多项式回归模型
image.png
在这里 d d d代表多项式的最高阶数。随着阶数 d d d的增加,模型更能捕捉到数据中的非线性关系,生成的曲线会变得越来越“蜿蜒曲折”

多项式回归实际上可以视为多元线性回归的一种特殊形式,其中自变量不仅仅是原始的 x i x_i xi,还包括它的平方 x i 2 x_i^2 xi2、立方 x i 3 x_i^3 xi3,直至 d d d阶的 x i d x_i^d xid。因此,这样的模型仍然可以通过最小二乘法来拟合。在实际应用中,多项式的最高阶数 d d d通常不会超过 3 或 4,因为过高的阶数可能导致模型过于复杂,难以解释,并且可能引起过拟合问题(Generally speaking, it is unusual to use d greater than 3 or 4)。

在多项式回归分析中,我们采用了工资数据集(Wage data),并将年龄(Age)作为自变量 X X X,工资(Wage)作为因变量 Y Y Y。在此示例中,作者选择了4阶多项式,即设置上述的模型参数 d d d等于4。回归结果如下图所示,图中的蓝色实线展示了通过4阶多项式回归得到的拟合曲线,而上下两条虚线则分别表示拟合曲线加减两倍标准差的范围,这可以视为模型预测的置信区间
image.png

那这两倍标准误差曲线怎么算出来的呢?
我们先从某个点的标准误差讲起。比如当我们要计算点 X = x 0 X=x_0 X=x0处的方差 V a r [ f ^ ( x 0 ) ] Var[\hat{f}(x_0)] Var[f^(x0)]时,其中 f ^ ( x 0 ) \hat{f}(x_0) f^(x0)表示为:
image.png
步骤如下所示:
1)首先,从最小二乘法拟合的模型中获取每个系数 β 0 , β 1 , β 2 , . . . , β p β_0, β_1, β_2, ... , β_p β0,β1,β2,...,βp的标准误差
2)其次,确定这些系数之间的协方差矩阵,因为预测值的不确定性不仅由单个系数的不确定性决定,还受到它们之间相互关系的影响;
3)然后,将这些标准误差和协方差矩阵代入一个公式(比较复杂,放在这儿有点辣眼睛,就交给统计软件吧)来推导预测值的方差;
4)最后,将得到的方差开根号,即可得到在 x 0 x_0 x0处的预测值的标准误差。

我们使用上述方法计算每个数据点的标准误差,然后在每个预测值 f ^ ( x i ) \hat{f}(x_i) f^(xi)上减去其对应的二倍标准误差,再将点连成线,即得到二倍标准误差曲线选择二倍的原因是,在随机误差项符合正态分布的假设下,加减二倍标准误差所构建的区间可以近似地表示95%的置信水平,即绝大部分观测值将落在此区间内。

从散点图中可以观察到,数据集呈现一项特征:工资(Wage)明显地分成两个区间,以250为分界。因此,我们可以将因变量 Y Y Y依据工资是否大于250划分为“高收入”和“低收入”两类,这样处理后因变量 Y Y Y转变为一个二元离散变量。在此种情形下,适用的模型不再是简单的线性回归,而是逻辑回归,模型表达式如下:
image.png
如图所示,蓝色实线展示了预测个体属于高收入类别的概率,而虚线则表示概率的两倍标准误差范围,灰色点代表各个样本数据点。另外从图中可见,在右侧的置信区间范围较宽。这主要是因为在所提供的样本数据中,标记为高收入的正样本数量非常有限。据作者描述,在3000个样本中,仅有79位被归类为高收入者。这一悬殊的比例导致了统计估计的不确定性增加,因而置信区间相对较大。
image.png

2.2 阶梯函数(Step Functions)

多项式函数通过在特征的线性模型中引入高次项,为数据添加全局非线性结构(Using polynomial functions of the features as predictors in a linear model imposes a global structure on the non-linear function of X)。这意味着多项式关系对所有 X X X值域内的点都适用。相比之下,分段函数方法将 X X X的值域分割成若干个区间(bins),有效地将连续变量X转换成一个有序的分类变量(This amounts to converting a continuous variable into an ordered categorical variable)。在每个区间内,我们拟合一个单独的线性方程,从而在整个 X X X的值域上构建一个由多个线性片段组成的非线性模型

如图所示,作者通过断点 c 1 , c 2 , . . . , c K c_1, c_2, ..., c_K c1,c2,...,cK将变量 X X X细分为 K + 1 K+1 K+1个新的变量 C 0 ( X ) , C 1 ( X ) , … , C k ( X ) C_0(X),C_1(X),…,C_k(X) C0(X),C1(X),,Ck(X)。这些新变量利用指示函数 I ( ⋅ ) I(·) I(),当条件成立时取值为1,否则为0,它们也被称为哑谜变量(dummy variables)。需要注意的是,对于任一特定的 X = x i X=x_i X=xi,其对应的各个哑谜变量的和恒等于1(因为 x i x_i xi仅属于唯一一个区间)。
image.png
作者随后将这 K + 1 K+1 K+1个新生成的变量作为独立变量重新拟合原始方程,形式如下:
image.png
请注意,公式中我们未包含 C 0 ( X ) C_0(X) C0(X)这个变量因为它与模型中的截距项 β 0 β_0 β0作用相同。在构建哑谜变量时,我们可以省略任意一个类别,正如3个类别的分类仅需要2个哑谜变量即可完整表达。对于 X < c 1 X < c_1 X<c1区间内的数据点,除了截距之外,所有其他变量系数均设为0,因此截距 β 0 β_0 β0可以被解释为当 X < c 1 X < c_1 X<c1时因变量 Y Y Y的平均值。当 c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cjX<cj+1区间时,模型预测值为 β 0 + β j β_0+β_j β0+βj因此,系数 β j β_j βj的含义是:对于处于区间 c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cjX<cj+1内的 X X X值,预测值相对于 X < c 1 X < c_1 X<c1区间的平均变化量(so represents the average increase in the response for X in c j ≤ X < c j + 1 c_j ≤ X < c_{j+1} cjX<cj+1relative to X < c 1 X < c_1 X<c1)。

将阶梯函数应用至工资数据集后,所得的模型效果图如下。可见,在此案例中,分段常数函数的拟合效果并不理想(例如,在第一个年龄区间内,模型未能反映出工资随年龄增长而上升的趋势)。
image.png
如同之前处理工资数据集的方式,我们可以将工资数据分为高收入和低收入两类,并相应地将线性回归模型转换为逻辑回归模型,如下图所示:
image.png
尽管在本案例中阶梯函数的效果不尽如人意,但在生物统计学和流行病学领域,阶梯函数仍然颇受欢迎(Nevertheless, step function approaches are very popular in biostatistics and epidemiology)。

2.3 基函数(Basis Functions)

在基函数方法中,我们拥有一系列可用于变换自变量 X X X的工具函数,如 b 1 ( X ) , b 2 ( X ) , . . . , b K ( X ) b_1(X), b_2(X), . . . , b_K(X) b1(X),b2(X),...,bK(X)。这些函数 b 1 ( ⋅ ) , b 2 ( ⋅ ) , . . . , b K ( ⋅ ) b_1(·), b_2(·), . . . , b_K(·) b1(),b2(),...,bK()事先选定(fixed and known)的固定函数,被称为基函数多项式和阶梯函数都是基函数的特殊情况(Polynomial and piecewise-constant regression models are in fact special cases of a basis function approach):在多项式基函数中,每个基函数的形式是 b j ( x i ) = x i j b_j(x_i) = x_i^j bj(xi)=xij;而在分段函数的情况下,基函数采用的形式是 b j ( x i ) = I ( c j ≤ x i < c j + 1 ) b_j(x_i) = I(c_j ≤ x_i < c_{j+1}) bj(xi)=I(cjxi<cj+1)

image.png
我们可以将这些基函数 b 1 ( x i ) , b 2 ( x i ) , . . . , b K ( x i ) b_1(x_i), b_2(x_i), ..., b_K(x_i) b1(xi),b2(xi),...,bK(xi)视为自变量,并构建一个多元线性回归模型这意味着我们仍然可以使用最小二乘法来拟合系数,并且适用于线性回归的所有特性(例如系数的标准误差、衡量模型整体显著性的F统计量)也同样适用于基于基函数的模型。

在接下来的章节中,我们将探讨一种非常普遍的基函数选择:回归样条函数(regression splines)

2.4 回归样条(Regression Splines)

2.4.1 分段多项式回归(Piecewise Polynomials)

这种方法融合了之前的多项式回归与阶梯函数的策略,即将自变量分割成多个区间,并在每个区间内分别进行多项式回归拟合。例如,我们可以考虑拟合一个分段三次多项式回归方程(piecewise cubic polynomial regression),形式如下所示:
image.png
乍一看,分段三次多项式回归似乎与普通的三阶多项式回归没有显著区别,但实际上二者有重要差异。在标准的三阶多项式回归中,系数对于 X X X的所有值都是固定不变的而在分段三次多项式回归中,由于自变量 X X X被分成了几个区间,每个区间都单独拟合了一个三阶多项式,因此不同区间的 X = x i X=x_i X=xi值对应的系数( β 0 , β 1 , β 2 , β 3 β_0, β_1, β_2, β_3 β0,β1,β2,β3)是不同的划分这些区间的点称为结点(knots)

例如,在这里我们设定一个结点 c c c,则对应的分段三阶多项式回归可以表示为:
image.png
可以看到,实际上我们分别对两个不同的区间的样本数据拟合了两个标准三阶多项式回归模型:对于 x i < c x_i<c xi<c的样本,我们拟合了一个具有系数 β 01 , β 11 , β 21 , β 31 β_{01}, β_{11}, β_{21}, β_{31} β01,β11,β21,β31的三阶多项式;而对于 x i ≥ c x_i≥c xic的样本,我们拟合了另一个独立的三阶多项式回归模型,具有系数 β 02 , β 12 , β 22 , β 32 β_{02}, β_{12}, β_{22}, β_{32} β02,β12,β22,β32。这些系数都可以通过最小二乘法计算得出。

通常情况下,如果我们设定了 K K K个结点,最终我们将拟合 K + 1 K+1 K+1个相应的分段模型随着设置的结点数量增多,模型的灵活性(或者说复杂度)也会相应增加(Using more knots leads to a more flexible piecewise polynomial)。当然,理论上多项式的阶数可以是任意选择的。可能大家已经注意到了,我们最初提到的阶梯函数回归实际上就是分段多项式回归在阶数为0时的特例

下图展示了使用工资数据集,并按照年龄(Age)以50岁为分界线分成两部分后,拟合的分段三阶多项式回归模型。这个模型的一个显著特点是,在Age=50这个点上函数是不连续的,这导致模型在这个点上显得不太合理。由于模型中结点的数量为1,并且是三阶多项式拟合,因此需要估计8个系数。所以,我们说这个模型的自由度为8
image.png

这里需要简要说明一下自由度的定义在不同的语境下,自由度的定义可能会有所不同
1)在统计学中自由度通常定义为样本量减去模型中参数的数量(或等价地,约束条件的数量)。例如,如果你有10000个数据点,对于一个三元线性回归模型,你需要估计的参数包括一个截距项和三个斜率项,总共是4个参数。因此,自由度将是样本大小10000减去4,等于9996。
2)在机器学习中比如在线性回归或神经网络中,模型的自由度可以等同于模型参数(如权重和偏置)的数量。在这里,作者使用的是机器学习领域中对自由度的定义。

2.4.2 约束条件与样条函数(Constraints and Splines)

为了解决上图在Age=50处跳跃不连续的问题,我们在拟合模型时需要加入一些限制条件,例如要求模型在结点处必须是连续的。下图展示了加入这些限制条件后拟合的结果,看起来比之前的结果要好一些,但是连接处仍然显得有些不自然
image.png

为了使得在结点处的连接更加自然我们将限制条件加强为“不仅要求函数连续,还要求光滑地连续”用数学术语来说,就是在Age=50这个点上,函数的一阶和二阶导数也必须连续结合原先对函数本身连续性的要求,这相当于一共加上了三个限制条件。通常情况下,每增加一个限制条件,我们就会减少一个自由度,这样做可以降低模型的复杂度。这次修改导致模型的自由度从8减少到了5最终得到的这个模型有一个专业名称,叫做三阶样条函数(cubic spline)。拟合结果如下图所示,现在肉眼几乎无法辨识出不连续的地方了。(建议大家这里回顾下上面的三张图,深刻体会下模型如何从Piecewise Cubic 到 Continuous Piecewise Cubic 最后到 Cubic Spline的转变)。
image.png

通常情况下,我们所说的 d d d 阶样条函数指的是分段的 d d d 阶多项式回归模型,并且附带了限制条件:在每个结点上,从函数其本身到 d − 1 d-1 d1 阶导数都必须连续。下图所示为最简单的1阶样条函数,但更常见的叫法是线性样条函数,它的限制条件仅要求函数本身在结点处连续(因为此时 d = 1 d=1 d=1,所以只要求0阶导数,即函数本身,连续即可)。
image.png

2.4.3 样条函数的基函数形式(The Spline Basis Representation)

我们可以使用之前讨论的基础函数(basis function)来表示回归样条(regression spline)

例如,一个具有 k k k个结点的三阶样条回归模型可以通过基函数表示为:

image.png
通过选择合适的函数形式 b 1 , b 2 , … , b K + 3 b_1, b_2, \ldots, b_{K+3} b1,b2,,bK+3,我们就能够表示具有 k k k个结点的三阶样条回归模型了

为什么这里算上截距一共要拟合的是 K + 4 K+4 K+4个参数呢?

这与自由度的概念有关。在本章中,作者将自由度等同于模型中需要拟合的参数数量。通常情况下,如果结点的数量为 K K K,则最终我们会拟合 K + 1 K+1 K+1个相应的分段模型。由于在这里我们拟合的是三阶多项式,所以在不添加任何限制条件的情况下,包括每个分段的截距在内,总共需要拟合 ( K + 1 ) × 4 (K+1) \times 4 (K+1)×4个系数。然而,由于样条函数需要在每个结点处施加三个限制条件(即要求函数值、一阶导数和二阶导数连续),这意味着在每个结点会减少3个自由度。因此,对于 K K K个结点,总共会减去 3 K 3K 3K个自由度。所以,最终得到的参数数量是 ( K + 1 ) × 4 − 3 K = K + 4 (K+1) \times 4 - 3K = K + 4 (K+1)×43K=K+4个。

现在我们来确定 b 1 , b 2 , … , b K + 3 b_1, b_2, \ldots, b_{K+3} b1,b2,,bK+3合适的函数形式。在表达样条函数时,我们通常会选择一个样条基函数,其中幂基(Power basis)是一种常用的样条基函数,它采用幂函数作为基函数。然而,直接使用完整的幂函数基可能会导致模型过拟合或计算不稳定,因此在实际应用中,通常会使用截断的幂基(也就是分段),即“Truncated power basis”。其形式如下所示:
image.png
其中 ξ ξ ξ表示结点。
然后我们将 β 4 h ( x , ξ ) β_4h(x,ξ) β4h(x,ξ)这一项加入到最初的分段三次多项式回归中变为: y i = β 0 + β 1 x i + β 2 x i 2 + β 3 x i 3 + β 4 h ( x , ξ ) + ε y_i=β_0+β_1x_i+β_2x_i^2+β_3x_i^3+β_4h(x,ξ)+ε yi=β0+β1xi+β2xi2+β3xi3+β4h(x,ξ)+ε

再次提醒,这个公式不应被误解为普通的三阶多项式(如果有疑问,可以回顾第2.4.1节的内容)。换句话说,为了拟合一个具有 K K K个结点的三阶样条回归模型,我们相当于拟合了一个包含截距项 K + 3 K+3 K+3个自变量的普通最小二乘线性回归模型。这些自变量的形式可以表示为 X , X 2 , X 3 , h ( X , ξ 1 ) , h ( X , ξ 2 ) , … , h ( X , ξ K ) X, X^2, X^3, h(X, \xi_1), h(X, \xi_2), \dots, h(X, \xi_K) X,X2,X3,h(X,ξ1),h(X,ξ2),,h(X,ξK),其中 ξ 1 , … , ξ K \xi_1, \ldots, \xi_K ξ1,,ξK就是那 K K K个结点。由于模型中有 K + 4 K+4 K+4个系数需要拟合,因此这个模型的自由度可以视为 K + 4 K+4 K+4

如下面蓝色实线所示,我们继续使用之前的工资数据集,用年龄(Age)来预测工资(Wage),这次我们使用具有3个结点的三阶样条(cubic spline)进行拟合(三条垂直的虚线代表这三个结点)。

可以看到,整个函数形态非常平滑,但存在一个明显的缺点,在变量的边缘部分(小于最小结点或大于最大结点的部分),预测结果的不确定性(方差)会变得很大,这可以通过两侧虚线的宽度来判断。因此,我们可以增加另一个限制条件,即在 X X X的边界处函数必须是线性的,正如下图中红色实线所示。可以看出,在加入这个额外限制条件后,两侧的虚线明显变窄了(两条红色虚线的间距相较于蓝色虚线),这表明预测的不稳定性在降低。这条红色实线也有一个官方名称,叫做自然三阶样条(natural cubic spline)(A natural spline is a regression spline with additional boundary constraints: the natural function is required to be linear at the boundary (in the region where X is smaller than the smallest knot, or larger than the largest knot) )。
image.png

2.4.4 选择结点的数量和放置位置(Choosing the Number and Locations)

当我们想要拟合一个样条函数时,我们需要面对的首要问题是,如何放置那些结点(knots)?

理想情况下,我们希望在数据表现出较强非线性的地方放置更多的结点,因为一个区域内结点越多,该区域最终拟合出的函数的非线性特征就越明显。然而,在实际情况中,我们往往难以准确判断数据在哪里呈现非线性,哪里保持线性。因此,通常情况下,我们会先确定模型的自由度,然后让软件根据自变量的相同百分位数来放置对应数量的结点(One way to do this is to specify the desired degrees of freedom, and then have the software automatically place the corresponding number of knots at uniform quantiles of the data)。

下图是作者拟合的一个拥有3个结点的自然三阶样条(natural cubic spline),作者只是事先确定了这次模型的自由度为4。接下来,3个结点(knots)的位置选择就完全交给了软件自动完成,分别选择了25分位数、50分位数和75分位数。**至于为什么自由度设为4,在自然三阶样条下就等价于3个结点呢?**严格来讲,实际上这里有5个结点,包括内部的三个显性结点,以及左右两个边界的结点。根据前面的知识,我们知道一个拥有5个结点的三阶自然样条函数,有 5 + 3 + 1 = 9 5+3+1=9 5+3+1=9自由度,因为自然样条需要在自变量的两个边界各加两个限制条件(第一、第二阶可导),所以最终的自由度是 9 − 2 − 2 = 5 9-2-2=5 922=5个。又因为这5个自由度里包含一个截距的常数项,所以我们一般只认为是4个自由度。
image.png

那么,结点(knots)的数量或者说模型自由度通常是如何确定的呢?答案是交叉验证(相信这个答案大家已经听麻了)。作者仍然使用了之前的工资数据集,用年龄来预测工资,这里采用了10折交叉验证,分别拟合了自然三阶样条和普通三阶样条。可以看出,两种方式都表明,只包含一个自由度(即单纯的线性模型)对数据集的模型是欠拟合的,而一旦自由度超过三个,误差曲线变得平缓。因此,在这个例子中,选择自由度为3是合理的
image.png

这里需要提醒的是,到目前为止,我们只考虑了单变量的情况,所以自由度的选择显得很容易。在后面的内容中,我们将讨论加性样条模型(additive spline models)这种模型包含了多个自变量,并要求我们针对每个变量有针对性地选择其对应的自由度。在这种情况下,实际工作中,我们通常也只会选择一个固定的自由度,将其适用于所有变量(This could potentially require the selection of degrees of freedom for each variable. In cases like this we typically adopt a more pragmatic approach and set the degrees of freedom to a fixed number, say four, for all terms)。

2.4.5 与多项式回归的比较(Comparison to Polynomial Regression)

下图使用相同的数据集比较了一个拥有15个自由度的自然三次样条(natural cubic spline)也拥有15个自由度的普通多项式回归模型。可以看到,在自变量的边界上,普通多项式回归模型预测的数值极不稳定,波动极大;而自然三次样条则相对平缓很多,这正是自然三次样条的特性,因为在边界上加了额外的限制条件。

一般情况下,自然三次样条都要比普通的多项式回归模型更稳定。这是因为普通的多项式回归为了增加模型的非线性特征,只能不停地增加变量的阶数,例如这里,最高阶数达到了15,即 X 15 X^{15} X15;而自然三次样条只需要增加结点(knots)的个数,同时保持最高阶数不变。
image.png

引用

image.png

这篇关于豆瓣9.6分统计学神作ISL之第七章读书笔记(上),带你系统学习多项式回归、阶梯函数、基函数和回归样条的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998526

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu3389(阶梯博弈变形)

题意:有n个盒子,编号1----n,每个盒子内有一些小球(可以为空),选择一个盒子A,将A中的若干个球移到B中,满足条件B  < A;(A+B)%2=1;(A+B)%3=0 这是阶梯博弈的变形。 先介绍下阶梯博弈: 在一个阶梯有若干层,每层上放着一些小球,两名选手轮流选择一层上的若干(不能为0)小球从上往下移动,最后一次移动的胜出(最终状态小球都在地面上) 如上图所示,小球数目依次为

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设