600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python多元非线性回归_day-13 python库实现简单非线性回归应用

python多元非线性回归_day-13 python库实现简单非线性回归应用

时间:2021-09-25 06:25:08

相关推荐

python多元非线性回归_day-13 python库实现简单非线性回归应用

一、概率

在引入问题前,我们先复习下数学里面关于概率的基本概念

概率:对一件事发生的可能性衡量

范围:0<=P<=1

计算方法:根据个人置信区间;根据历史数据;根据模拟数据。

条件概率:B发生的条件下,A发生的概率

二、Logistic Regression(逻辑回归)

1、问题引入

处理二值数据时,如果一直8个测试数据集为如下所示,我们利用线性回归方程,建立回归方程曲线,图形显示,并不能很好的模拟回归问题,也就是我们所说的欠回归。

如果继续引入第9个测试点,我们发现欠回归情况更加严重,因此我们需要引入一个新的回归模型,来解决该类模型欠回归问题。

2、简单推导过程

假设测试数据为X(x0,x1,x2···xn)

要学习的参数为:Θ(θ0,θ1,θ2,···θn)

向量表示:

观察Logistic函数曲线,我们发现在0到负无穷时,函数值趋向于0,0到正无穷时函数曲线趋向于1,且当z等于0时,函数值为0.5,于是我们可以引入该函数,对预测方程进行再次转换,由数值上的计算转换为0,1概率上的计算,即:

不同于线性回归模型:

,定义一个新的预测函数为:

于是问题从对Z函数求最优theta参数值,变为对h函数求最优theta参数值。对二值问题,可转换为如下表述:

根据一般方法,首先定义新的cost函数,然后根据cost函数来反向更新参数theta值,如下为新的cost函数:

为了计算方便,我们对其转化为:

两个式子可以进行合并,最终化简为最终的cost函数:

该式为非线性方程,通过求导来计算极值很复杂,我们引入之前的梯度下降算法,来不断的估计新的参数值

最终更新法则为:

3、实际编程应用

如下为一个通用的非线性回归方程,在利用梯度下降算法反向更新theta参数值时,没有使用如下更新法则,而是使用通用方法,如下是具体代码:

importnumpy as npimportrandom#梯度下降算法来更新参数值#x,y:测试数据集及标签值,theta:学习的参数值,alpha:学习率,m:测试数据集个数,numIterations:重复更新次数

defgradientDescent(x,y,theta,alpha,m,numIterations):

xTrans=np.transpose(x)for i inrange(0,numIterations):

hypothesis=np.dot(x,theta)

loss= hypothesis -y#定义一个通用的更新法则7

cost = np.sum(loss**2)/(2*m)

if i % 10000 == 0:print("Iteration %d | Cost:%f"%(i,cost))

gradient= np.dot(xTrans,loss)/m

theta= theta - alpha*gradientreturntheta#生成测试数据#numPoints:测试数据集行数,bias:偏向,variance:方差

defgenData(numPoints,bias,variance):

x= np.zeros(shape=(numPoints,2))

y= np.zeros(shape=numPoints)for i inrange(0,numPoints):

x[i][0]= 1x[i][1] =i#uniform随机产生一些数字

y[i] = (i + bias) + random.uniform(0,1) +variancereturnx,y

x,y= genData(100,25,10)

m,n=np.shape(x)print(x,y)

theta=np.ones(n)

alpha= 0.0005theta= gradientDescent(x,y,theta,alpha,m,100000)print(theta)

最终的结果如下,结果显示,随着训练次数的增加,目标函数也在不断的减小:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。