往期目录
python在线性规划中的应用
文章目录
- 一、线性回归算法概述
- 1.1 什么是线性回归?
- 1.2 线性回归算法原理
- 1.3 线性回归的应用场景
- 二、线性回归算法Python实现
- 2.1 导入必要的库
- 2.2 随机生成数据集
- 2.3 拟合模型
- 2.4 预测结果
- 2.5 结果可视化
- 三、完整代码
线性回归是机器学习中最基础的算法之一,其原理简单易懂,应用广泛。
回归分析(Regression Analysis)是统计学的数据分析方法,目的在于了解两个或多个变量间是否相关、相关方向与强度,并建立数学模型以便观察特定变量来预测其它变量的变化情况。
线性回归算法(Linear Regression)的建模过程就是使用数据点来寻找最佳拟合线。公式,y = mx + c,其中 y 是因变量,x 是自变量,利用给定的数据集求 m 和 c 的值。
线性回归又分为两种类型,即 简单线性回归(simple linear regression),只有 1 个自变量;*多变量回归(multiple regression),至少两组以上自变量。
一、线性回归算法概述
1.1 什么是线性回归?
线性回归是一种常见的监督学习算法,用于预测一个连续的输出变量(也称为响应变量或因变量)和一个或多个输入变量(也称为自变量)之间的关系。这种关系可以用一条直线的方程来表达。
1.2 线性回归算法原理
线性回归基于最小二乘法,即寻找一条直线最小化观测数据和线之间的平方误差和。该算法的目标是找到一条最佳拟合直线,使得每个观测值与拟合直线之间的距离最小。
线性回归模型的数学表达式如下:
Y = β 0 + β 1 X 1 + β 2 X 2 + … … + β n ∗ X n Y = β_{0} + β_{1}X_{1} + β_{2}X_{2}+ ……+ β_{n}*X_{n} Y=β0+β1X1+β2X2+……+βn∗Xn
其中, Y Y Y 是响应变量, X 1 X_{1} X1, X 2 X_{2} X2,……, X n X_{n} Xn 是自变量, β 0 , β 1 , β 2 , … … , β n β_{0},β_{1},β_{2},……,β_{n} β0,β1,β2,……,βn 是模型的参数。
线性回归算法主要包括两个步骤:
寻找最佳拟合直线的参数 β 0 , β 1 , β 2 , … … , β n β_{0},β_{1},β_{2},……,β_{n} β0,β1,β2,……,βn。
使用模型对新的数据进行预测。
1.3 线性回归的应用场景
线性回归可以用于许多不同的领域,包括金融、经济学、营销、社会科学等。以下是一些可能的应用场景:
通过销售额和广告支出建立销售预测模型
分析股票市场的趋势和波动
将房价与房屋面积、地理位置等因素联系起来
预测医疗保健成本
二、线性回归算法Python实现
为了实现线性回归算法,我们需要将其转化为一个优化问题。我们需要使用机器学习库 scikit-learn 实现这个问题。下面是实现流程:
2.1 导入必要的库
在开始编写代码之前,我们需要导入一些必要的库,包括 pandas、numpy 和 sklearn 等。这些库使得我们可以轻松地进行数据处理、数学运算和模型训练。下面是导入库的代码示例:
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
2.2 随机生成数据集
在进行机器学习算法时,我们需要先准备合适的数据集。在这个例子中,我们使用一个包含房屋面积和价格的数据集。我们可以使用 pandas 库来加载数据集。下面是加载数据集的代码示例:
# 生成随机数据集
np.random.seed(0) # 设置随机种子
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.randn(100, 1)
在上述代码中,我们使用 Pandas 的 read_csv() 方法从 CSV 文件中读取数据,并将其划分为输入变量(也称为特征)和输出变量。X 是包含所有输入变量的 NumPy 数组,y 是包含所有输出变量的一维 NumPy 数组。
2.3 拟合模型
接下来,我们需要创建一个 LinearRegression 对象并拟合模型。这个对象将用于训练模型和进行预测。下面是拟合模型的代码示例:
# 创建线性回归对象并拟合数据
reg = LinearRegression().fit(X, y)
上述代码中,我们创建了一个 LinearRegression 对象 regressor,并调用其 fit() 方法来拟合模型。这里的 fit() 方法会自动调整模型参数以最小化观测值和拟合直线之间的误差。
2.4 预测结果
有了拟合的模型后,我们就可以使用它来进行预测了。这里我们可以根据输入变量预测输出变量。下面是预测结果的代码示例:
# 预测新数据
X_new = np.array([[0.5]])
y_new = reg.predict(X_new)
# 绘制数据散点图和拟合直线(使用 seaborn 库美化)
sns.set(style='whitegrid', font_scale=1.2)
在上述代码中,我们使用训练好的模型 regressor 来预测输出变量 y 的值。这里的 predict() 方法将根据输入变量 X 来返回相应的预测值 y_pred。
2.5 结果可视化
最后,在得到预测结果之后,我们可以将其可视化。这里我们使用 matplotlib 库来绘制散点图和拟合直线。下面是可视化结果的代码示例
plt.scatter(X, y, alpha=0.8, color='#3F7F4C')
plt.plot(X, reg.predict(X), color='#6D8F18', linewidth=2)
plt.grid(False)
plt.xlabel('xlabel',font)
plt.ylabel('ylabel',font)
plt.show()
在上述代码中,我们使用 matplotlib 库将原始数据绘制为散点图。然后,我们使用 predict() 方法计算出预测结果并绘制一条拟合直线。最后,我们添加一些标题和标签来说明图形内容,并使用 show() 方法展示图形。
三、完整代码
import numpy as np
from sklearn.linear_model import LinearRegression
import seaborn as sns
import matplotlib.pyplot as plt
# 生成随机数据集
np.random.seed(0) # 设置随机种子
X = np.random.rand(100, 1)
y = 2 + 3*X + np.random.randn(100, 1)
fig,ax = plt.subplots(figsize=(8,6),dpi=300)
plt.tick_params(labelsize=20)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
font = {'family': 'Times New Roman','size': 24}
# font_1 = {'family': 'Times New Roman','size': 14}
plt.rcParams["font.family"] = "Times New Roman" #全图字号新罗马字体
# 创建线性回归对象并拟合数据
reg = LinearRegression().fit(X, y)
# 预测新数据
X_new = np.array([[0.5]])
y_new = reg.predict(X_new)
# 绘制数据散点图和拟合直线(使用 seaborn 库美化)
sns.set(style='whitegrid', font_scale=1.2)
plt.scatter(X, y, alpha=0.8, color='#3F7F4C')
plt.plot(X, reg.predict(X), color='#6D8F18', linewidth=2)
plt.grid(False)
plt.xlabel('xlabel',font)
plt.ylabel('ylabel',font)
plt.show()
#
# 打印模型参数和预测结果
print('模型参数:', reg.coef_, reg.intercept_)
print('预测结果:', y_new)
本文对于Python实现线性回归算法进行了详细的介绍。首先,我们介绍了线性回归的概念和原理,然后介绍了它的应用场景。最后,我们使用 scikit-learn 库来实现了线性回归算法,并对结果进行了可视化。