线性回归详解

线性回归

线性回归介绍

学习目标:

1.理解线性回归是什么?

2.知道一元线性回归和多元线性回归的区别

3.知道线性回归的应用场景

【理解】举个栗子

假若有了身高和体重数据,来了播仔的身高,你能预测播仔体重吗?

这是一个回归问题,该如何求解呢?

思路:先从已知身高X和体重Y中找规律,再预测

•数学问题:用一条线来拟合身高和体重之间的关系,再对新数据进行预测

方程 Y = kX + b

k160 + b = 56.3 -- (1)

k166 + b = 60.6 –- (2)

。。。。

k: 斜率 b:截距

若:y = 0.9 x + (-93)

0.9*176 +(-93)= ?

【理解】线性回归

线性回归(Linear regression)是利用 回归方程(函数)一个或多个自变量(特征值)和因变量(目标值)之间 关系进行建模的一种分析方式。

注意事项:

1 为什么叫线性模型?因为求解的w,都是w的零次幂(常数项)所以叫成线性模型

2 在线性回归中,从数据中获取的规律其实就是学习权重系数w

3 某一个权重值w越大,说明这个权重的数据对房子价格影响越大

【知道】线性回归分类

  • 一元线性回归

y = kx +b

目标值只与一个因变量有关系

  • 多元线性回归

目标值只与多个因变量有关系

【知道】应用场景

线性回归问题的求解

学习目标:

1.知道线性回归API的使用

2.知道损失函数是什么

3.复习导数和矩阵的相关内容

4.理解正规方程法

5.掌握梯度下降算法的内容

【实操】线性回归API的应用

预测播仔身高

已知数据:

需求:播仔身高是176,请预测体重?

通过线性回归API可快速的找到一条红色直线,是怎么求解的呢?

【掌握】损失函数

需要设置一个评判标准

误差概念:用预测值y – 真实值y就是误差

损失函数:衡量每个样本预测值与真实值效果的函数

“红色直线能更好的拟合所有点”也就是误差最小,误差和最小

损失函数数学如何表达呢?又如何求损失函数的最小值呢?

当损失函数取最小值时,得到k就是最优解

想求一条直线更好的拟合所有点 y = kx + b

  • 引入损失函数(衡量预测值和真实值效果) Loss(k, b)

  • 通过一个优化方法,求损失函数最小值,得到K最优解

回归的损失函数:

  • 均方误差 (Mean-Square Error, MSE)

  • 平均绝对误差 (**Mean Absolute Error , MAE**)

【复习】导数和矩阵

【知道】常见的数据表述
  • 为什么要学习标量、向量、矩阵、张量?

    • 因机器学习、深度学习中经常用,不要因是数学就害怕

    • 宗旨:用到就学什么,不要盲目的展开、大篇幅学数学

  • 标量scalar :一个独立存在的数,只有大小没有方向

  • 向量vector :向量指一列顺序排列的元素。默认是列向量

  • 矩阵matrix :二维数组

  • 张量Tensor :多维数组,张量是基于向量和矩阵的推广

【知道】导数

当函数y=f(x)的自变量x在一点$x_0$上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在$x_0$处的导数,记作$f^\prime(x_0)$或df($x_0$)/dx。

导数是函数的局部性质。一个函数在某一点的导数描述了这个函数在这一点附近的变化率。

函数在某一点的导数就是该函数所代表的曲线在这一点上的切线斜率

常见函数的导数:

