Course1-Week2-多输入变量的回归问题

Course1-Week2-多输入变量的回归问题

文章目录

  • Course1-Week2-多输入变量的回归问题
    • 1. 向量化和多元线性回归
      • 1.1 多维特征
      • 1.2 向量化
      • 1.3 用于多元线性回归的梯度下降法
    • 2. 使梯度下降法更快收敛的技巧
      • 2.1 特征缩放
      • 2.2 判断梯度下降是否收敛
      • 2.3 如何设置学习率
    • 3. 特征工程
      • 3.1 选择合适的特征
      • 3.2 多项式回归

  • 笔记主要参考B站视频“(强推|双字)2022吴恩达机器学习Deeplearning.ai课程”。

好文:

  • 2023吴恩达机器学习: 上班族35 天学完~学习笔记 (1.1 监督学习)——系列文章
  • 入门机器学习/深度学习要多长时间?

本篇笔记对应课程 Course1-Week2(下图中深紫色)。


1. 向量化和多元线性回归

  在上一周“单变量线性回归”的基础上,本周将继续拓展到“多元线性回归”(第1节)、“多项式回归”(第3节),并介绍加速梯度下降法收敛的技巧(第2节)。

1.1 多维特征

首先将单个特征扩展到多个特征,下面是机器学习术语:

  • m m m:训练样本的总数。
  • n n n:输入特征的总数。
  • X ⃗ \vec{X} X :全部的输入特征值,是一个二维向量,每一行表示一个样本,每一列表示所有样本的单个特征。
  • x ⃗ j \vec{x}_j x j:表示第 j j j个特征概念(一维向量), j j j的取值范围为 j = 1 , . . . , n j=1,...,n j=1,...,n
  • x ⃗ ( i ) \vec{x}^{(i)} x (i):第 i i i个训练样本的输入特征(一维向量), i i i的取值范围为 i = 1 , . . . , m i=1,...,m i=1,...,m
  • x ⃗ j ( i ) \vec{x}^{(i)}_{j} x j(i):第 i i i个训练样本的第 j j j个特征,是单个值。如下图中, x ⃗ 4 ( 3 ) = 30 \vec{x}^{(3)}_4 = 30 x 4(3)=30
  • y ⃗ ( i ) \vec{y}^{(i)} y (i):第 i i i个训练样本的目标值,是单个值。
  • Y ⃗ \vec{Y} Y :全部的训练样本的特征值,是一维向量。

注:若无特殊说明,所有的一维向量都默认为列向量。

概念区分:

  • 单变量线性回归(univariate linear regression):只有单个特征的线性回归模型。
  • 多元线性回归(multiple linear regression):具有多维特征的线性回归模型。
  • multivariate regression:不是上述“多元回归”!另有别的意思,后面介绍。
图1-2-1 四维特征的房价预测问题

  如上图所示,将“房价预测”中的输入特征数量增加为4个:输入特征:房屋面积、卧室数量、房屋层数、房屋年龄。于是显然其线性回归模型也将从 f w , b ( x ) = w x + b f_{w,b}(x) = wx+b fw,b(x)=wx+b 扩展为下面的向量形式:
f w ⃗ , b ( x ⃗ ) = w 1 x 1 + w 2 x 2 + . . . + w 4 x 4 + b = ∑ j = 1 n w j x j + b = w ⃗ ⋅ x ⃗ + b \begin{aligned} f_{\vec{w},b}(\vec{x}) &= w_1x_1 + w_2x_2 + ... + w_4x_4 + b\\ &= \sum_{j=1}^{n}w_jx_j + b\\ &= \vec{w}·\vec{x} + b \end{aligned} fw ,b(x )=w1x1+w2x2+...+w4x4+b=j=1nwjxj+b=w x +b

  • w ⃗ = [ w 1 , w 2 , . . . , w n ] T \vec{w}=[w_1,w_2,...,w_n]^T w =[w1,w2,...,wn]T:表示参数(列)向量。 w i w_i wi表示当前特征对房屋价格影响。
  • b b b:常数项参数。可以理解为房屋的基价(base price)。
  • x ⃗ = [ x 1 , x 2 , . . . , x n ] T \vec{x}=[x_1,x_2,...,x_n]^T x =[x1,x2,...,xn]T:表示单个样本的特征(列)向量。
  • w ⃗ ⋅ x ⃗ \vec{w}·\vec{x} w x :表示两个向量的点积。

