机器学习算法:一文掌握最小二乘法的详细用法(5个案例可直接运行)
创作时间:
作者:
@小白创作中心
机器学习算法:一文掌握最小二乘法的详细用法(5个案例可直接运行)
引用
CSDN
1.
https://blog.csdn.net/cui_yonghua/article/details/146388425
最小二乘法是一种常用的机器学习算法,用于解决回归问题。本文将从原理、计算方法、代码示例、应用场景等方面对其进行详细介绍。
一、最小二乘法概述
1.1 基本概念
最小二乘法(Least Squares Method)是一种用于拟合数据的经典回归分析方法,广泛应用于线性回归、非线性回归和统计学中。其核心思想是通过最小化观测数据与模型预测值之间的误差平方和,找到最优的模型参数。
最小二乘法的目标是找到一组模型参数,使得模型预测值与实际观测值之间的误差平方和最小。对于线性模型,最小二乘法可以用于估计回归系数。
最小二乘法公式是一个数学的公式,在数学上称为曲线拟合,不仅仅包括线性回归方程,还包括矩阵的最小二乘法。线性最小二乘法公式为:a=y-bx。
矩阵的最小二乘法常用于测量数据处理的平差公式中
1.2 优缺点
优点:
- 计算简单,易于实现。
- 对于线性模型,最小二乘估计是最优线性无偏估计(BLUE)。
缺点:
- 对异常值敏感,容易受到离群点的影响。
- 假设误差服从正态分布,可能不适用于非正态分布的数据。
1.3 应用场景
最小二乘法广泛应用于以下领域:
- 线性回归:用于拟合线性模型。
- 非线性回归:通过线性化或迭代方法拟合非线性模型。
- 统计学:用于参数估计和假设检验。
- 信号处理:用于滤波和信号估计。
1.4 注意事项
- 最小二乘法假设误差是正态分布的,且误差的方差是恒定的。如果数据不满足这些假设,可能需要使用其他拟合方法。
- 对于非线性数据,可以使用多项式拟合或其他非线性拟合方法。
二、用Python实现最小二乘法
2.1 的公式实现
# -*- encoding: utf-8 -*-
def least_squares(x, y):
n = len(x)
sum_x = sum(x)
sum_y = sum(y)
sum_xy = sum([x[i] * y[i] for i in range(n)])
sum_x2 = sum([x[i] ** 2 for i in range(n)])
m = (n * sum_xy - sum_x * sum_y) / (n * sum_x2 - sum_x ** 2)
c = (sum_y - m * sum_x) / n
return m, c
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
m, c = least_squares(x, y)
print(f"拟合直线方程为: y = {m}x + {c}")
2.2 使用numpy实现最小二乘法
import numpy as np
import matplotlib.pyplot as plt
# 生成一些随机数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.normal(0, 1, 100)
# 使用numpy的polyfit函数进行最小二乘拟合
a, b = np.polyfit(x, y, 1)
# 打印拟合结果
print(f"拟合的直线方程: y = {a:.2f}x + {b:.2f}")
# 绘制数据点和拟合直线
plt.scatter(x, y, label='Data Points')
plt.plot(x, a * x + b, color='red', label='Fitted Line')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
2.3 使用scipy.optimize.curve_fit实现最小二乘法
scipy.optimize.curve_fit 是一个更通用的函数,可以用于拟合任意形式的函数。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 定义线性函数
def linear_func(x, a, b):
return a * x + b
# 生成一些随机数据
np.random.seed(0)
x = np.linspace(0, 10, 100)
y = 2 * x + 1 + np.random.normal(0, 1, 100)
# 使用curve_fit进行最小二乘拟合
popt, pcov = curve_fit(linear_func, x, y)
# 提取拟合参数
a, b = popt
print(f"拟合的直线方程: y = {a:.2f}x + {b:.2f}")
# 绘制数据点和拟合直线
plt.scatter(x, y, label='Data Points')
plt.plot(x, linear_func(x, a, b), color='red', label='Fitted Line')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
2.4 拟合一条直线来预测未来的浓度变化
假设我们有一组实验数据,表示某种物质的浓度随时间的变化。我们希望通过最小二乘法拟合一条直线来预测未来的浓度变化。
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
# 定义线性函数
def linear_func(x, a, b):
return a * x + b
# 实验数据
time = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
concentration = np.array([1.2, 2.1, 2.8, 4.0, 5.1, 6.2, 7.1, 8.0, 9.1, 10.0])
# 使用curve_fit进行最小二乘拟合
popt, pcov = curve_fit(linear_func, time, concentration)
# 提取拟合参数
a, b = popt
print(f"拟合的直线方程: y = {a:.2f}x + {b:.2f}")
# 预测未来浓度
future_time = np.array([10, 11, 12])
predicted_concentration = linear_func(future_time, a, b)
# 绘制数据点和拟合直线
plt.scatter(time, concentration, label='Experimental Data')
plt.plot(time, linear_func(time, a, b), color='red', label='Fitted Line')
plt.plot(future_time, predicted_concentration, color='green', label='Predicted Data')
plt.xlabel('Time')
plt.ylabel('Concentration')
plt.legend()
plt.show()
结果解释
- 拟合的直线方程:通过最小二乘法拟合得到的直线方程 y=ax+b 可以用来描述数据点的趋势。
- 预测未来浓度:使用拟合的直线方程,可以预测未来某个时间点的浓度值。
2.5 房价预测
假设我们有一组房屋面积和房价的数据,希望通过最小二乘法拟合一个线性模型来预测房价。
数据集
面积 (X) 房价 (y)
50 150
80 200
100 250
120 300
150 350
import numpy as np
import matplotlib.pyplot as plt
# 最小二乘法实现
def least_squares(X, y):
"""
最小二乘法求解线性回归参数
:param X: 自变量矩阵 (n x m)
:param y: 因变量向量 (n x 1)
:return: 回归系数向量 (m x 1)
"""
# 计算回归系数 beta = (X^T X)^(-1) X^T y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
return beta
# 实际案例:房价预测
X_real = np.array([[50], [80], [100], [120], [150]]) # 面积
y_real = np.array([[150], [200], [250], [300], [350]]) # 房价
# 添加偏置项
X_real_b = np.c_[np.ones((X_real.shape[0], 1)), X_real]
# 使用最小二乘法求解回归系数
beta_real = least_squares(X_real_b, y_real)
print("房价预测回归系数 (beta):", beta_real)
从运行结果可以看出,回归系数:
房价预测回归系数 (beta): [[50.0]
[2.0]]
三、总结
最小二乘法是一种简单而有效的机器学习算法,在许多领域都有广泛的应用。但在实际应用中,需要根据数据的特点和问题的需求,合理选择和使用该算法,并注意其局限性。
热门推荐
古代妾室除传宗接代之外,还有另一个重要作用,如今却为男人不齿
中国游戏行业现状深度分析与未来投资研究报告(2024-2031年)
英语专业学生就业前景分析报告
科目一考试流程
恋爱脑心理学揭秘:别让痴迷毁了你!
如何改造农村的老旧房屋?这种改造如何符合环保要求?
小习惯,大健康!如何泡脚才能养生不伤身?
诗词典故起名艺术,传承文化精髓
武汉不是典型的旅游城市,为什么游客量胜过典型的旅游城市呢?
游泳和跑步的优势是什么?
十大自用电脑设备推荐 个人电脑需要配备哪些设备
广东煲仔饭一般是用什么米做的?
大理卷烟厂专职消防队成功解救一名被困人员
老一辈流传的二十二个民间禁忌,民间智慧
脱口秀如何真正助力影视创作?
揭秘海鱼,它们的营养与美食价值
车备用钥匙的使用方法是什怎么?这种使用对紧急情况有何帮助?
揭秘AOI系统:自动化光学检测的多功能应用
新区创新探索法治宣传教育新方式,推动公民法治素养不断提升
如何选购真正护眼的手机:全面解析护眼技术与优秀推荐
庖丁解牛:从养生之道到技艺高超
食道异物处理原则有哪些
Nginx核心架构设计和原理
李荣浩的音乐成长史
法学、财会、汉语言,这三个领域的专业都有哪些?
历史上的河南省出过哪些文化名人
急性结膜炎的中药治疗方法
风雪无阻 温暖归途——新疆警方护航春运纪事
2025年体育单招管理办法发布:招生院校增至168所,新增24所院校
梯度提升树(Gradient Boosting Trees)原理与实践