一、最小二乘法
在正式开始逻辑斯蒂回归之前,先来理解以下最小二乘法的原理和实现方法。
要理解逻辑斯蒂回归,就要了解其理论支撑和回归问题。学习线性回归的理论和方法,是深入理解逻辑斯蒂回归的基础。
线性回归分析中应用最广泛的方法是最小二乘法。
最小二乘法是一种数学优化技术,它通过最小化误差的平方和来找到一组数据的最佳拟合函数。
二、最小二乘法的数学原理
如果有N个观测数据,定义为
X = {x1, x2,... xN}
Y = {y1, y2,... yN}
其中,X是自变量,Y是因变量。我们希望找到一个模型来表示这些数据之间的关系。
如果用简单的线性模型来来拟合,就是:
y = ax + b
那么,问题就转换为了求解a和b使得观测值和拟合值的误差最小。
由此,可以构造损失函数L。
这个损失函数是一个二次函数,存在一个极小值点,因此对其关于a和b求偏倒数:
当偏倒数为0时,损失函数最小:
上式中,xi和yi是观测数据,也就三样本数据,是已知的,要求的值是a和b,调整一下各项的顺序得到如下的二元一次方程组:
所以,求解该方程组就能得到a和b的值了。
三、最小二乘法的算法实现
1、准备样本数据并做可视化
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
data_num = 50
X = np.random.rand(data_num, 1)*10
Y = X * 3 + 4 + 4*np.random.randn(data_num, 1)
# 画出数据分布
plt.scatter(X, Y)
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
1、python实现最小二乘法
# 最小二乘法的算法实现
N = X.shape[0]
S_X2 = np.sum(X*X)
S_X = np.sum(X)
S_XY = np.sum(X*Y)
S_Y = np.sum(Y)
A = np.array([[S_X2, S_X], [S_X, N]])
print(A)
B = np.array([S_XY, S_Y])
coeff = np.linalg.inv(A).dot(B)
print('a = %f, b = %f' % (coeff[0], coeff[1]))
x_min = np.min(X)
x_max = np.max(X)
y_min = coeff[0] * x_min + coeff[1]
y_max = coeff[0] * x_max + coeff[1]
plt.scatter(X, Y, label='original data')
plt.plot([x_min, x_max], [y_min, y_max], 'r', label='model')
plt.legend()
plt.show()
最后的拟合结果:
以上就是最小二乘法的原理和算法实现,理解起来还是不难的。
接下来后面的内容就会上难度了。
|