1.2 向量化

  简单来说,所谓“向量化”就是将分散的数字绑在一起进行处理。虽然概念很简单,但是“向量化”对于机器学习来说非常重要,因为它可以使模型更简洁代码更简洁,并且也可以加速代码运行速度。比如下图给出了三种书写求和公式的方法。可以发现,使用向量形式的模型表达式最简洁、代码最少(一行):

图1-2-2 向量化的好处
  1. 一个一个写:很麻烦,耗时耗力,也不会加快代码计算。
  2. for循环:每次只能计算单个乘法并相加,n很大时非常耗时。
  3. 向量相乘:形式简洁、运行更快。这是因为 numpy.dot()可以并行计算所有乘法,再进行相加。甚至某些内置算法还会使用GPU加速运算。

注:Optional Lab介绍了一些NumPy的语法。

并且梯度下降法的迭代计算中,使用向量更新参数也会非常简洁。所以机器学习中尽量使用向量化代码

1.3 用于多元线性回归的梯度下降法

  有了“向量化”的铺垫,本节将前面的单变量线性回归问题扩展到多元线性回归。首先使用“向量”重写模型,然后也就可以写出梯度下降法的“向量”形式,进而迭代计算出模型参数:
Model : f w ⃗ , b ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b Cost function : min ⁡ w ⃗ , b J ( w ⃗ , b ) = 1 2 m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) 2 Gradient descent repeat until convergence : { w j = w j − α ∂ ∂ w j J ( w ⃗ , b ) = w j − α m ∑ i = 1 m [ ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) ⋅ x ⃗ j ( i ) ] , j = 1 , 2 , . . . , n . b = b − α ∂ ∂ b J ( w ⃗ , b ) = b − α m ∑ i = 1 m ( f w ⃗ , b ( x ⃗ ( i ) ) − y ( i ) ) \begin{aligned} \text{Model} &: \quad f_{\vec{w},b}(\vec{x}) = \vec{w}·\vec{x} + b\\ \text{Cost function} &: \quad \min_{\vec{w},b} J(\vec{w},b) = \frac{1}{2m} \sum_{i=1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})^2\\ \begin{aligned} \text{Gradient descent} \\ \text{repeat until convergence} \end{aligned} &: \left\{\begin{aligned} w_j &= w_j - \alpha \frac{\partial }{\partial w_j} J(\vec{w},b) = w_j - \frac{\alpha}{m} \sum_{i=1}^{m}[(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)})·\vec{x}^{(i)}_j],\; j=1,2,...,n. \\ b &= b - \alpha \frac{\partial }{\partial b} J(\vec{w},b) = b - \frac{\alpha}{m} \sum_{i=1}^{m}(f_{\vec{w},b}(\vec{x}^{(i)})-y^{(i)}) \end{aligned}\right. \end{aligned} ModelCost functionGradient descentrepeat until convergence:fw ,b(x )=w x +b:w ,bminJ(w ,b)=2m1i=1m(fw ,b(x (i))y(i))2: wjb=wjαwjJ(w ,b)=wjmαi=1m[(fw ,b(x (i))y(i))x j(i)],j=1,2,...,n.=bαbJ(w ,b)=bmαi=1m(fw ,b(x (i))y(i))

  • 模型中 x ⃗ \vec{x} x 表示单个样本的所有特征,是一维向量。
  • f w ⃗ , b ( x ⃗ ( i ) ) f_{\vec{w},b}(\vec{x}^{(i)}) fw ,b(x (i))是一个值, y ( i ) y^{(i)} y(i)是一个值。

  除了梯度下降法,还有一类求解模型参数的方法——正规方程法(Normal rquation method)。此方法利用线性代数的知识,直接令代价函数的梯度 ∂ ∂ w ⃗ J ( w ⃗ , b ) = 0 ⃗ \frac{\partial }{\partial \vec{w}} J(\vec{w},b) = \vec{0} w J(w ,b)=0 ,便可以一步求解出代价函数极小点所对应的参数值: w ⃗ = ( X ⃗ T X ⃗ ) − 1 X ⃗ T Y ⃗ \vec{w}=(\vec{X}^T\vec{X})^{-1}\vec{X}^T\vec{Y} w =(X TX )1X TY ,见“详解正规方程”。但是这种方法有两个缺点:

  1. 适用面小:仅适用于线性拟合,无法应用于其他方法,比如下周要学的“逻辑回归算法(logistic regression algorithm)”或者神经网络(Course2)。
  2. 计算规模不能太大:如何特征值数量很大,矩阵的逆等求解非常慢。

