网站制作报价优惠,怎么制作网址,外贸没有公司 如何做企业网站,欧美化妆品网站模板下载Author#xff1a;AXYZdong 硕士在读 工科男 有一点思考#xff0c;有一点想法#xff0c;有一点理性#xff01; 定个小小目标#xff0c;努力成为习惯#xff01;在最美的年华遇见更好的自己#xff01; CSDNAXYZdong#xff0c;CSDN首发#xff0c;AXYZdong原创 唯… AuthorAXYZdong 硕士在读 工科男 有一点思考有一点想法有一点理性 定个小小目标努力成为习惯在最美的年华遇见更好的自己 CSDNAXYZdongCSDN首发AXYZdong原创 唯一博客更新的地址为 AXYZdong的博客 B站主页为AXYZdong的个人主页 AI专栏
⭐⭐⭐【AI常用框架和工具】点击跳转 包括常用工具Numpy、Pandas、Matplotlib常用框架Keras、TensorFlow、PyTorch。理论知识结合代码实例常用工具库结合深度学习框架适合AI的初学者入门。 文章目录 AI专栏 1 线性回归算法原理1.1 一元线性回归的算法过程1.2 多元线性回归 2 线性回归算法优化2.1 求解多元回归的系数2.2 过拟合问题解决方法2.3 线性回归的模型评估方法 3 线性回归代码实现3.1 一元线性回归Python底层实现3.2 多元线性回归的实现3.3 线性回归第三方库实现 1 线性回归算法原理
1.1 一元线性回归的算法过程 首先确定目标:尽可能地拟合样本数据集即使误差最小化。带着这个思想去寻找我们的损失函数。 由于误差服从高斯分布 p ( ε i ) 1 2 π σ exp ( − ε i 2 2 σ 2 ) p\left(\varepsilon_i\right)\frac{1}{\sqrt{2 \pi }\sigma} \exp \left(-\frac{\varepsilon_i^2}{2 \sigma^2}\right) p(εi)2π σ1exp(−2σ2εi2) 将误差函数带入上式 P ( y i ∣ x i ; w ) 1 2 π σ exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) P\left(y_i \mid x_i ; w\right)\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right) P(yi∣xi;w)2π σ1exp(−2σ2(yi−(ωXib))2) 似然函数: L ( w ) Π i 1 m 1 2 π σ exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) L(w)\Pi_{i1}^m \frac{1}{\sqrt{2 \pi }\sigma} \exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right) L(w)Πi1m2π σ1exp(−2σ2(yi−(ωXib))2) 为了方便计算转化为对数似然 log L ( w ) log Π i 1 m 1 2 π σ exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) \log L(w)\log \Pi_{i1}^m \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right) logL(w)logΠi1m2π σ1exp(−2σ2(yi−(ωXib))2) 展开化简 l ( ω ) log Π i 1 m 1 2 π σ exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) ∑ i 1 m log 1 2 π σ exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) ∑ i 1 m log 1 2 π σ ∑ i 1 m log ( exp ( − ( y i − ( ω X i b ) ) 2 2 σ 2 ) ) m log 1 2 π σ − ∑ i 1 m ( y i − ( ω X i b ) ) 2 2 σ 2 m log 1 2 π σ − 1 σ 2 1 2 ∑ i 1 m ( y i − ( ω X i b ) ) 2 \begin{align*} l(\omega) \log \Pi_{i1}^m \frac{1}{\sqrt{2 \pi }\sigma} \exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right)\\[2ex] \sum_{i1}^{m}\log \frac{1}{\sqrt{2 \pi }\sigma}\exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right)\\[2ex] \sum_{i1}^{m}\log \frac{1}{\sqrt{2 \pi }\sigma}\sum_{i1}^{m}\log\left(\exp \left(-\frac{\left(y_i-\left(\omega X_ib\right)\right)^2}{2 \sigma^2}\right)\right)\\[2ex] m\log \frac{1}{\sqrt{2\pi \sigma}}-\sum_{i1}^{m}\frac{(y_i-(\omega X_ib))^2}{2 \sigma^2}\\[2ex] m\log \frac{1}{\sqrt{2\pi \sigma}}-\frac{1}{\sigma ^2}\frac{1}{2}\sum_{i1}^{m}(y_i-(\omega X_ib))^2 \end{align*} l(ω)logΠi1m2π σ1exp(−2σ2(yi−(ωXib))2)i1∑mlog2π σ1exp(−2σ2(yi−(ωXib))2)i1∑mlog2π σ1i1∑mlog(exp(−2σ2(yi−(ωXib))2))mlog2πσ 1−i1∑m2σ2(yi−(ωXib))2mlog2πσ 1−σ2121i1∑m(yi−(ωXib))2 根据极大似然估计的思想目标函数为 J ( ω ) ∑ i 1 m ( y i − ( ω X i b ) ) 2 J(\omega)\sum_{i1}^{m}(y_i-(\omega X_ib))^2 J(ω)i1∑m(yi−(ωXib))2
此损失函数又称为最小二乘损失函数。因此现在目标变化为求得 ω \omega ω 和 b b b 使我们的目标函数最小化。
1.2 多元线性回归
多元线性回归因为需要考虑两个或两个以上的自变量我们的假设(Hypothesis)方程可以表示为 h θ ( X ) θ 0 θ 1 x 1 θ 2 x 2 . . . . . . h_\theta (X)\theta_0\theta_1x_1\theta_2x_2...... hθ(X)θ0θ1x1θ2x2......
为了表示方便我们定义一个额外的变量 X 0 1 X_01 X01 此 X 0 X_0 X0 是一个 n 1 n1 n1 维的向量 h θ ( X ) 1 2 ∑ i 0 n θ i x i θ T X h_\theta (X)\frac{1}{2}\sum_{i0}^{n}\theta_i x_i\theta^T X hθ(X)21i0∑nθixiθTX
因此我们的目标函数可以表示为 J ( θ ) 1 2 ∑ i 0 m ( θ T x i − y i ) 2 1 2 ( X θ − y ) T ( X θ − y ) J(\theta)\frac{1}{2}\sum_{i0}^{m}(\theta ^T x_i-y_i)^2\frac{1}{2}(X\theta-y)^T(X\theta-y) J(θ)21i0∑m(θTxi−yi)221(Xθ−y)T(Xθ−y)
2 线性回归算法优化
2.1 求解多元回归的系数
正规方程 最小二乘法梯度下降 批量梯度下降 Batch Gradient DescentBGD 每更新一次权重需要对所有的数据样本点进行遍历。在最小化损失函数的过程中需要不断的反复地更新权重使得误差函数减小; 特点是每一次参数的更新都用到了所有的训练数据因此BGD优化方法会非常耗时且样本数据量越大训练速度也会变得越慢。随机梯度下降 Stochastic Gradient Descent, SGD 解决BGD训练速度过慢的问题随机选取每个样本的损失函数对目标函数变量求偏导得到对应的梯度来更新目标函数变量。 因为随机梯度下降是随机选择一个样本进行选代更新一次所以SGD伴随噪音较BGD要多使得SGD并不是每次迭代都向着整体优化方向。小批量梯度下降 Mini-Batch Gradient DescentMBGD 避免BGD和SGD的缺点算法训练过程较快也保证最终参数训练的准确率。通过增加每次迭代个数来实现的相当于一个Batch通过矩阵运算每一个batch上优化参数不会比单个数据慢太多。但每次使用一个batch可大大减小收敛所需要的迭代次数同时可以使收敛到的结果更接近梯度下降的效果。
2.2 过拟合问题解决方法
建立的线性回归模型虽然在训练集上表现得很好但是在测试集中表现得恰好相反同样在测试集上的损失函数会表现得很大。为了解决过拟合我们引入了正则项。
L1正则化是指权值向量中各个元素的绝对值之和通常表示为 J ( q ) ∑ i 0 m ( h q ( x ( i ) ) − y ( i ) ) 2 l ∑ j 1 n ∣ q j ∣ ( l 0 ) J(q)\sum_{i0}^{m}(h_q(x^{(i)})-y^{(i)})^2l\sum_{j1}^{n}|q_j| \quad (l0) J(q)i0∑m(hq(x(i))−y(i))2lj1∑n∣qj∣(l0)
L2正则化是指权值向量中各个元素的平方和通常表示为 J ( θ ) ∑ i 0 m ( h θ ( x ( i ) ) − y ( i ) ) 2 λ ∑ j 1 n θ j 2 ( λ 0 ) J(\theta)\sum_{i0}^{m}(h_\theta(x^{(i)})-y^{(i)})^2\lambda\sum_{j1}^{n}\theta_j^2 \quad (\lambda0) J(θ)i0∑m(hθ(x(i))−y(i))2λj1∑nθj2(λ0)
2.3 线性回归的模型评估方法
均方误差MSEMean Squared Error均方误差是指所有观测值和预测值之间的平方和的平均数它反映了模型预测误差的大小。MSE越小说明模型拟合效果越好。 M S E 1 m ∑ i 1 m ( y i − y ^ i ) 2 MSE\frac{1}{m}\sum_{i1}^{m}(y_i-\hat{y}_i)^2 MSEm1i1∑m(yi−y^i)2
均方根误差RMSERoot Mean Squarde Error R M S E 1 m ∑ i 1 m ( y i − y ^ i ) 2 RMSE\sqrt{\frac{1}{m}\sum_{i1}^{m}(y_i-\hat{y}_i)^2} RMSEm1i1∑m(yi−y^i)2
平均绝对误差MAEMean Absolute Error M A E 1 m ∑ i 1 m ∣ y i − y ^ i ∣ MAE\frac{1}{m}\sum_{i1}^{m}|y_i-\hat{y}_i| MAEm1i1∑m∣yi−y^i∣ R 2 R^2 R2 R 2 S S R S S T ∑ ( y ^ i − y ‾ ) 2 ∑ ( y i − y ‾ ) 2 R^2\frac{SSR}{SST}\frac{\sum(\hat{y}_i-\overline{y})^2}{\sum(y_i-\overline{y})^2} R2SSTSSR∑(yi−y)2∑(y^i−y)2
3 线性回归代码实现
3.1 一元线性回归Python底层实现
# 一元线性回归的实现#导入matplotlib库主要用于可视化
import matplotlib.pyplot as plt
%matplotlib inline#引入本地字体文件否则中文会有乱码
#font_set FontProperties(fnamer./work/ simsun.ttc, size12)
from matplotlib.font_manager import FontProperties
import numpy as np# 构造用于训练的数据集
x_train [4,8,5,10,12]
y_train [20,50,30,70,60]# 画图函数
def draw(x_train,y_train):plt.scatter(x_train, y_train)# 定义函数求得斜率w和截距b
# 使用最小二乘法对斜率和截距求导并使得导数值等于0求解出斜率和截距
def fit(x_train,y_train): size len(x_train)numerator 0 #初始化分子denominator 0#初始化分母for i in range(size):numerator (x_train[i]-np.mean(x_train))*(y_train[i]-np.mean(y_train)) denominator (x_train[i]-np.mean(x_train))**2w numerator/denominatorb np.mean(y_train)-w*np.mean(x_train)return w,b#根据斜率w和截距b输入x计算输出值
def predict(x,w,b): #预测模型y w*xbreturn y# 根据W,B画图
def fit_line(w,b):
#测试集进行测试并作图x np.linspace(4,15,9) #linspace 创建等差数列的函数 #numpy.limspace(start,stop,num,endpointTrue,retstepFalse,dtypeNone,axis0#) y w*xbplt.plot(x,y)plt.show()if __name__ __main__:draw(x_train,y_train)w,b fit(x_train,y_train)print(w,b) #输出斜率和截距
fit_line(w,b) #绘制预测函数图像3.2 多元线性回归的实现
# 多元线性回归的实现
# 导入模块
import numpy as np
import pandas as pd# 构造数据前三列表示自变量X最后一列表示因变量Y
data np.array([[3,2,9,20],[4,10,2,72],[3,4,9,21],[12,3,4,20]])
print(data:,data,\n)Xdata[:,:-1]
Ydata[:,-1]Xnp.mat(np.c_[np.ones(X.shape[0]),X])# 为系数矩阵增加常数项系数
Ynp.mat(Y)# 数组转化为矩阵print(X:,X,\n)
print(Y:,Y,\n)# 根据最小二乘法的目标函数求导为0得到最优参数向量B的解析解公式如下可以直接求取最优参数向量
Bnp.linalg.inv(X.T*X)*(X.T)*(Y.T)
print(B:,B,\n)# 输出系数,第一项为常数项其他为回归系数
print(1,60,60,60预测结果,np.mat([1,60,60,60])*B,\n)#预测结果# 相关系数
Q_e0
Q_E0
Y_meannp.mean(Y)
for i in range(Y.size):Q_epow(np.array((Y.T)[i]-X[i]*B),2)Q_Epow(np.array(X[i]*B)-Y_mean,2)
R2Q_E/(Q_eQ_E)
print(R2,R2)
3.3 线性回归第三方库实现
# 导入sklearn下的LinearRegression 方法
from sklearn.linear_model import LinearRegression
import numpy as np
model LinearRegression()# 构造用于训练的数据集
x_train np.array([[2,4],[5,8],[5,9],[7,10],[9,12]])
y_train np.array([20,50,30,70,60])# 训练模型并输出模型系数和训练结果
model.fit(x_train,y_train)
#fit(x,y,sample_weightNone)x:训练集 y:目标值 sample_weight:每个样本的个数
#coef_ 系数w,intercept_截距
print(model.coef_) #输出系数w
print(model.intercept_) #输出截距b
print(model.score(x_train,y_train)) #输出模型的评估分数R2Reference
[1] https://connect.huaweicloud.com/courses/learn/Learning/sp:cloudEdu_?courseNocourse-v1:HuaweiXCBUCNXE086Self-pacedcourseType1[2] https://authoring-modelarts-cnnorth4.huaweicloud.com/console/lab?share-url-b64aHR0cHM6Ly9tb2RlbGFydHMtbGFicy1iajQtdjIub2JzLmNuLW5vcnRoLTQubXlodWF3ZWljbG91ZC5jb20vY291cnNlL2h3Y19lZHUvbWFjaGluZV9sZWFybmluZy9mb3JfaHdjX2VkdS9MaW5lYXJfUmVncmVzc2lvbl9od2NfZWR1LmlweW5i
—— END —— 如果以上内容有任何错误或者不准确的地方欢迎在下面 留言。或者你有更好的想法欢迎一起交流学习~~~
更多精彩内容请前往 AXYZdong的博客