公式例子
$(C)^\prime=0$$\left(5\right)^\prime=0$ $\left(10\right)^\prime=0$
$\left(x^\alpha\right)^\prime=\alpha x^{\alpha-1}$$\left(x^3\right)^\prime=3 x^{2}$ $\left(x^5\right)^\prime=5 x^{4}$
$\left(a^x\right)^\prime=a^{x}\ln{a}$$\left(2^x\right)^\prime=2^x\ln{2}$ $\left(7^x\right)^\prime=7^x\ln{7}$
$\left(e^x\right)^\prime=e^{x}$$\left(e^x\right)^\prime=e^{x}$
$\left(\log{_a}x\right)^\prime=\frac{1}{x\ln{a}}$$\left(\log{{10}}x\right)^\prime=\frac{1}{x\ln{10}}$ $\left(\log{{6}}x\right)^\prime=\frac{1}{x\ln{6}}$
$\left(\ln{x}\right)^\prime=\frac{1}{x}$$\left(\ln{x}\right)^\prime=\frac{1}{x}$
$\left(\sin{x}\right)^\prime=\cos{x}$$\left(\sin{x}\right)^\prime=\cos{x}$
$\left(\cos{x}\right)^\prime=-\sin{x}$$\left(\cos{x}\right)^\prime=-\sin{x}$

导数的四则运算:

公式例子
$\left[u(x)\pm v(x)\right]^\prime=u^\prime(x) \pm v^\prime(x)$$(e^x+4\ln{x})^\prime=(e^x)^\prime+(4\ln{x})^\prime=e^x+\frac{4}{x}$
$\left[u(x)\cdot v(x)\right]^\prime=u^\prime(x) \cdot v(x) + u(x) \cdot v^\prime(x)$$(\sin{x}\cdot\ln{x})^\prime=\cos{x}\cdot\ln{x}+\sin{x}\cdot\frac{1}{x}$
$\left[\frac{u(x)}{v(x)}\right]^\prime=\frac{u^\prime(x) \cdot v(x) - u(x) \cdot v^\prime(x)}{v^2(x)}$$\left(\frac{e^x}{\cos{x}}\right)^\prime=\frac{e^x\cdot\cos{x}-e^x\cdot(-\sin{x})}{cos^2(x)}$
${g[h(x)]}^\prime=g^\prime(h)*h^\prime(x)$$(\sin{2x})^\prime=\cos{2x}\cdot(2x)^\prime=2\cos(2x)$

复合函数求导:g(h)是外函数 h(x)是内函数。先对外函数求导,再对内函数求导

导数求极值:

导数为0的位置是函数的极值点

【知道】偏导

【知道】向量

向量运算:

【知道】矩阵

【了解】一元线性回归的解析解

【了解】多元线性回归的解析解-正规方程法

梯度下降算法

【掌握】梯度下降算法思想

什么是梯度下降法

• 求解函数极值还有更通用的方法就是梯度下降法。顾名思义:沿着梯度下降的方向求解极小值 • 举个例子:坡度最陡下山法

  • 输入:初始化位置S;每步距离为a 。输出:从位置S到达山底

  • 步骤1:令初始化位置为山的任意位置S

  • 步骤2:在当前位置环顾四周,如果四周都比S高返回S;否则执行步骤3

  • 步骤3: 在当前位置环顾四周,寻找坡度最陡的方向,令其为x方向

  • 步骤4:沿着x方向往下走,长度为a,到达新的位置S‘

  • 步骤5:在S‘位置环顾四周,如果四周都比S‘高,则返回S‘。否则转到步骤3

小结:通过循环迭代的方法不断更新位置S (相当于不断更新权重参数w)

最终找到最优解 这个方法可用来求损失函数最优解, 比正规方程更通用

梯度下降过程就和下山场景类似
可微分的损失函数,代表着一座山
寻找的函数的最小值,也就是山底

【理解】银行信贷案例

【了解】梯度下降算法分类

【理解】正规方程和梯度下降算法的对比

回归评估方法

学习目标:

1.掌握常用的回归评估方法

2.了解不同评估方法的特点

为什么要进行线性回归模型的评估

我们希望衡量预测值和真实值之间的差距,

会用到MAE、MSE、RMSE多种测评函数进行评价

【知道】平均绝对误差

Mean Absolute Error (MAE)

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$ 为预测值

  • MAE 越小模型预测约准确

Sklearn 中MAE的API

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_predict)

【知道】均方误差

Mean Squared Error (MSE)

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$ 为预测值

  • MSE 越小模型预测约准确

Sklearn 中MSE的API

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_predict)

【知道】 均方根误差

