xinmeng_wit 发表于 2024-7-11 21:37

《机器学习算法与实现》3、最小二乘法

<p><strong>一、最小二乘法</strong></p>

<p>在正式开始逻辑斯蒂回归之前,先来理解以下最小二乘法的原理和实现方法。</p>

<p>要理解逻辑斯蒂回归,就要了解其理论支撑和回归问题。学习线性回归的理论和方法,是深入理解逻辑斯蒂回归的基础。</p>

<p>线性回归分析中应用最广泛的方法是最小二乘法。</p>

<p>最小二乘法是一种数学优化技术,它通过最小化误差的平方和来找到一组数据的最佳拟合函数。</p>

<div style="text-align: left;">
<p></p>

<p><strong>二、最小二乘法的数学原理</strong></p>

<p>如果有N个观测数据,定义为</p>

<p><strong>X </strong>= {x1, x2,... xN}</p>

<p><strong>Y</strong> = {y1, y2,... yN}</p>

<p>其中,<strong>X</strong>是自变量,<strong>Y</strong>是因变量。我们希望找到一个模型来表示这些数据之间的关系。</p>

<p>如果用简单的线性模型来来拟合,就是:</p>

<p><strong>y = ax + b</strong></p>

<p>那么,问题就转换为了求解a和b使得观测值和拟合值的误差最小。</p>

<p>由此,可以构造损失函数L。</p>

<div style="text-align: left;"></div>

<p>这个损失函数是一个二次函数,存在一个极小值点,因此对其关于a和b求偏倒数:</p>

<div style="text-align: left;"></div>

<div style="text-align: left;">当偏倒数为0时,损失函数最小:</div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<div style="text-align: left;">上式中,xi和yi是观测数据,也就三样本数据,是已知的,要求的值是a和b,调整一下各项的顺序得到如下的二元一次方程组:</div>

<div style="text-align: left;">
<div style="text-align: left;"></div>

<div style="text-align: left;">所以,求解该方程组就能得到a和b的值了。</div>

<div style="text-align: left;">&nbsp;</div>

<div style="text-align: left;"><strong>三、最小二乘法的算法实现</strong></div>

<p>1、准备样本数据并做可视化</p>

<pre>
<code class="language-python">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()</code></pre>

<div style="text-align: left;"></div>

<div style="text-align: left;">&nbsp;</div>

<p>1、python实现最小二乘法</p>

<pre>
<code class="language-python"># 最小二乘法的算法实现
N= X.shape

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([, ])
print(A)
B = np.array()

coeff = np.linalg.inv(A).dot(B)

print('a = %f, b = %f' % (coeff, coeff))

x_min = np.min(X)
x_max = np.max(X)
y_min = coeff * x_min + coeff
y_max = coeff * x_max + coeff

plt.scatter(X, Y, label='original data')
plt.plot(, , 'r', label='model')
plt.legend()
plt.show()</code></pre>

<p>&nbsp;</p>
</div>

<p>最后的拟合结果:</p>

<div style="text-align: left;"></div>

<p>以上就是最小二乘法的原理和算法实现,理解起来还是不难的。</p>

<p>接下来后面的内容就会上难度了。</p>
</div>

<p>&nbsp;</p>
</div>

<p>&nbsp;</p>

Jacktang 发表于 2024-7-12 07:37

<p>最小二乘法的原理和算法实现,理解起来是不难的,就是处理起来难<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/congra.gif" width="48" /></p>

吾妻思萌 发表于 2024-7-12 08:55

吊个scipy ols 一下直接完事

xinmeng_wit 发表于 2024-7-12 20:48

Jacktang 发表于 2024-7-12 07:37
最小二乘法的原理和算法实现,理解起来是不难的,就是处理起来难

<p>处理是指哪方面的处理呢?平时用的少,没什么经验</p>

xinmeng_wit 发表于 2024-7-12 20:51

吾妻思萌 发表于 2024-7-12 08:55
吊个scipy ols 一下直接完事

<p>大佬平时经常会用到最小二乘法吗,感觉大佬挺专业的<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan70.gif" width="57" /></p>

吾妻思萌 发表于 2024-7-13 12:46

吾妻思萌 发表于 2024-7-12 08:55
吊个scipy ols 一下直接完事

大佬平时经常会用到最小二乘法吗,感觉大佬挺专业的


我是调包菜鸡啊~

xinmeng_wit 发表于 2024-7-13 14:02

吾妻思萌 发表于 2024-7-13 12:46
大佬平时经常会用到最小二乘法吗,感觉大佬挺专业的


我是调包菜鸡啊~

<p>莫谦虚啊,大佬<img height="63" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/victory.gif" width="61" /></p>

heleijunjie72 发表于 2024-7-27 11:43

<p>读了这篇文章,终于弄明白了最小二乘法原理,谢谢提供这方面的知识</p>

xinmeng_wit 发表于 2024-7-27 14:03

heleijunjie72 发表于 2024-7-27 11:43
读了这篇文章,终于弄明白了最小二乘法原理,谢谢提供这方面的知识

<p>一起学习</p>
页: [1]
查看完整版本: 《机器学习算法与实现》3、最小二乘法