一、回归算法思维导图
二、算法概念、原理、应用场景和实例代码
1、线性回归
1.1、概念
线性回归算法是一种统计分析方法,用于确定两种或两种以上变量之间的定量关系。 线性回归算法通过建立线性方程来预测因变量(y)和一个或多个自变量(x)之间的关系。其基本形式为 y = wx + e,其中 w 是权重,x 是自变量,e 是误差项。
1.2、算法原理
线性回归算法的核心在于找到最佳的拟合直线,使得预测值与实际值之间的误差最小。这通常通过最小二乘法来实现,即最小化预测值与实际值之差的平方和。线性回归可以分为一元线性回归和多元线性回归:
(1)一元线性回归:只有一个自变量 x 和一个因变量 y。
(2)多元线性回归:有多个自变量 x1, x2, …, xn 和一个因变量 y。
1.3、应用场景
线性回归算法广泛应用于各个领域,包括但不限于:
(1)经济学:预测股票价格、经济增长等。
(2)医学:预测疾病发病率、药物效果等。
(3)环境科学:预测气候变化、污染水平等。
(4)市场营销:预测销售量、市场份额等。
1.4、公式推导
线性回归方程的推导过程包括以下几个步骤:
(1)计算平均值:分别计算 x 和 y 的平均值。
(2)计算分子和分母:使用最小二乘法计算回归系数 b 和 a。
(3)建立方程:最终得到线性回归方程 y = bx + a,其中 b 是斜率,a 是截距。
1.5、实例分析
假设有一组数据点 (x1, y1), (x2, y2), …, (xn, yn),线性回归的目标是找到一条直线 y = bx + a,使得所有数据点到这条直线的垂直距离的平方和最小。通过最小二乘法,可以求解出最佳的 b 和 a 值,从而得到具体的线性回归方程。
1.6、具体代码
鸢尾花数据集介绍
该数据集包含了三个品种的鸢尾花(Setosa、Versicolor、Virginica)每个品种各有50个样本,共计150个样本。对于每个样本,测量了4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及其所属的品种标签。
数据集包括4个属性,分别为花萼的长、花萼的宽、花瓣的长和花瓣的宽。对花瓣我们可能比较熟悉,花萼是什么呢?花萼是花冠外面的绿色被叶,在花尚未开放时,保护着花蕾。四个属性的单位都是cm,属于数值变量,四个属性均不存在缺失值的情况,字段如下表所示:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import matplotlib
# 设置字体为SimHei,确保该字体在你的系统中存在
matplotlib.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
# 加载鸢尾花数据集
def LoadIrisDataset():
# 1.加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data # 特征数据,包含所有样本的4个特征
y = iris.target # 目标变量,目前我们只使用第一个目标(0-1-2类)
# 2.我们选择使用一个特征来进行线性回归,例如花瓣长度
X = X[:, [2]] # 选择第三个特征:花瓣长度
# 3.将数据集分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 4.创建线性回归模型
model = LinearRegression()
# 5.训练模型
model.fit(X_train, y_train)
# 6.预测测试集的结果
y_pred = model.predict(X_test)
# 7.评估模型性能
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
# 8.模型评估
print(f"系数(斜率): {model.coef_[0]}")
print(f"截距: {model.intercept_}")
print(f"均方误差 (MSE): {mse}")
print(f"决定系数 (R²): {r2}")
return X_test, y_test, y_pred
# 二、绘制回归结果
def PlotResults(X_test, y_test, y_pred):
plt.scatter(X_test, y_test, color="black", label="Data")
plt.plot(X_test, y_pred, color="blue", linewidth=3, label="Linear Regression")
plt.xlabel("花瓣长度 (cm)")
plt.ylabel(