机器学习10—多元线性回归模型

article/2025/10/8 22:13:44

多元线性回归模型statsmodelsols

  • 前言
    • 什么是多元线性回归分析预测法
  • 一、多元线性回归
  • 二、多元线性回归模型求解
    • 2.1最小二乘法实现参数估计—估计自变量X的系数
    • 2.2决定系数:R² 与调整后 R²
    • 2.3F检验参数
    • 2.4对数似然、AIC与BIC
    • 2.5回归系数标准差
    • 2.6回归系数的显著性t检验
  • 三、多元线性回归问题TensorFlow实践(波士顿房价预测)
  • 总结


前言

什么是多元线性回归分析预测法

在市场的经济活动中,经常会遇到某一市场现象的发展和变化取决于几个影响因素的情况,也就是一个因变量和几个自变量有依存关系的情况。而且有时几个影响因素主次难以区分,或者有的因素虽属次要,但也不能略去其作用。例如,某一商品的销售量既与人口的增长变化有关,也与商品价格变化有关。这时采用一元回归分析预测法进行预测是难以奏效的,需要采用多元回归分析预测法。

多元回归分析预测法,是指通过对两个或两个以上的自变量与一个因变量的相关分析,建立预测模型进行预测的方法。当自变量与因变量之间存在线性关系时,称为多元线性回归分析。


一、多元线性回归

一元线性回归是一个主要影响因素作为自变量来解释因变量的变化,但是在现实问题研究中,因变量的变化往往受几个重要因素的影响,此时就需要用两个或两个以上的影响因素作为自变量来解释因变量的变化,这就是多元回归亦称多重回归。当多个自变量与因变量之间是线性关系时,所进行的回归分析就是多元线性回归。

设y为因变量, Alt为自变量,并且自变量与因变量之间为线性关系时,则多元线性回归模型为:
在这里插入图片描述
其中,b0为常数项b_1,b_2,\cdots b_k回归系数,b1为 x_2,x_3\cdots x_k 固定时,x1 每增加一个单位对 y 的效应,即 x1 对 y 的偏回归系数;同理 b2 为 x1, xk 固定时,x2每增加一个单位对y的效应,故有 x2 对 y 的偏回归系数。如果两个自变量 x1,x2 同一个因变量y呈线性相关时,可用二元线性回归模型描述为:
在这里插入图片描述
在建立多元性回归模型时,为了保证回归模型具有优秀的解释能力和预测效果,应首先注意自变量的选择,其准则是:

  • (1)自变量对因变量必须有显著的影响,并呈密切的线性相关

  • (2)自变量与因变量之间的线性相关必须是真实的,而不是形式上的;

  • (3)自变量之间具有一定的互斥性,即自变量之间的相关程度不能高于自变量与因变量之间的相关程度;

  • (4)自变量应具有完整的统计数据,其预测值容易确定

多元性回归模型的参数估计,同一元线性回归方程一样,也是在要求误差平方和(\sum e^2)为最小的前提下,用最小二乘法求解参数。
用二元线性回归模型来求解回归参数的标准参数方程组为:
在这里插入图片描述

二、多元线性回归模型求解

多元线性回归模型的主要作用:(主要用于预测)通过建模来拟合我们所提供的或是收集到的这些因变量和自变量的数据,收集到的数据拟合之后来进行参数估计。参数估计的目的主要是来估计出模型的偏回归系数的值。估计出来之后就可以再去收集新的自变量的数据去进行预测,也称为样本量。

多元线性回归模型:
在这里插入图片描述
回归模型算法实现:

import pandas as pd
import numpy as np
import statsmodels.api as sm# 实现了类似于二元中的统计模型,比如ols普通最小二乘法
import statsmodels.stats.api as sms#实现了统计工具,比如t检验、F检验...
import statsmodels.formula.api as smf
import scipynp.random.seed(991)# 随机数种子# np.random.normal(loc=0.0, scale=1.0, size=None)
# loc:float  此概率分布的均值(对应着整个分布的中心),loc=0说明这一个以Y轴为对称轴的正态分布,
# scale:float 此概率分布的标准差(对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高)
# size:int or tuple of ints  输出的shape,默认为None,只输出一个值
# 数据生成
x1 = np.random.normal(0,0.4,100)# 生成符合正态分布的随机数(均值为0,标准差0.4,所生成随机数的个数为100)
x2 = np.random.normal(0,0.6,100)
x3 = np.random.normal(0,0.2,100)
eps = np.random.normal(0,0.05,100)# 生成噪声数据,保证后面模拟所生成的因变量的数据比较接近实际的环境X = np.c_[x1,x2,x3]# 调用c_函数来生成自变量的数据的矩阵,按照列进行生成的;100×3的矩阵
beta = [0.1,0.2,0.7]# 生成模拟数据时候的系数的值
y = np.dot(X,beta) + eps# 点积+噪声(dot是表示乘)
X_model = sm.add_constant(X)# add_constant给矩阵加上一列常量1,便于估计多元线性回归模型的截距,也是便于后面进行参数估计时的计算
model = sm.OLS(y,X_model)# 调用OLS普通最小二乘法来求解
# 下面是进行参数估计,参数估计的主要目的是估计出回归系数,根据参数估计结果来计算统计量,
# 这些统计量主要的目的就是对我们模型的有效性或是显著性水平来进行验证。
results = model.fit()# fit拟合
results.summary()# summary方法主要是为了显示拟合的结果

OLS 回归结果:
在这里插入图片描述

2.1最小二乘法实现参数估计—估计自变量X的系数

回归系数的计算:X转置(T)乘以X,对点积求逆后,再点乘X转置,最后点乘y

beta_hat = np.dot(np.dot(np.linalg.inv(np.dot(X_model.T,X_model)),X_model.T),y)# 回归系数
print('回归系数:',np.round(beta_hat,4))# 四舍五入取小数点后4位
print('回归方程:Y_hat=%0.4f+%0.4f*X1+%0.4f*X2+%0.4f*X3' % (beta_hat[0],beta_hat[1],beta_hat[2],beta_hat[3]))

输出为:

回归系数: [-0.0097  0.0746  0.2032  0.7461]
回归方程:Y_hat=-0.0097+0.0746*X1+0.2032*X2+0.7461*X3

代码讲解:
在这里插入图片描述

2.2决定系数:R² 与调整后 R²

决定系数R² 主要作用是:检验回归模型的显著性

# 因变量的回归值=np.dot(X_model,系数向量)
y_hat = np.dot(X_model,beta_hat)# 回归值(拟合值)的计算
y_mean = np.mean(y)          # 求因变量的平均值sst = sum((y-y_mean)**2)     # 总平方和:即y减去y均值后差的平方和
ssr = sum((y_hat-y_mean)**2) # 回归平方和: y回归值减去y均值后差的平方和
sse = sum((y-y_hat)**2)      # 残差平方和: y值减去y回归值之差的平方和
# sse = sum(results.resid**2) # 结果和上面注释了的式子一样,或许有小数点的误差,但基本上可忽略不计R_squared =1 - sse/sst # R²:1减去残差平方和除以总平方和商的差;求解方法二:R²=ssr/sst
# 按照线性回归模型原理来说:[残差平方和+回归平方和=总平方和]→[R²=ssr/sst]
print('R²:',round(R_squared,3)) 
# 调整后平方和:100表示样本数据总数(n),3表示自变量个数(p)
adjR_squared =1- (sse/(100-3-1))/(sst/(100-1)) # 1-(残差的平方和/残差的自由度)/(总平方和/无偏估计),式子开头为常数-1
# 残差的自由度也是残差方差的无偏估计
print('调整后R²:',round(adjR_squared,3))

输出为:

: 0.931
调整后R²: 0.929

说明:
在这里插入图片描述

2.3F检验参数

F显著性检验:
在这里插入图片描述

F = (ssr/3)/(sse/(100-3-1));
print('F统计量:',round(F,1))
# 累积分布函数叫cdf(),调用方法和下面残差函数调用方法一样;注意:cdf+sf算出来的值为1
F_p = scipy.stats.f.sf(F,3,96)# 使用F分布的残存函数计算P值;sf是残存函数英语单词的缩写;3和96分别是两个自由度
print('F统计量的P值:', F_p)

输出为:

F统计量: 432.6
F统计量的P值: 1.2862966484214766e-55

说明:

  • 若假设的检验的P值越小,表示的显著性水平就越高。也就是说拒绝原假设H0,接受备选假设H1。

2.4对数似然、AIC与BIC

