机器学习算法:一文掌握最小二乘法的详细用法(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]]
三、总结
最小二乘法是一种简单而有效的机器学习算法,在许多领域都有广泛的应用。但在实际应用中,需要根据数据的特点和问题的需求,合理选择和使用该算法,并注意其局限性。
热门推荐
揭秘Tensor Core黑科技:如何让AI计算速度飞跃
身份证和户口簿信息不一致会影响办理护照吗?
竹笛教学心得:从乐感到技巧的全面培养
「无偿」献的血,最后都用在哪里了?
运动居然能逆转神经细胞流失,改善大脑结构和功能!
探索面相学中的痣与人生运势的联系
减肥是否需要关注全天热量摄入或饭量分布
军队文职报考指南:岗位职责、招考条件及考试内容详解
《绝区零》萌新必看!快速了解角色属性与定位,灵活组队
机器人被大量使用,新疆军区展示智能化作战装备,印度要看清差距
攀枝花市一月气候特点及温度变化分析
情绪智力(情商):定义、重要性及提升方法
什么是生化检查包括哪些
人工智能辅助的人形机器人头部柔性电子设备,用于实现自然真实的面部表情
牙痛并出现偏头痛可否服用阿莫西林
数看文化产业:新业态新行业贡献持续增强
人社部发声:挂靠单位缴纳社保将被严查,灵活就业人员可选择更合适的方式参保
发现自己变 "懒" 了,其实这是一种潜意识在求救,一定要重视起来
番茄炒饭-做法超详细:(附制作流程+图片演示)
一二线城市房价将迈入“止跌回稳”,房企争夺优质地块的影响?
大鹏新区:文旅融合新探索,传统与潮流的碰撞
2025年欧冠小组赛收官:利物浦、巴萨领跑,曼城将战皇马或拜仁
如何在Windows 11上退出安全模式?这里提供详细步骤
浓硝酸有挥发性吗 浓硝酸都有哪些性质
尘埃落定!科比坠机真相公布:由飞行员错误的决定所导致
产后脱发的原因是什么? 何时脱发,如何预防【医生监督】
温州6个非遗体验点,全省推荐!
2024年郑州租房攻略:初到郑州,哪里租房便宜?
企业五险一金应如何缴纳?这种缴纳方式有哪些规定?
水管三通如何更换?三通选购时的注意事项