Root Mean Squared Error (RMSE)

  • 上面的公式中:n 为样本数量, y 为实际值, $\hat{y}$ 为预测值

  • RMSE 越小模型预测约准确

【了解】 三种指标的比较

我们绘制了一条直线 y = 2x +5 用来拟合 y = 2x + 5 + e. 这些数据点,其中e为噪声

从上图中我们发现 MAE 和 RMSE 非常接近,都表明模型的误差很低(MAE 或 RMSE 越小,误差越小!)。 但是MAE 和 RMSE 有什么区别?为什么MAE较低?

  • 对比MAE 和 RMSE的公式,RMSE的计算公式中有一个平方项,因此:大的误差将被平方,因此会增加 RMSE 的值

  • 可以得出结论,RMSE 会放大预测误差较大的样本对结果的影响,而 MAE 只是给出了平均误差

  • 由于 RMSE 对误差的 平方和求平均 再开根号,大多数情况下RMSE>MAE

    举例 (1+3)/2 = 2 $\sqrt{(1^2+3^2)/2 }= \sqrt{10/2} = \sqrt{5} = 2.236$

我们再看下一个例子

橙色线与第一张图中的直线一样:y = 2x +5

蓝色的点为: y = y + sin(x)*exp(x/20) + e 其中 exp() 表示指数函数

我们看到对比第一张图,所有的指标都变大了,RMSE 几乎是 MAE 值的两倍,因为它对预测误差较大的点比较敏感

我们是否可以得出结论: RMSE是更好的指标? 某些情况下MAE更有优势,例如:

  • 假设数据中有少数异常点偏差很大,如果此时根据 RMSE 选择线性回归模型,可能会选出过拟合的模型来

  • 在这种情况下,由于数据中的异常点极少,选择具有最低 MAE 的回归模型可能更合适

  • 除此之外,当两个模型计算RMSE时数据量不一致,也不适合在一起比较

【实操】波士顿房价预测案例

【知道】线性回归API

sklearn.linear_model.LinearRegression(fit_intercept=True)

  • 通过正规方程优化

  • 参数:fit_intercept,是否计算偏置

  • 属性:LinearRegression.coef_ (回归系数) LinearRegression.intercept_(偏置)

sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='constant', eta0=0.01)

  • 参数:loss(损失函数类型),fit_intercept(是否计算偏置)learning_rate (学习率)

  • 属性:SGDRegressor.coef_ (回归系数)SGDRegressor.intercept_ (偏置)

【实操】波士顿房价预测

案例背景介绍

数据介绍

给定的这些特征,是专家们得出的影响房价的结果属性。我们此阶段不需要自己去探究特征是否有用,只需要使用这些特征。到后面量化很多特征需要我们自己去寻找

案例分析

回归当中的数据大小不一致,是否会导致结果影响较大。所以需要做标准化处理。

  • 数据分割与标准化处理

  • 回归预测

  • 线性回归的算法效果评估

回归性能评估

均方误差(Mean Squared Error, MSE)评价机制:

$\Large MSE = \frac{1}{m}\sum_{i=1}^{m}(y^i-\hat{y})^2$

sklearn中的API:sklearn.metrics.mean_squared_error(y_true, y_pred)

  • 均方误差回归损失

  • y_true:真实值

  • y_pred:预测值

  • return:浮点数结果

代码实现
# 0.导包
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.metrics import mean_squared_error
​
# 1.加载数据
boston = load_boston()
# print(boston)
​
# 2.数据集划分
x_train,x_test,y_train,y_test =train_test_split(boston.data,boston.target,test_size=0.2,random_state=22)
​
# 3.标准化
process=StandardScaler()
x_train=process.fit_transform(x_train)
x_test=process.transform(x_test)
​
# 4.模型训练
# 4.1 实例化(正规方程)
# model =LinearRegression(fit_intercept=True)
model = SGDRegressor(learning_rate='constant',eta0=0.01)
# 4.2 fit
model.fit(x_train,y_train)
​
# print(model.coef_)
# print(model.intercept_)
# 5.预测
y_predict=model.predict(x_test)
​
print(y_predict)
​
# 6.模型评估
​
print(mean_squared_error(y_test,y_predict))
​
​