# 对数似然值计算公式: L=-(n/2)*ln(2*pi)-(n/2)*ln(sse/n)-n/2;sse/n就是方差
res = results.resid# 残差(sse = sum(results.resid**2) 惨差平方和)
# 可以写成res = y-y_hat
sigma_res = np.std(res)  # 残差标准差
var_res = np.var(res)   # 残差方差L = -(100/2)*np.log(2*np.pi)-(100/2)*np.log(var_res)-100/2
print('对数似然为:', round(ll,2))# 保留两位小数
# 赤池信息准则:-2乘以对数似然比+2*(参数个数+1)。
# −2ln(L)+2(p+1)(赤池弘次),其中p为参数个数,ln(L)即L
AIC  = -2*L + 2*(3+1)
print('AIC为:',round(AIC,1))
# 贝叶斯信息准则:−2ln(L)+ln(n)∗(p+1),其中ln(L)即Lr
BIC = -2*L+np.log(100)*(3+1) 
print('BIC为:',round(BIC,1))

输出为:

对数似然为: 152.69
AIC为: -297.4
BIC为: -287.0
  • AIC和BIC越小越好。

2.5回归系数标准差

回归系数标准差为:
在这里插入图片描述

from  scipy.stats import t,fC = np.linalg.inv(np.dot(X_model.T,X_model))# X倒置点乘X,然后对点集求逆
C_diag = np.diag(C)# 取出C矩阵对角线的值
sigma_unb= (sse/(100-3-1))**(1/2)# 残差标准差的无偏估计:残差平方和/(样本数减参数个数减1)
'''
回归系数标准差std err的计算:
计算方式:残差标准差(无偏估计)乘以(C矩阵对角线上对应值的平方根)
'''
# 标准差
stdderr_const = sigma_unb*(C_diag[0]**(1/2))# 常数项(截距)的标准差,对应C_diag[0]
print('常数项(截距)的标准差:',round(stdderr_const,3))
stderr_x1 = sigma_unb*(C_diag[1]**(1/2))# 第一个系数对应C_diag[1]
print('beta1的标准差:',round(stderr_x1,3))
stderr_x2 = sigma_unb*(C_diag[2]**(1/2))# 第二个系数对应C_diag[2]
print('beta2的标准差:',round(stderr_x2,3))
stderr_x3 = sigma_unb*(C_diag[3]**(1/2))# 第三个系数对应C_diag[3]
print('beta3的标准差:',round(stderr_x3,3))
# 矩阵
print('C矩阵:\n', C)
print('\nC矩阵的对角线元素:',C_diag)

输出标准差为:

常数项(截距)的标准差: 0.005
beta1的标准差: 0.015
beta2的标准差: 0.009
beta3的标准差: 0.03

输出矩阵为:

C矩阵:[[ 1.02054345e-02  1.95714789e-03 -8.54037508e-05 -6.90581790e-03][ 1.95714789e-03  7.92625905e-02 -3.13550686e-03 -3.64832485e-04][-8.54037508e-05 -3.13550686e-03  2.84951362e-02 -8.72645509e-03][-6.90581790e-03 -3.64832485e-04 -8.72645509e-03  3.05673367e-01]]C矩阵的对角线元素: [0.01020543 0.07926259 0.02849514 0.30567337]

2.6回归系数的显著性t检验

回归系数显著性检验:
在这里插入图片描述

t_const = beta_hat[0]/stdderr_const
print('截距项的t值:',round(t_const,3))
p_const = 2*t.sf(t_const,96)
print("P>|t|:",round(p_const,3))
t_x1 = beta_hat[1]/stderr_x1
print('x1系数的t值:',round(t_x1,3))
p_t1 = 2*t.sf(t_x1,96)
print("P>|t|:",round(p_t1,3))
# t_x2 = beta_h

输出为:

截距项的t值: -1.798
P>|t|: 1.925
x1系数的t值: 4.941
P>|t|: 0.0
  • t值足够小就可以认为回归方程的系数是具有显著性的,显著性水平是比较高的,否则就可以认为这个回归系数的显著性不高

三、多元线性回归问题TensorFlow实践(波士顿房价预测)

数据下载方法:

  1. 波士顿房价数据
  2. 使用从sklearn库中导出数据集

首先需要用到sklearn里面的数据集以及调用pandas库

from sklearn import datasets 
import pandas as pd 
boston = datasets.load_boston()

再用pandas库中的DataFrame函数,这个函数可以指定data,columns,index等,若不指明columns,则每列数据的标签会以1、2、3等标记,这里我们每列数据的标签用数据集里面的。

data =pd.DataFrame(data=boston.data,columns=boston.feature_names)
print(data)

最后把数据导入csv文件中。

