让我来详细讲解一下“Python中实现最小二乘法思路及实现代码”的完整攻略。
什么是最小二乘法
最小二乘法是一种回归分析方法,通过对一组数据进行拟合,得到一条通过这些点的直线,使得这些点到这条直线的距离之和最小。而距离是指每个点到直线的垂线距离。通过最小二乘法我们可以得到一个最优解,这个最优解是基于误差平方和最小化的。
应用最广泛的应该是线性回归了,下面我们就以线性回归为例子讲解一下如何在 Python 中实现最小二乘法。
线性回归模型
在一元线性回归中,假设我们有一个因变量 $y$,一个自变量 $x$,则线性回归模型可以表示为:
$$y = \beta_0 + \beta_1x + \epsilon$$
其中,$\beta_0$ 表示 $x=0$ 时 $y$ 的值,$\beta_1$ 表示 $y$ 随着 $x$ 的变化所增加的量,$\epsilon$ 是误差项。
我们希望对于给定的自变量 $x_i$ 和因变量 $y_i$,通过最小二乘法来确定模型的参数 $\beta_0, \beta_1$。
最小二乘法思路
最小二乘法的思路是:
- 确定线性关系:$y=\beta_0+\beta_1 x$
- 给出样本数据集 $(x_1,y_1), (x_2,y_2),\ldots,(x_n,y_n)$
- 确定误差函数:$E=\sum_{i=1}^{n}{(y_i-\hat{y}_i)^2}$,其中 $\hat{y}_i=\beta_0+\beta_1 x_i$ 表示模型预测的值
- 对误差函数求导,得到模型参数 $\beta_0, \beta_1$ 的最优解。
下面,我们将根据上述的四个步骤,来进行 Python 代码实现。
实现代码
首先需要导入 NumPy 和 Matplotlib 这两个库。其中,NumPy 将用于计算矩阵的逆和相关操作,Matplotlib 则用于绘制图形。
import numpy as np
import matplotlib.pyplot as plt
然后我们定义一个函数来实现最小二乘法:
def linear_regression(x, y):
n = np.size(x)
m_x, m_y = np.mean(x), np.mean(y)
SS_xy = np.sum(y * x - n * m_y * m_x)
SS_xx = np.sum(x * x - n * m_x * m_x)
beta_1 = SS_xy / SS_xx
beta_0 = m_y - beta_1 * m_x
return beta_0, beta_1
这里需要注意,在计算相关系数时,需要使用 NumPy 库中的 sum()
函数。该函数会按照给定参数进行求和操作。
最后,我们可以生成一组虚构的数据,然后进行拟合,绘制图形:
x = np.array([2, 4, 6, 8, 10])
y = np.array([4, 7, 8, 9, 12])
b_0, b_1 = linear_regression(x, y)
plt.scatter(x, y, color = "m", marker = "o", s = 30)
y_pred = b_0 + b_1 * x
plt.plot(x, y_pred, color = "g")
plt.xlabel('x')
plt.ylabel('y')
plt.show()
其中,我们首先定义了一组虚构的数据 $x$ 和 $y$,通过之前的 linear_regression
函数计算得到拟合的直线,最后使用 Matplotlib 绘制图形。
下面展示另一个示例,使用最小二乘法预测房价:
import pandas as pd
from sklearn import linear_model
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
# 读取数据集
house_data = pd.read_csv('house_data.csv')
# 分割自变量和因变量
X = house_data.iloc[:, :-1]
y = house_data.iloc[:, -1]
# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 定义线性回归模型并训练
regr = linear_model.LinearRegression()
regr.fit(X_train, y_train)
# 模型预测
y_pred = regr.predict(X_test)
# 计算误差和准确率
print('Mean squared error: %.2f'
% mean_squared_error(y_test, y_pred))
print('Coefficient of determination: %.2f'
% r2_score(y_test, y_pred))
以上代码中,我们使用了一个名为 house_data
的数据集。首先我们将数据集读入数据框中,然后分割自变量和因变量,然后将训练集和测试集分割开来。接下来我们定义了一个线性回归模型 regr
,并将训练数据集 X_train
和 y_train
传递到模型中进行训练。最后,我们可以用 regr
对测试集 X_test
进行预测,然后计算误差和准确率。
上述两个示例,一个是手动实现了最小二乘法,而另一个则使用了 Scikit-learn 库中的线性回归模型,只需调用相关库即可,无需手动实现。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中实现最小二乘法思路及实现代码 - Python技术站