1.2.0 以上版本实现

# 0.导包
# from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression,SGDRegressor
from sklearn.metrics import mean_squared_error
​
# 1.加载数据
# boston = load_boston()
# print(boston)
import pandas as pd
import numpy as np
​
​
data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]
​
# 2.数据集划分
# x_train,x_test,y_train,y_test =train_test_split(boston.data,boston.target,test_size=0.2,random_state=22)
x_train,x_test,y_train,y_test =train_test_split(data,target,test_size=0.2,random_state=22)
​
# 3.标准化
process=StandardScaler()
x_train=process.fit_transform(x_train)
x_test=process.transform(x_test)
​
# 4.模型训练
# 4.1 实例化(正规方程)
# model =LinearRegression(fit_intercept=True)
model = SGDRegressor(learning_rate='constant',eta0=0.01)
# 4.2 fit
model.fit(x_train,y_train)
​
# print(model.coef_)
# print(model.intercept_)
# 5.预测
y_predict=model.predict(x_test)
​
print(y_predict)
​
# 6.模型评估
​
print(mean_squared_error(y_test,y_predict))
​
​

正则化

学习目标:

1.掌握过拟合、欠拟合的概念

2.掌握过拟合、欠拟合产生的原因

3.知道什么是正则化,以及正则化的方法

【理解】 欠拟合与过拟合

过拟合:一个假设 在训练数据上能够获得比其他假设更好的拟合, 但是在测试数据集上却不能很好地拟合数据 (体现在准确率下降),此时认为这个假设出现了过拟合的现象。(模型过于复杂)

欠拟合:一个假设 在训练数据上不能获得更好的拟合,并且在测试数据集上也不能很好地拟合数据 ,此时认为这个假设出现了欠拟合的现象。(模型过于简单)

过拟合和欠拟合的区别:

欠拟合在训练集和测试集上的误差都较大

过拟合在训练集上误差较小,而测试集上误差较大

【实践】通过代码认识过拟合和欠拟合

绘制数据

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(666)
x = np.random.uniform(-3,3,size = 100)
# 线性回归模型需要二维数组
X = x.reshape(-1,1)
​
y = 0.5* x**2 + x+2 +np.random.normal(0,1,size = 100)
​
from sklearn.linear_model import LinearRegression
estimator = LinearRegression()
estimator.fit(X,y)
y_predict = estimator.predict(X)
​
plt.scatter(x,y)
plt.plot(x,y_predict,color = 'r')
plt.show()
 
#计算均方误差
from sklearn.metrics import mean_squared_error
mean_squared_error(y,y_predict)
​
#3.0750025765636577

添加二次项,绘制图像

X2 = np.hstack([X,X**2])
estimator2 = LinearRegression()
estimator2.fit(X2,y)
y_predict2 = estimator2.predict(X2)
​
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict2[np.argsort(x)],color = 'r')
plt.show()
 
#计算均方误差和准确率
​
from sklearn.metrics import mean_squared_error
mean_squared_error(y,y_predict2)
​
#1.0987392142417858

再次加入高次项,绘制图像,观察均方误差结果

X5 = np.hstack([X2,X**3,X**4,X**5,X**6,X**7,X**8,X**9,X**10])
​
estimator3 = LinearRegression()
estimator3.fit(X5,y)
y_predict5 = estimator3.predict(X5)
​
plt.scatter(x,y)
plt.plot(np.sort(x),y_predict5[np.argsort(x)],color = 'r')
plt.show()
​
error = mean_squared_error(y, y_predict5)
error
​
#1.0508466763764157

通过上述观察发现,随着加入的高次项越来越多,拟合程度越来越高,均方误差也随着加入越来越小。说明已经不再欠拟合了。

问题:如何判断出现过拟合呢?

将数据集进行划分:对比X、X2、X5的测试集的均方误差

X的测试集均方误差

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 5)
estimator = LinearRegression()
estimator.fit(X_train,y_train)
y_predict = estimator.predict(X_test)
​
mean_squared_error(y_test,y_predict)
#3.153139806483088