data.to_csv('./boston.csv', index=None)
  • 原数据中有14列数据,由于data=pd.DataFrame(data=boston.data,columns=boston.feature_names) 这里的feature_names指的是特征的名字,也就是13个自变量,至于MEDV,你再用target即可(把boston.feature_names改成boston.target),而且运行boston.keys() 你也可以看到关于这个数据集的介绍(包括目标、特征、描述)

波士顿房价数据:
波士顿房价数据集包括506个样本,每个样本包括12个特征变量和该地区的平均房价。房价(单价)显然和多个特征变量相关,不是单变量线性回归(- 元线性回归)问题。选择多个特征变量来建立线性方程,这就是多变量线性回归(多 元线性回归)问题。

字段字段说明
CRIM城镇人均犯罪率
ZN占地面积超过25,000平方英尺的住宅用地比例。
INDUS每个城镇非零售业务的比例。
CHASCharles River虚拟变量(如果是河道,则为1;否则为0)
NOX一氧化氮浓度(每千万份)
RM每间住宅的平均房间数
AGE1940年以前建造的自住单位比例
DIS加权距离波士顿的五个就业中心
RAD径向高速公路的可达性指数
TAX每10,000美元的全额物业税率
PTRATIO城镇的学生与教师比例
B1000(Bk - 0.63)^ 2其中Bk是城镇黑人的比例
LSTAT人口状况下降%
MEDV自有住房的中位数报价, 单位1000美元
  1. 对波士顿房价数据用pandas来处理:
# import tensorflow as tf   #导入Tensorflow
import tensorflow.compat.v1 as tf # 由于tensorflow对placeholder无法使用,所以引入tensorflow.compat.v1
import matplotlib.pyplot as plt
import numpy as np                            
import pandas as pd                       # 能快速读取常规大小的文件。Pandas能提供高性能、易用的数据结构和数据分析工具
from sklearn.utils import shuffle         # 随机打乱工具,将原有序列打乱,返回一个全新的顺序错乱的值
#读取数据文件,结果为DataFrame格式
df_data = pd.read_csv('boston.csv')
df_data

在这里插入图片描述
对于下载tensorflow 可以参考这篇文章:Win10下用Anaconda安装TensorFlow 按照里面所有步骤完成后还是用不了tensorflow 的话,就在Anaconda Prompt中启动tensorflow环境并进入ipython环境中,再次下载:

# pip install tf
pip install tensorflow 

就可以使用了。

df_data.head(3)  # 显示前3条数据

在这里插入图片描述

  1. 数据准备(相关操作)
# 获取数据集的值
ds=df_data.values   # d f.values以np.array形式返回数据集的值
print(ds.shape)   # 查看数据的形状
输出为:(506, 13)
print(ds)    # 查看数据集的值

输出为:
在这里插入图片描述

  1. 划分特征数据和标签数据
# x_data 为归一化前的前12列特征数据
x_data = ds[:,:12]
# y_data 为最后1列标签数据
y_data = ds[:,12]
print('x_data shape=',x_data.shape)
print('y_data shape=',y_data.shape)

输出为:
在这里插入图片描述

  1. 特征数据归一化
#对特征数据{0到11}列 做(0-1)归一化
for i in range(12):df[:,i] = (df[:,i]-df[:,i].min())/(df[:,i].max()-df[:,i].min())
df

在这里插入图片描述

  1. 模型定义

5.1 定义特征数据和标签数据的占位符

#shape中None表示行的数量未知,在实际训练时决定一次带入多少行样本,从一个样本的随机SDG到批量SDG都可以
x = tf.placeholder(tf.float32,[None,12],name = "X")          #12个特征数据(12列)
y = tf.placeholder(tf.float32,[None,1],name = "Y")           #1个标签数据(1列)

5.2 定义模型函数

#定义了一个命名空间.
#命名空间name_scope,Tensoflow计算图模型中常有数以千计节点,在可视化过程中很难一下子全部展示出来
# 因此可用name_scope为变量划分范围,在可视化中,这表示在计算图中的一个层级
with tf.name_scope("Model"):# w 初始化值为shape=(12,1)的随机数w = tf.Variable(tf.random_normal([12,1],stddev=0.01),name="W")# b 初始化值为1.0b = tf.Variable(1.0,name="b")# w和x是矩阵相乘,用matmul,不能用mutiply或者*def model(x,w,b):return tf.matmul(x,w) + b#预测计算操作,前向计算节点pred = model(x,w,b)  
  1. 模型训练