正规方程法通常会包含在机器学习函数库中,我们无需关心具体的计算过程。对于大多数机器学习算法来说,梯度下降法仍然是推荐的方法

本节Quiz

  1. In the training set below, what is x 4 ( 3 ) x_4^{(3)} x4(3)? Please type in the number below (this is an integer such as 123, no decimal points).
    Answer: 30

  2. Which of the following are potential benefits of vectorization? Please choose the best option.
    √ It can make your code shorter.
    √ It allows your code to run more easily on parallel compute hardware.
    √ It makes your code run faster.
    √ All of the above.

  3. To make gradient descent converge about twice as fast, a technique that almost always works is to double the learning rate α \alpha α.
    × True
    √ False

  4. With polynomial regression, the predicted values f w , b ( x ) f_{w,b}(x) fw,b(x) does not necessarily have to be a straight line (or linear) function of the input feature x x x.
    × False
    √ True

2. 使梯度下降法更快收敛的技巧

2.1 特征缩放

  特征缩放(feature scaling)可以使梯度下降法更快收敛。这主要是因为不同特征的取值范围有很大不同,但所有特征所对应的参数的学习率是一致的。这就导致取值范围较小的特征的参数,会“跟不上”取值范围较大的特征的参数变化。比如我们来看看“特征值大小”和其关联的“参数大小”的关系,首先将“房价预测”的问题简化成两个特征:

图1-2-3 取值范围不同的特征对预测结果的影响不同
  • x 1 x_1 x1:房屋面积,范围是300~2000平方英尺。
  • x 2 x_2 x2:卧室数量,范围是0~5。

参数选择:显然取值范围更大的 x 1 x_1 x1 影响更大

  • w 1 = 50 , w 2 = 0.1 , b = 50 w_1=50,w_2=0.1,b=50 w1=50,w2=0.1,b=50:计算出来的房屋价格是 $ 100050.5 k 100050.5k 100050.5k,显然与实际的 $ 500 k 500k 500k 完全不符。
  • w 1 = 0.1 , w 2 = 50 , b = 50 w_1=0.1,w_2=50,b=50 w1=0.1,w2=50,b=50:计算出来的房屋价格是 $ 500 k 500k 500k,正好等于房屋实际价格。

  于是,便考虑将 特征值归一化,使所有特征值的取值范围大致相同,这样就不会影响参数的迭代计算了。如下图便给出了进行 特征缩放 前后的对比:

图1-2-4 特征值缩放效果-等高图