X2的测试集均方误差

X_train,X_test,y_train,y_test = train_test_split(X2,y,random_state = 5)
estimator = LinearRegression()
estimator.fit(X_train,y_train)
y_predict = estimator.predict(X_test)
mean_squared_error(y_test,y_predict)
#1.111873885731967

X5的测试集的均方误差

X_train,X_test,y_train,y_test = train_test_split(X5,y,random_state = 5)
estimator = LinearRegression()
estimator.fit(X_train,y_train)
y_predict = estimator.predict(X_test)
mean_squared_error(y_test,y_predict)
#1.4145580542309835

【理解】 原因以及解决办法

欠拟合产生原因: 学习到数据的特征过少

解决办法:

1)添加其他特征项,有时出现欠拟合是因为特征项不够导致的,可以添加其他特征项来解决

2)添加多项式特征,模型过于简单时的常用套路,例如将线性模型通过添加二次项或三次项使模型泛化能力更强

过拟合产生原因: 原始特征过多,存在一些嘈杂特征, 模型过于复杂是因为模型尝试去兼顾所有测试样本

解决办法:

1)重新清洗数据,导致过拟合的一个原因有可能是数据不纯,如果出现了过拟合就需要重新清洗数据。

2)增大数据的训练量,还有一个原因就是我们用于训练的数据量太小导致的,训练数据占总数据的比例过小。

3)正则化

4)减少特征维度

【理解】正则化

在解决回归过拟合中,我们选择正则化。但是对于其他机器学习算法如分类算法来说也会出现这样的问题,除了一些算法本身作用之外(决策树、神经网络),我们更多的也是去自己做特征选择,包括之前说的删除、合并一些特征

如何解决?

在学习的时候,数据提供的特征有些影响模型复杂度或者这个特征的数据点异常较多,所以算法在学习的时候尽量减少这个特征的影响(甚至删除某个特征的影响),这就是正则化

注:调整时候,算法并不知道某个特征影响,而是去调整参数得出优化的结

L1正则化
  • 假设𝐿(𝑊)是未加正则项的损失,𝜆是一个超参,控制正则化项的大小。

  • 则最终的损失函数:$𝐿=𝐿(𝑊)+ \lambda*\sum_{i=1}^{n}\lvert w_i\rvert$

作用:用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解,可以将0对应的特征遗弃,进而用来选择特征。一定程度上L1正则也可以防止模型过拟合。

L1正则为什么可以产生稀疏解(可以特征选择)

稀疏性:向量中很多维度值为0

  • 对其中的一个参数 $ w_i $ 计算梯度,其他参数同理,α是学习率,sign(wi)是符号函数。

L1的梯度:

$𝐿=𝐿(𝑊)+ \lambda*\sum_{i=1}^{n}\lvert w_i\rvert$

$\frac{\partial L}{\partial w{i}} = \frac{\partial L(W)}{\partial w{i}}+\lambda sign(w_{i})$

LASSO回归: from sklearn.linear_model import Lasso

L2正则化
  • 假设𝐿(𝑊)是未加正则项的损失,𝜆是一个超参,控制正则化项的大小。

  • 则最终的损失函数:$𝐿=𝐿(𝑊)+ \lambda*\sum{i=1}^{n}w{i}^{2}$

作用:主要用来防止模型过拟合,可以减小特征的权重

优点:越小的参数说明模型越简单,越简单的模型则越不容易产生过拟合现象

Ridge回归: from sklearn.linear_model import Ridge

正则化案例
X10 = np.hstack([X2,X**3,X**4,X**5,X**6,X**7,X**8,X**9,X**10]) 
estimator3 = LinearRegression() 
estimator3.fit(X10,y) 
y_predict3 = estimator3.predict(X10) 
​
plt.scatter(x,y) 
plt.plot(np.sort(x),y_predict3[np.argsort(x)],color = 'r') 
plt.show()
​
estimator3.coef_
​
array([ 1.32292089e+00,  2.03952017e+00, -2.88731664e-01, -1.24760429e+00,8.06147066e-02,  3.72878513e-01, -7.75395040e-03, -4.64121137e-02,1.84873446e-04,  2.03845917e-03])

 