6.1 设置训练超参数

#迭代轮次
train_epochs = 50#学习率
learning_rate = 0.01

6.2 定义均方差损失函数

#定义损失函数
with tf.name_scope("LossFunction"):loss_function = tf.reduce_mean(tf.pow(y-pred,2))    #均方误差

6.3 创建优化器

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss_function)

6.4 会话

#声明会话
sess = tf.Session()#定义初始化变量的操作
init = tf.global_variables_initializer()#启动会话
sess.run(init)

6.5 训练

#迭代训练
for epoch in range(train_epochs):loss_sum = 0.0for xs,ys in zip(x_data,y_data):xs = xs.reshape(1,12)ys = ys.reshape(1,1)#feed数据必须和Placeholder的shape一致_,loss = sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})loss_sum = loss_sum + loss#打乱数据顺序,防止按原次序假性训练输出x_data,y_data = shuffle(x_data,y_data)b0temp = b.eval(session=sess)            #训练中当前变量b值w0temp = w.eval(session=sess)            #训练中当前权重w值loss_average = loss_sum/len(y_data)      #当前训练中的平均损失print("epoch=",epoch+1,"loss=",loss_average,"b=",b0temp,"w=",w0temp)

输出为:

epoch= 1 loss= 28.082918898316105 b= 3.952297 w= [[ 0.51253736][-0.9672818 ][ 2.1312068 ][-0.21723996][ 1.6660578 ][-1.8813397 ][ 4.6080937 ][ 0.3415178 ][ 0.8034863 ][ 1.5301441 ][ 2.754847  ][ 1.4393961 ]]
epoch= 2 loss= 26.376526752740993 b= 4.887504 w= [[ 1.5641255 ][-1.1011099 ][ 3.9318624 ][-0.53754747][ 3.4213843 ][-4.5665426 ][ 7.1060243 ][ 0.17595242][ 1.6169361 ][ 2.7584982 ][ 3.626495  ][ 0.01978375]]
epoch= 3 loss= 24.173813558376537 b= 5.395661 w= [[ 2.1237833 ][-0.54208773][ 3.853566  ][-1.1139921 ][ 3.4763796 ][-6.7673526 ][ 7.363592  ][ 0.9175515 ][ 0.79786545][ 2.145488  ][ 3.542476  ][-0.7713235 ]]... ...后面还有47条数据就不展示。
  1. 模型应用
n = np.random.randint(506)       # 随机确定一条来看看效果
print(n)
x_test = x_data[n]x_test = x_test.reshape(1,12)
predict = sess.run(pred,feed_dict={x:x_test})
print("预测值:%f"%predict)target = y_data[n]
print("标签值:%f"%target)

输出为:
在这里插入图片描述
进一步可视化:

  1. 根据波士顿房价信息进行预测,多元线性回归+特征数据归一化+可视化
    添加loos_list值列表,并且输出可视化plt.plot(loss_list)
    在这里插入图片描述
    输出为:
    在这里插入图片描述

  2. 根据波士顿房价信息进行预测,多元线性回归+特征数据归一化+可视化+TensorBoard可视化
    TensorBoard可视化准备数据

#设置日志存储目录
logdir='d:/log'
#创建一个操作,用于记录损失值loss,后面在TensorBoard中SCALARS栏可见
sum_loss_op = tf.summary.scalar("loss",loss_function)#把所有需要记录摘要日志文件的合并,方便一次性写入
merged = tf.summary.merge_all()

输出为:
在这里插入图片描述


总结

对于数据集划分还可以继续优化:

划分数据集的方法:
一种方法是将数据集分成两个子集:

  • 训练集 - 用于训练模型的子集
  • 测试集 - 用于测试模型的子集

通常,在测试集上表现是否良好是衡量能否在新数据上表现良好的有用指标,前提是:
测试集足够大,不会反复使用相同的测试集来作假。
拆分数据:将单个数据集拆分为一个训练集和一个测试集
确保测试集满足以下两个条件:

  • (1)规模足够大,可产生具有统计意义的结果
  • (2)能代表整个数据集,测试集的特征应该与训练集的特征相同

但是在每次迭代时,都会对训练数据进行训练并评估测试数据,并以基于测试数据的评估结果为指导来选择和更改各种模型超参数,例如学习速率和特征。所以在新数据基础上将数据集划分为三个子集,可以大幅降低过拟合的发生几率:划分训练集、验证集和测试集
在这里插入图片描述

  • 在模型“通过”验证集之后,使用测试集再次检查评估结果。