左两图是训练样本散点图;右两图是代价函数等高图。上两图对应特征缩放前;下两图对应特征缩放后。

  • 特征缩放前:散点图呈现条形,等高图呈极窄的椭圆形。这是因为对于范围较大的特征值( x 1 x_1 x1)所对应的参数 w 1 w_1 w1,一点微小的改变就会导致代价函数剧烈变化,进而使得等高图呈椭圆状。在使用梯度下降法的时候,由于学习率一样,每走一小步,就会导致代价函数在 w 2 w_2 w2方向变化不多、但在 w 1 w_1 w1方向急剧变化,于是就会“反复横跳”,增加迭代次数和计算量,甚至不能收敛。
  • 特征缩放后:散点图分布较为均匀,并且等高图呈圆形。梯度下降法可以径直朝最小值迭代,减少迭代次数、更快的得到结果。

  好,现在我们知道进行 特征缩放 很有必要,那具体如何进行“特征缩放”,来使得所有特征都有相近的范围大小呢?主要有下面三种方法,并给出了第三种方法“Z-score归一化”的特征缩放效果:

  1. 除以最大值:所有特征除以各自的范围最大值,使得特征值范围都在0~1之间。于是 0.15 ≤ x 1 2000 ≤ 1 0.15 \le \frac{x_1}{2000} \le 1 0.152000x11 0 ≤ x 2 5 ≤ 1 0 \le \frac{x_2}{5} \le 1 05x21
  2. 均值归一化(Mean normalization):使得特征值范围大致为-1~1。假设 x 1 x_1 x1的平均值为 μ 1 = 600 \mu_1=600 μ1=600 x 2 x_2 x2的平均值为 μ 2 = 2.3 \mu_2=2.3 μ2=2.3,于是 − 0.18 ≤ x 1 − μ 1 2000 − 300 ≤ 0.82 -0.18 \le \frac{x_1 - \mu_1}{2000 - 300} \le 0.82 0.182000300x1μ10.82 − 0.46 ≤ x 2 − μ 2 5 − 0 ≤ 0.54 -0.46 \le \frac{x_2 - \mu_2}{5 - 0} \le 0.54 0.4650x2μ20.54
  3. Z-score归一化(Z-score normalization)【推荐】:使得特征值服从标准正态分布。假设 x 1 x_1 x1的平均值和标准差分别为 μ 1 = 600 , σ 1 = 450 \mu_1=600,\sigma_1=450 μ1=600,σ1=450 x 2 x_2 x2的平均值和标准差分别为 μ 2 = 2.3 , σ 2 = 1.4 \mu_2=2.3,\sigma_2=1.4 μ2=2.3,σ2=1.4,于是 − 0.67 ≤ x 1 − μ 1 σ 1 ≤ 3.1 -0.67 \le \frac{x_1 - \mu_1}{\sigma_1} \le 3.1 0.67σ1x1μ13.1 − 1.6 ≤ x 2 − μ 2 σ 2 ≤ 1.9 -1.6 \le \frac{x_2 - \mu_2}{\sigma_2} \le 1.9 1.6σ2x2μ21.9

注:Z-score归一化的合理性在于自然界中大部分数据都是服从正态分布的。
均值: μ j = 1 m ∑ i = 0 m − 1 x ⃗ j ( i ) , j = 0 , 1 , . . . , n . \mu_j = \frac{1}{m} \sum_{i=0}^{m-1}\vec{x}^{(i)}_j , \; j=0,1,...,n. μj=m1i=0m1x j(i),j=0,1,...,n.
方差: σ j 2 = 1 m ∑ i = 0 m − 1 ( x ⃗ j ( i ) − μ j ) 2 , j = 0 , 1 , . . . , n . \sigma^2_j = \frac{1}{m} \sum_{i=0}^{m-1} (\vec{x}^{(i)}_j-\mu_j)^2, \; j=0,1,...,n. σj2=m1i=0m1(x j(i)μj)2,j=0,1,...,n.
标准差: σ j = σ j 2 , j = 0 , 1 , . . . , n . \sigma_j = \sqrt{\sigma^2_j}, \; j=0,1,...,n. σj=σj2 ,j=0,1,...,n.

图1-2-5 Z-score归一化的效果

上面三个图的横纵坐标分别为两个特征:房屋面积、房屋年龄。可以看到特征缩放后,样本散点图分布的更加均匀。
下面两个图的横纵坐标同样是两个特征:房屋面积、卧室数量。可以看到特征缩放后,等高线图趋近圆形。
图片来自:C1_W2_Lab03_Feature_Scaling_and_Learning_Rate_Soln:

最后要说明一点,特征缩放后,只要所有特征值的范围在一个数量级就都可以接受,但若数量级明显不对等就需要 重新缩放

2.2 判断梯度下降是否收敛

  本节主要介绍 横坐标为迭代次数 的“学习曲线(learning carve)”。学习曲线可以帮助我们判断梯度下降法 是否正在收敛,或者判断梯度下降法 是否已经收敛。如下图给出了正常的学习曲线,

图1-2-6 正常收敛的学习曲线示意图
  • 正常情况:每次迭代后,代价函数都应该下降。直到某次迭代后,代价函数几乎不再下降,就认为是收敛。
  • 算法没有收敛:若某次迭代后,代价函数变大,则算法没有收敛,可能意味着学习率 α \alpha α过大。
  • 算法已经收敛:上图中的红色段,可以看到代价函数几乎不再下降。

自动收敛测试(automatic convergence test):若两次迭代之间,代价函数的减少值 ≤ ϵ = 1 0 − 3 \le \epsilon=10^{-3} ϵ=103(自定义),即可认为收敛。但是通常 ϵ \epsilon ϵ的选取很困难,所以还是建议使用上图所示的学习曲线进行判断。

注意不同的算法或问题,其收敛的迭代次数都不同,有些问题可能几十次就收敛,有些问题可能需要上万次才能收敛。由于很难提前知道梯度下降法是否会收敛,所以可以根据这个学习曲线来进行判断。

2.3 如何设置学习率

  之前提到,学习率太小,收敛太慢;学习率太大,可能不会收敛。那如何选择合适的学习率呢?正确的做法是,迭代较小的次数,快速地、粗略地选出合适的学习率。具体的选择策略从一个较小的学习率(如0.01)开始,逐渐增大,直到出现不收敛的情况。如下图所示:

图1-2-7 逐步增加学习率
  • 代价函数起伏不定:代码逻辑有bug(比如迭代方向写反),或者学习率太大。
  • 验证代码逻辑正常:当学习率很小时,代价函数会不断减小,即使很慢。

3. 特征工程

  “特征工程”这个标题听起来怪怪的,其实就是如何挑选、组合、使用“特征”的一套方法论。特征工程(Feature engineering)使用先验知识或直觉来转换或组合原始特征,从而设计出新的特征,进而简化算法或者使预测结果更准确。

关于Python仿真:scikit-learn是一个非常广泛使用的开源机器学习库,但是老师希望能理解线性回归的原理,而不是盲目地调用scikit-learn的函数。

3.1 选择合适的特征

  最简单的特征工程就是“选择合适的特征”。比如下图中,原始特征应该为房子所在地块的长度(frontage)和宽度(depth),但占地面积(frontage × depth)应该是更符合直观的特征,于是就利用两个原始特征创造出了新的特征。

图1-2-8 创造新的特征

3.2 多项式回归

  另一种特征工程就是对某个特征进行幂次,进而实现使用非直线来拟合数据,也就是“多项式回归(Polynomial Regression)”。比如给出下图中红叉所示的训练样本,显然用直线拟合并不符合直观,于是:

  • 二次函数拟合:虽然前半段看起来很好,但是终归会下降,这不符合“面积越大,房子越贵”的常识。
  • 三次函数拟合:符合直觉,但后面房价随面积快速上升。
  • 开根号拟合:符合直觉,房价随着面积缓慢上升。

注:幂次越高,特征缩放就显得越重要,否则参数的为微小变化将引起代价函数的剧烈波动,很可能会导致算法无法收敛。

图1-2-9 多项式拟合——二次拟合、三次拟合、开根号拟合