from sklearn.linear_model import Lasso  # L1正则
from sklearn.linear_model import Ridge  # 岭回归 L2正则
​
X10 = np.hstack([X2,X**3,X**4,X**5,X**6,X**7,X**8,X**9,X**10]) 
estimator_l1 = Lasso(alpha=0.005,normalize=True) # 调整alpha 正则化强度 查看正则化效果
estimator_l1.fit(X10,y) 
y_predict_l1 = estimator_l1.predict(X10) 
​
plt.scatter(x,y) 
plt.plot(np.sort(x),y_predict_l1[np.argsort(x)],color = 'r') 
plt.show()
​
estimator_l1.coef_  # Lasso 回归  L1正则 会将高次方项系数变为0
​
array([ 0.97284077,  0.4850203 ,  0.        ,  0.        , -0.        ,0.        , -0.        ,  0.        , -0.        ,  0.        ])

 

X10 = np.hstack([X2,X**3,X**4,X**5,X**6,X**7,X**8,X**9,X**10]) 
estimator_l2 = Ridge(alpha=0.005,normalize=True) # 调整alpha 正则化强度 查看正则化效果
estimator_l2.fit(X10,y) 
y_predict_l2 = estimator_l2.predict(X10) 
​
plt.scatter(x,y) 
plt.plot(np.sort(x),y_predict_l2[np.argsort(x)],color = 'r') 
plt.show()
​
estimator_l2.coef_   # l2 正则不会将系数变为0 但是对高次方项系数影响较大
​
array([ 9.91283840e-01,  5.24820573e-01,  1.57614237e-02,  2.34128982e-03,7.26947948e-04, -2.99893698e-04, -8.28333499e-05, -4.51949529e-05,-4.21312015e-05, -8.22992826e-07])

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

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

相关文章

React复习