train_num = 300    # 训练集的数目
valid_num = 100    # 验证集的数目
test_num = len(x_data) - train_num - valid_num # 测试集的数日 = 506-训练集的数日–验证集的数月# 训练集划分
x_train = x_data[:train_num]
y_train = y_data[:train_num]# 验证集划分
x_valid = x_data[train_num:train_num+valid_num]
y_valid = y_data[train_num:train_num+valid_num]# 测试集划分
x_test = x_data[train_num+valid_num:train_num+valid_num+test_num]
y_test = y_data[train_num+valid_num:train_num+valid_num+test_num]
  • 数据类型的转换
# 转换为tf.float32数据类型,后面求损失时要和变量W执行tf.matmul操作
x_train = tf.cast(x_train,dtype=tf.float32)
x_valid = tf.cast(x_valid,dtype=tf.float32)
x_test = tf.cast(x_test,dtype=tf.float32)
  • 构建模型
def model(x,w,b):return tf.matmul(x,w)+b
  • 优化变量的创建
W = tf.Variable(tf.random.normal([12,1],mean=0.0,stddev=1.0,dtype=tf.float32))
B= tf.Variable(tf.zeros(1),dtype = tf.float32)
print(W)
print(B)

输出为:
在这里插入图片描述

  • 模型训练
# 设置超参数
training_epochs = 50  #迭代次数
learning_rate = 0.001  #学习率
batch_size = 10  #批量训练一次的样本数# 定义损失函数# 采用均方差作为损失函数
def loss(x,y,w,b):err = model(x, w,b) - y       # 计算模型预测值和标签值的差异squared_err = tf.square(err)  # 求平方,得出方差return tf.reduce_mean(squared_err) # 求均值,得出均方差.# 定义梯度函数#计算样本数据[x,y]在参数[w, b]点上的梯度def grad(x,y,w,b):with tf.GradientTape() as tape:loss_= loss(x,y,w,b)return tape.gradient(loss_,[w,b]) #返回梯度向量# 选择优化器
optimizer = tf.keras.optimizers.SGD(learning_rate) #创建优化器,指定学习率# 迭代训练
loss_list_train = []  # 用于保存训练集1oss值的列表
loss_list_valid = []  # 用于保存验证集loss值的列表
total_step = int(train_num/batch_size)# 转换为整型for epoch in range(training_epochs):for step in range(total_step):xs = x_train[step*batch_size:(step+1)*batch_size,:]ys = y_train[step*batch_size:(step+1)*batch_size]grads = grad(xs,ys,W,B)   # 计算梯度optimizer.apply_gradients(zip(grads,[W,B]))# 优化器根据梯度自动调整变量w和bloss_train = loss(x_train,y_train,W,B).numpy() # 计算当前轮训练损失loss_valid = loss(x_valid,y_valid,W,B).numpy() # 计算当前轮验证损失loss_list_train.append(loss_train)loss_list_valid.append(loss_valid)print("epoch={:3d},train_loss={:.4f},valid_loss={:.4f}".format(epoch+1,loss_train,loss_valid))

输出为:迭代50次,但是由于训练集和验证集损失都为nan就没有继续下去了。
可以参考一下:https://itcn.blog/p/1026265732.html