在Course2中将介绍如何挑选不同的特征,现在只是明确用户可以挑选特征,并且使用“特征工程”和“多项式函数”可以拟合出曲线,来更加贴合样本。

  1. Which of the following is a valid step used during feature scaling?
    × Add the mean (average) from each value and and then divide by the (max - min).
    √ Subtract the mean (average) from each value and then divide by the (max - min).

  2. Suppose a friend ran gradient descent three separate times with three choices of the learning rate α \alpha α and plotted the learning curves for each (cost J J J for each iteration). For which case, A or B, was the learning rate a likely too large?
    √ case B only.
    × Both Cases A and B.
    × case A only.
    × Neither Case A nor B.

  3. Of the circumstances below, for which one is feature scaling particularly helpful?
    × Feature scaling is helpful when all the features in the original data (before scaling is applied) range from 0 to 1.
    √ Feature scaling is helpful when one feature is much larger (or smaller) than another feature.
    注:本题想表达的意思是,原始特征值范围都在0~1附近时,就没必要进行特征缩放了。

  4. You are helping a grocery store predict its revenue, and have data on its items sold per week, and price per item. What could be a useful engineered feature?
    √ For each product, calculate the number of items sold times(乘) price per item.
    × For each product, calculate the number of items sold divided(除) by the price per item.

注:C1_W2_Linear_Regression包含单变量线性回归、多线线性回归的练习题,值得一做。

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

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

相关文章

看图说话:对脏读、不可重复度、幻读进行总结

1、脏读 「事务B」将 id 为 1 的用户 name 修改为“小卡”,事务未提交。「事务A」查询 id 为 1 的用户数据,此时 name 已为“小卡”。 2、不可重复度 「事务A」第一次读取 id 为 1 的用户,name 是 “卡卡”。「事务B」将 id 为 1 的用户 nam…

Sectigo

随着互联网的普及和技术的飞速发展,网络安全问题引起重视。这时,有一家名为Sectigo(原Comodo CA)的公司应运而生,致力于为企业和个人提供最先进、最可靠的网络安全解决方案。 Sectigo(原Comodo CA) 成立于2008年,总部位于美国加利…

《使用Python将Excel数据批量写入MongoDB数据库》

在数据分析及处理过程中,我们经常需要将数据写入数据库。而MongoDB作为一种NoSQL数据库,其具有强大的可扩展性、高性能以及支持复杂查询等特性,广泛用于大规模数据存储和分析。在这篇文章中,我们将使用Python编写一个将Excel数据批…

Linux python安装 虚拟环境 virtualenv,以及 git clone的 文件数据, 以及 下资源配置

根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境,前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 source /venvs/zen-venv/bin/activate 安装flask pip install fl…

探究Kafka原理-2.Kafka基本命令实操

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

搭建Angular并引入NG-ZORRO组件库

作者:baekpcyyy🐟 1.安装node.js 注:安装 16.0 或更高版本的 Node.js node官网:https://nodejs.org/en 2.进入angular官网 https://angular.cn/guide/setup-local 新建一个文件夹 vsc打开 打开终端 1.首先安装angular手脚架…

怎么去掉视频水印?分享三种视频去水印技巧,轻松搞定!

怎么去掉视频水印?在分享视频时,我们常常会遇到因为水印而影响观感的问题,因此,掌握有效的去水印方法显得尤为重要,随着技术的进步,现在有多种方法可以帮助我们去除视频中的水印。 接下来分享三种简单且有效…

ARKit增加一个盒子

ARKit增加一个盒子 体验一下ARKit的能力,在室内随便加点小球,然后在AR中显示出来。 效果如下图: 以下为操作流程。 新建项目 新建一个空项目,项目一定要选择 Augmented Reality App,能够省很多的事。 之后的 conte…

JAVA线程池原理详解

线程池的优点 1、线程是稀缺资源,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以重复使用。 2、可以根据系统的承受能力,调整线程池中工作线程的数量,防止因为消耗过多内存导致服务器崩溃。 线程池的创建 public…

这个视频监控技术,让你的工作效率提升10倍!

