1. 简介
回归分析是一种广泛应用于统计学和机器学习中的有监督学习技术,它通过对自变量和因变量之间关系的建模来预测因变量的值。在回归分析中,我们通常会求解一个最佳拟合直线使其能够最好地拟合数据。本文介绍如何使用Python进行回归分析和最佳拟合直线。
2. 回归分析
2.1 简单线性回归
简单线性回归是一种回归分析的形式,它将自变量和因变量之间的关系建模成一条直线。在此模型中,我们寻找一条直线 y = mx + b 来拟合数据。其中,m是直线斜率,b是截距。这种线性模型只适用于自变量和因变量之间有线性关系的数据。
import numpy as np
import matplotlib.pyplot as plt
# 创建数据集
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 6, 8])
# 用最小二乘法求解斜率和截距
m, b = np.polyfit(x, y, 1)
# 画出拟合直线和原始数据
plt.plot(x, y, 'o')
plt.plot(x, m * x + b)
plt.show()
在上面的代码中,我们使用了numpy和matplotlib库。首先生成了一组含有5个数据点的数据集X和Y。然后使用numpy库提供的polyfit函数求解最佳拟合直线的斜率m和截距b。最后,使用matplotlib画出拟合直线和原始数据。
2.2 多项式回归
多项式回归是一种回归分析的形式,它将自变量和因变量之间的关系建模成一个二次或三次等多项式函数。在多项式回归中,我们寻找一个多项式函数 y = anxn + an-1xn-1 + ... + a1x + a0 来拟合数据。在此模型中,an到a0是多项式函数的系数,通常使用最小二乘法进行求解。
import numpy as np
import matplotlib.pyplot as plt
# 创建数据集
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 5, 4, 5])
# 使用numpy库提供的polyfit函数生成二次拟合函数的系数
fit = np.polyfit(x, y, 2)
# 生成二次拟合函数
fit_fn = np.poly1d(fit)
# 画出拟合后的曲线和原始数据
plt.plot(x, y, 'o', x, fit_fn(x), '--r')
plt.show()
在上面的代码中,我们定义了一个二次多项式的函数。然后,使用numpy提供的polyfit函数生成一个二次多项式函数的系数。最后使用matplotlib库画出拟合后的曲线和原始数据。
3. 最佳拟合直线
3.1 最小二乘法
最小二乘法是回归模型中寻找拟合直线或者函数的一种方法。最小二乘法的目标是找到一条直线或者一个曲线使其能够最好地拟合数据。在最小二乘法中,我们定义误差平方和E为每个数据点离拟合直线的距离的平方和,然后寻找误差平方和最小的一条直线或曲线。
import numpy as np
import matplotlib.pyplot as plt
# 创建数据集
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 6, 8])
# 将数据点用散点图展示
plt.plot(x, y, 'o')
# 计算斜率和截距
m, b = np.polyfit(x, y, 1)
# 生成拟合直线
fit_fn = np.poly1d((m, b))
# 用拟合直线在x轴上的值生成一组y值
y_fit = fit_fn(x)
# 计算误差平方和
E = np.sum((y - y_fit) ** 2)
# 用最小二乘法求解斜率和截距来拟合直线,并展示
plt.plot(x, fit_fn(x), label='fit(linear)')
plt.title('linear regression with MSE=%.3f' % E)
plt.legend(loc='upper left')
plt.show()
在上面的代码中,我们使用numpy和matplotlib库。首先生成了一组含有5个数据点的数据集X和Y。然后使用numpy库提供的polyfit函数求解最佳拟合直线的斜率m和截距b。最后,使用matplotlib画出拟合直线和原始数据。在这里,我们计算了误差平方和E,它表示所有数据点到拟合直线的距离平方和的大小。误差平方和越小,拟合的效果越好。
3.2 样例展示
假设你拥有一组房屋的数据集,其中含有房屋的面积和价格信息。你想利用这些数据来预测未来房价。为了做到这一点,第一步是对数据进行回归分析来建立一个预测模型。我们可以通过对数据进行简单线性回归来建立一个拟合直线来做出预测。
下面是一个简单线性回归的样例展示:
import numpy as np
import matplotlib.pyplot as plt
# 定义样本数据(属性和目标)
x = np.array([1400, 1600, 1700, 1875, 1100, 1550, 2350, 2450, 1425, 1700])
y = np.array([245000, 312000, 279000, 308000, 199000, 219000, 405000, 324000, 319000, 255000])
# 计算斜率和截距
slope, intercept = np.polyfit(x, y, 1)
print('斜率:', slope)
print('截距:', intercept)
# 用样本数据生成最佳拟合直线
y_pred = slope * x + intercept
# 展示样本数据和最佳拟合直线
plt.plot(x, y_pred, color='red')
plt.scatter(x, y)
plt.xlabel('面积')
plt.ylabel('价格')
plt.show()
在上面的代码中,我们定义了样本数据X和Y,它一个包含房屋面积(单位:平方英尺)的数组和一个包含对应房价(单位:美元)的数组。我们使用numpy库提供的polyfit函数计算最佳拟合直线的斜率和截距。最后,展示样本数据和最佳拟合直线。从结果来看,我们可以看到拟合直线可以很好地拟合数据。
4. 结论
回归分析是一种有监督学习技术,它通过对自变量和因变量之间关系的建模来预测因变量的值。在回归模型中,我们通常会求解一个最佳拟合直线或曲线使其能够最好地拟合数据。本文介绍了如何使用Python进行简单线性回归、多项式回归和最佳拟合直线的求解。同时,我们在样例展示中介绍了如何利用回归分析预测房价。这些技术也可以用于其他领域的数据分析和预测,如金融、医疗等。