epoch=  1,train_loss=nan,valid_loss=nan
epoch=  2,train_loss=nan,valid_loss=nan
epoch=  3,train_loss=nan,valid_loss=nan
epoch=  4,train_loss=nan,valid_loss=nan
epoch=  5,train_loss=nan,valid_loss=nan
epoch=  6,train_loss=nan,valid_loss=nan
epoch=  7,train_loss=nan,valid_loss=nan
epoch=  8,train_loss=nan,valid_loss=nan
epoch=  9,train_loss=nan,valid_loss=nan
epoch= 10,train_loss=nan,valid_loss=nan
epoch= 11,train_loss=nan,valid_loss=nan
epoch= 12,train_loss=nan,valid_loss=nan
epoch= 13,train_loss=nan,valid_loss=nan
epoch= 14,train_loss=nan,valid_loss=nan
epoch= 15,train_loss=nan,valid_loss=nan
epoch= 16,train_loss=nan,valid_loss=nan
epoch= 17,train_loss=nan,valid_loss=nan
epoch= 18,train_loss=nan,valid_loss=nan
epoch= 19,train_loss=nan,valid_loss=nan
epoch= 20,train_loss=nan,valid_loss=nan
epoch= 21,train_loss=nan,valid_loss=nan
epoch= 22,train_loss=nan,valid_loss=nan
epoch= 23,train_loss=nan,valid_loss=nan
epoch= 24,train_loss=nan,valid_loss=nan
epoch= 25,train_loss=nan,valid_loss=nan
epoch= 26,train_loss=nan,valid_loss=nan
epoch= 27,train_loss=nan,valid_loss=nan
epoch= 28,train_loss=nan,valid_loss=nan
epoch= 29,train_loss=nan,valid_loss=nan
epoch= 30,train_loss=nan,valid_loss=nan
epoch= 31,train_loss=nan,valid_loss=nan
epoch= 32,train_loss=nan,valid_loss=nan
epoch= 33,train_loss=nan,valid_loss=nan
epoch= 34,train_loss=nan,valid_loss=nan
epoch= 35,train_loss=nan,valid_loss=nan
epoch= 36,train_loss=nan,valid_loss=nan
epoch= 37,train_loss=nan,valid_loss=nan
epoch= 38,train_loss=nan,valid_loss=nan
epoch= 39,train_loss=nan,valid_loss=nan
epoch= 40,train_loss=nan,valid_loss=nan
epoch= 41,train_loss=nan,valid_loss=nan
epoch= 42,train_loss=nan,valid_loss=nan
epoch= 43,train_loss=nan,valid_loss=nan
epoch= 44,train_loss=nan,valid_loss=nan
epoch= 45,train_loss=nan,valid_loss=nan
epoch= 46,train_loss=nan,valid_loss=nan
epoch= 47,train_loss=nan,valid_loss=nan
epoch= 48,train_loss=nan,valid_loss=nan
epoch= 49,train_loss=nan,valid_loss=nan
epoch= 50,train_loss=nan,valid_loss=nan

http://chatgpt.dhexx.cn/article/ofaWGYvR.shtml

相关文章

线性回归——简单线性回归、多元线性回归

回归分析是用来评估变量之间关系的统计过程。用来解释自变量X与因变量Y的关系。即当自变量X发生改变时,因变量Y会如何发生改变。 线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系。当只有一个自变量时,称为简单线性回归&…

[学习笔记]多元线性回归分析——理解篇

回归分析是数据分析中最基础最重要的分析工具,绝大多数的数据分析问题,都可以使用回归的思想来解决。回归分析的任务就是,通过研究自变量x和因变量y的相关关系,尝试去解释y的形成机制,进而达到通过x去预测y的目的。 常…

用 Python 进行多元线性回归分析(附代码)

很多人在做数据分析时会经常用到一元线性回归,这是描述两个变量间统计关系的最简单的回归模型。但现实问题中,我们往往会碰到多个变量间的线性关系的问题,这时就要用到多元线性回归,多元线性回归是一元回归的一种推广,…

【数学建模】-多元线性回归分析

文章目录 回归的思想回归分析:研究X和Y之间相关性的分析。相关性因变量Y自变量X 回归分析的使命回归分析的分类数据的分类一元线性回归对于线性的理解回归系数的解释内生性的探究内生性的蒙特卡罗模拟核心解释变量和控制变量回归系数的解释什么时候取对数&#xff1…

多元回归分析

建模复习 目录 前言 一、回归的思想 1,介绍 2,回归分析的分类 3,数据类型 二、一元线性回归 1,一元线性函数拟合 2,一元线性回归模型 3,回归系数 1,回归系数的解释 2,内生性 3&…

VC2015运行库安装失败

VC2015安装失败,0x80240017-未指定的错误。 32位操作系统 64位操作系统 依次安装即可。 网盘链接:https://pan.baidu.com/s/1FGSAbpPuxTwszrQGMblPRg 提取码:z6ah 如遇到缺少什么.dll,可以通过增加某dll至环境变量中。

VC运行库修复安装一键安装

VC.RedistInstaller1.6.rar: http://u1.share.orcy.net.cn/file/12559096-413098201 如果上述安装不成功可尝试下载: Visual C AIO v2019.05.21(自动强制安装谨慎双击).zip: http://u1.share.orcy.net.cn/file/12559096-413098413 ------…

phpstudy没有安装VC11、VC14运行库

文章目录 出现问题解决方案安装步骤安装VC11安装VC14验证结果出现问题 phpstudy2018–>切换版本php-5.5.36时—>提示错误 解决方案

