机器学习算法:一文掌握最小二乘法的详细用法(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]]
三、总结
最小二乘法是一种简单而有效的机器学习算法,在许多领域都有广泛的应用。但在实际应用中,需要根据数据的特点和问题的需求,合理选择和使用该算法,并注意其局限性。
热门推荐
雨、冻雨、雪、霰、雹、露、霜、雾、霾的区别与联系
自然界中雪怎么形成的原因是什么
PVC、PET与TPU改色膜:解析与比较,谁更胜一筹?
社会工作者的知识和能力要求
大拇指挫伤后怎么快速恢复
汝字打一个生肖名字答案是什么
全网首发|《人形机器人治理导则》
美联储3月会议“放鸽”,加密市场转折点到了?
油价的变化因素是什么?油价波动对经济有哪些影响?
牙齒裂開怎麼辦?牙醫教你正確應對:避免更大傷害!
经常吃硬的食物对牙齿更好?真相令人意外
Win11能玩生化危机5吗?如何优化游戏体验?
抬头纹和颈纹怎么消除
五行缺取名女孩:从偏旁到寓意的全面指南
醋酸钠的物理性质及在各行业中的应用
醋酸钠:污水处理的碳源,让水质更清澈!
柯尔伯格三水平六阶段理论详解
没有这位神秘的女性,青霉素可能救不了几个人
浮萍属:水面上的生命之舞
跨越生死的数字魔法:AI"复活"影响几何
A4纸的真实尺寸:21cm x 29.7cm,相当于多少寸?
新时代女性如何守护生育力?专家建议:提前规划,科学管理
油品检测:从核心指标到具体操作的系统化指南
紫云英的花语:坚韧与希望的象征
工伤保险认定流程解析与法律适用
保密协议中如何规定信息泄露的责任
男性40岁以上做好食管癌预防,这些习惯容易患病,3类症状要注意
架构设计之RBAC基于角色的访问控制设计
RBAC——基于角色权限的模型
化学负离子实验:硫酸与氢氧化钠的反应