文章目录 常用的HooksuseStateuseReduceruseRefuseContextuseMemouseCallbackuseEffect 组件通信Props(属性)Ref(引用)Context(上下文)State(状态)回调函数Event Bus(事件…

计算机网络面试题——第三篇

1. TCP超时重传机制是为了解决什么问题 因为TCP是一种面向连接的协议,需要保证数据可靠传输。而在数据传输过程中,由于网络阻塞、链路错误等原因,数据包可能会丢失或者延迟到达目的地。因此,若未在指定时间内收到对方的确认应答&…

protobufJavascrip编码解码演示

protobuf&Javascrip编码解码演示 start 写一下 protobuf 相关知识记录在 python 环境和 js 环境中如何处理 protobuf。 1. protobuf是什么? 1.1 介绍 Protocol Buffers(简称Protobuf) ,是Google出品的序列化框架,与开发语言无关&…

【数据结构】邻接表

一、概念 邻接表是一个顺序存储与链式存储相结合的数据结构,用于描述一个图中所有节点之间的关系。 若是一个稠密图,我们可以选择使用邻接矩阵;但当图较稀疏时,邻接矩阵就显得比较浪费空间了,此时我们就可以换成邻接…

JavaSE——认识异常

1.概念 在生活中,人有时会生病,在程序中也是一样,程序猿是一帮办事严谨、追求完美的高科技人才。在日常开发中,绞尽脑汁将代码写的尽善尽美,在程序运行过程中,难免会出现一些奇奇怪怪的问题。有时通过代码很…

【Unity】Unity中接入Admob聚合广告平台,可通过中介接入 AppLovin,Unity Ads,Meta等渠道的广告

一、下载Google Admob的SDK插件 到Google Admob官网中,切换到Unity平台 进来之后是这样,注意后面有Unity标识,然后点击下载,跳转到github中,下载最新的Admob插件sdk,导入到Unity中 二、阅读官方文档&…

【Linux】Screen的使用:新建、退出、再登陆

Linux screen 命令详解与使用指南 在Linux系统中,screen 是允许用户在单个终端会话中运行多个进程,并能在会话之间切换。 适用情况:screen 特别适用于远程登录(如通过SSH)时,确保即使网络连接断开&#x…

国产化ERP是什么?与SAP相比有何优势所在?

前段时间和一个工厂老板聊起来,他正为公司的 ERP 系统发愁呢。他们企业现在用的系统有点跟不上发展节奏了,在考虑换新的。但到底是继续选国际大牌 SAP 呢,还是试试国产化的 ERP 呢?这可真是个难题。这也不是他一家企业的困扰&…

如何通过钢筋计来优化施工安全

在现代建筑工程中,施工安全一直是首要关注的问题。特别是在高层建筑、桥梁和地下工程等复杂结构中,确保钢筋的正确安装和稳定性能,直接关系到工程的整体安全性和耐久性。钢筋计作为一种专门用于测量和监测钢筋应力和应变的设备,其…

使用node+prisma+socket+vue3实现一个群聊功能,拓展功能:使用lottie实现入场动画

使用nodeprisma和vue3实现一个群聊功能 后端代码编写 node环境初始化 新建一个空文件夹node,初始化node环境 npm init -y修改 packages.json,添加 type 为 module,删除 main {"name": "node","version": …

【C语言复习】分支和循环

【C语言复习】分支和循环 1. if语句1.1 if1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2.关系操作符3. 条件操作符4.逻辑操作符:&& 、|| 、!4.1 逻辑取反运算符4.2 与运算符4.3或运算符4.4 练习:闰年的判断4.5短路 5.switch 语句5.1…

python爬虫 - 进阶正则表达式

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、匹配中文 (一)匹配单个中文字符 (二…

Java项目实战II基于Java+Spring Boot+MySQL的服装销售平台(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今数字…

uniapp-小程序开发0-1笔记大全

uniapp官网: https://uniapp.dcloud.net.cn/tutorial/syntax-js.html uniapp插件市场: https://ext.dcloud.net.cn/ uviewui类库: https://www.uviewui.com/ 柱状、扇形、仪表盘库: https://www.ucharts.cn/v2/#/ CSS样式&…

硬件开发笔记(三十一):TPS54331电源设计(四):PCB布板12V转5V电路、12V转3.0V和12V转4V电路

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/142757509 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

ansible 流程控制

目录 1.流程控制 2.handlers触发器 2.1使用handlers案例 3.when 判断 3.1 案例1 用于给task设置条件 满足或者不满足运行对应模块 3.2 案例2 如果系统是centos则安装sl,cowsay 如果是unbantu则安装cmatrix 4.循环 4.1案例 1.流程控制 hand…

Git客户端使用之TortoiseGit和Git

git客户端有两个分别是TortoiseGit和Git Git用于命令行TortoiseGit用于图形界面。无论是Git还是TortoisGit都需要生成公/私钥与github/gitlab建立加密才能使用。 一、先介绍Git的安装与使用 1、下载与安装 安装Git-2.21.0-64-bit.exe(去官网下载最新版64位的),安…

SpringMVC2~~~

目录 数据格式化 基本数据类型可以和字符串自动转换 特殊数据类型和字符串间的转换 验证及国际化 自定义验证错误信息 细节 数据类型转换校验核心类DataBinder 工作机制 取消某个属性的绑定 中文乱码处理 处理json和HttpMessageConverter 处理Json-ResponseBody 处理…

Python精选200Tips:186-190

针对序列(时间、文本)数据的网络结构 续 P186-- 双向LSTM(Bidirectional Long Short-Term Memory 2005)(1)模型结构说明(2)创新性说明(3)示例代码:IMDB电影评论情感分析 …

通义灵码 Visual Studio 下载安装指南(附安装包)

文章目录 前言一、下载和安装指南方法 1:从插件市场安装方法 2:下载安装包安装方法 3:登录并开启智能编码之旅 二、使用指南总结 前言 通义灵码是基于通义大模型的智能编程辅助工具,它提供了多种强大的功能,旨在助力开…