Windows 技术篇-通过注册表查找vc运行库所在位置实战演示,通过ProductCode查看vc++运行库安装位置

vc 运行库各个版本的位置安装位置不尽相同,而且根据安装方式不同也有一定区别,总结了一套自己的方法,我们自己来探索: 我用 vc2015 举例,2015 有很多版本,每个版本对应的产品代码是不一样的,我…

vc2005运行库彻底卸载_VC运行库安装卸载工具-Visual C ++ AIO(VC运行库安装卸载工具)下载 v2019.05.21官方版--pc6下载站...

VisualCAIOVC运行库安装卸载工具包含了所有VisualC最新版,可以通过命令行静默安装,可以卸载所有已安装版本及更新为最新版,总之这是一个不错的VisualC运行库安装卸载程序。。 相关软件软件大小版本说明下载地址 Visual C AIO(VC运行库安装卸…

c语言 运行库 下载,Visual C++运行库合集

Visual C++运行库合集是基于Windows操作系统打造的可视化集成开发环境,能够为用户提供C、标准C++、ATL、MFC、OpenMP以及MSDIA等类库的运行支持,助广大用户能够更好在自己的电脑上运行VisualC++ 开发的应用程序。 Visual C++运行库具有集成开发环境,可提供编辑C语言,C++以及…

win10自带vc运行库吗?

运行库是系统中非常重要的组件,像一些绿化版的软件如果电脑没有运行库就无法运行,但是也不一定就要安装VC运行库一般而言,将相关的.dll文件复制出来,放在相关程序所在目录中就可以了。比如小编从网上下载了一款破解版的QQ&#xf…

phpStudy启动失败提示:缺少VC9运行库

镜像是官方2008 64位中文版 按照提示安装了VC9以后 软件依旧无法运行阿帕奇,提示缺少VC9运行库这是因为:64位系统除了要装64位的运行库也要装32位的运行库32位的VC9运行库下载:http://www.microsoft.com/zh-CN/download/details.aspx?id5582…

php程序检测不到vc9,XAMPP2016中文精简版启动失败 缺少运行库解决办法

[摘要] XAMPP是一款强大的建站集成软件包,但XAMPP2016 中文精简版在启动的时候会出现“缺少运行库”“程序检测不到VC9运行库”等问题,其实只需要正确安装vc9库就能解决问题了。 XAMPP是一款强大的建站集成软件包,对于经常折腾WordPress的博主…

请自行检查是否安装VC9运行库??

phpStudy是一款PHP调试环境的程序集成包,该程序包集成最新的ApachePHPMySQLphpMyAdminZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。 1、程序自带FTP服务器,支持多用户,无需…

phpStudy启动失败时的解决方法 提示缺vc9运行库

php5.3、5.4和apache都是用vc9编译,电脑必须安装vc9运行库才能运行。 php5.5、5.6是vc11编译,如用php5.5、5.6必须安装vc11运行库。 php7.0、7.1是vc14编译,如用php7.0、7.1必须安装vc14运行库。 vc9和vc11运行库下载:http://www.…

django2.0调用银联支付接口实现银联支付

准备工作: 1.银联技术开放平台注册:https://open.unionpay.com/tjweb/acproduct/list?apiservId448 2.点击网关支付 --> 我要测试 (按照提示下载密钥) 3.安装需要的模块 pip install pyOpenSSL 代码实现: 目录结…

小程序调银联支付接口

这几天接了一个需求,将之前的项目支付接口改成银联的支付接口,简单说一下,对于没有接触过支付的小伙伴可能会有那么一丢丢启发… 环境:微信小程序银联支付 文档:公司提供的开发文档银联官方文档 框架:Dub…

【java支付一 】java整合银联支付

1.注册银联账号后进入测试地址 传送门 2.下载源码 银联源码地址 3.根据需求(这里我们肯定使用JAVA)选择不同的开发包,导入到项目中 4.修改 Java Version SDK (通用版)\ACPSample_B2C\src 文件中acp_sdk.propertites 证书以及配置回调的地址…

银联网关支付demo

对接银联支付接口,通过一个例子向商家支付金额。 1.首先在银联开放平台下载支付Demo,点击链接 或者直接拿我修改好的demo,链接: https://pan.baidu.com/s/1FywgOf5j_EYj5NQYHPeGqg 提取码: d2hp 建议拿我的现成版demo(修改了一些问题),解压后按照下面…