在当今数字时代,视频监控技术正迅速成为社会安全、商业管理和生产运营的重要支柱。随着科技的飞速发展,视频监控不再仅仅是观察和记录,而是演变成了一种智能、高效的解决方案。 在这个数字化的时代,视频监控不仅是一种技术&#x…

Flink-简介与基础

Flink-简介与基础 一、Flink起源二、Flink数据处理模式1.批处理2.流处理3.Flink流批一体处理 三、Flink架构1.Flink集群2.Flink Program3.JobManager4.TaskManager 四、Flink应用程序五、Flink高级特性1.时间流(Time)和窗口(Window&#xff0…

穿山甲SDK接入收益·android广告接入·app变现·广告千展收益·eCPM收益(2023.11)

接入穿山甲SDK的app 全屏文字滚动APP 数独训练APP 广告接入示例: Android 个人开发者如何接入广告SDK,实现app流量变现 接入穿山甲SDK app示例: android 数独小游戏 经典数独休闲益智 2023.11.11 ~ 2023.11.22 app接入上架有一段时间了,接…

移动应用程序管理的内容、原因和方式

移动应用程序管理(MAM)是一个术语,指的是管理应用程序的整个生命周期,包括从设备安装、更新和卸载应用程序,除了在整个生命周期内管理设备外,MAM 还包括保护应用访问的数据,以及在设备上发现恶意…

17 redis集群方案

1、RedisCluster分布式集群解决方案 为了解决单机内存,并发等瓶颈,可使用此方案解决问题. Redis-cluster是一种服务器Sharding技术,Redis3.0以后版本正式提供支持。 这里的集群是指多主多从,不是一主多从。 2、redis集群的目标…

pair和typedef

文章目录 一、pair用法1.2、pair的创建和初始化1.3、pair对象的操作1.4、(make_pair)生成新的pair对象1.5、通过tie获取pair元素值 2、typedef2.1、什么是typedef2.2、typedef用法2.2.1、对于数据类型使用例如:2.2.2、对于指针的使用例如2.2.3、对于结构体的使用 2.…

java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版

上文java springboot测试类鉴定虚拟MVC请求 返回内容与预期值是否相同我们讲了测试类中 虚拟MVC发送请求 匹配返回内容是否与预期值相同 但是 让我意外的是 既然没人骂我 因为我们实际开发 返回的基本都是json数据 字符串的接口场景是少数的 我们在java文件目录下创建一个 dom…

2023年10月纸巾市场分析(京东天猫淘宝平台纸巾品类数据采集)

双十一大促期间,刚需品的纸巾是必囤商品之一。今年双十一,京东数据显示,10月23日至29日,清洁纸品成交额同比增长40%,由此也拉动了10月纸巾市场的销售。 鲸参谋数据显示,今年10月,京东平台纸巾市…

【日常总结】如何禁止浏览器 http自动跳转成https

一、场景 二、问题 三、解决方案 3.1 chrome 浏览器 3.2 edge 浏览器: 3.3 Safari 浏览器 3.4 Firefox 浏览器 3.5 Microsoft Edge 一、场景 公司网站 http:// 谷歌浏览器中自动转换成 https:// 导致无法访问 二、问题 nginx配置ssl 443接口, ht…

SOLIDWORKS 2024新功能之Electrical篇

SOLIDWORKS 2024 Electrical篇目录概览 • 对齐零部件 • 更改多个导轨和线槽的长度 • 过滤辅助和附件零件 • 2D 机柜中的自动零件序号 • 移除制造商零件数据 • 重置未定义的宏变量 • 使用范围缩短列表 • SOLIDWORKS Electrical Schematic 增强功能 1、对齐零部件…

ONNX实践系列-修改yolov5-seg的proto分支输出shape

一、目标 本文主要介绍要将原始yolov5分割的输出掩膜从[b,c,h,.w]修改为[b, h, w, c] 原来的: 目标的: 代码如下: Descripttion: version: @Company: WT-XM Author: yang jinyi Date: 2023-09-08 11:26:28 LastEditors: yang jinyi LastEditTime: 2023-09-08 11:48:01 …