当前位置: 首页 > news >正文

机器学习基础 -- 线性回归模型

 线性回归模型

    在机器学习中,线性回归模型是一种基础的模型算法,其数学原理通过最小二乘法使欧式距离(均方误差)最小化来求出w和b。

    本篇文章将介绍一些数学原理,给定几个数据并通过scikit-learn库中集成的LinearRegression进行代码实现,再使用matplotlib进行可视化展示。

 数学原理

   线性回归模型的数学表达式:

image

    其中线性回归模型就是通过一堆数据(x和y)来求出w和b,对于如何求出w和b,就需要求出均方误差(欧式距离):

image

     然后分别对w和b求偏导:

                

image

image

 

    分别令偏导为0,可以求出w和b的闭式解:

  

image

    这个过程可能会有一点复杂,主要考察数学知识,联立两个偏导为0的式子和y = wx+b,既可以求出解来。

  代码实现

    根据python语言的天然优势,有很多可以拿来科学计算的库,比如scikit-learn,numpy,pandas,matplotlib,我们可以很快速的使用python代码来进行我们的科学计算和模型训练。

    本篇文章使用scikit-learn库来实现一个简单的线性回归模型的训练和可视化展示,首先,如果之前没有安装过scikit-learn库,可以使用pip3进行安装。

    pip3 install  scikit-learn

    安装之后导入scikit-learn库:

from sklearn.linear_model import LinearRegression#线性回归模型类
from sklearn.model_selection import train_test_split #区分训练集和测试集
from sklearn.metrics import r2_score #R2评估
import matplotlib.pyplot as plt #绘制图像专用库
import numpy as np #生成数据点专用

 

    导入库之后输入数据集:

x = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]]#注意必须要是二维数组
y = [1,4,9,16,25,36,49,64,81,100,121,144,169]

    导入数据集之后区分训练集和测试集:

x_train,x_test,y_train,y_test = train_test_split(x,y,random_state = 42,train_size = 0.8)

    创建一个LinearRegression模型,并使用训练集进行训练

model = LinearRegression()
model.fit(x_train,y_train)

     这样我们就训练得到了一个model模型,运用这个模型我们可以进行未知数据的预测

y_pred = model.predict(x_test)

       接下来我们使用r2系数去评估这个模型

r2 = r2_score(y_test,y_pred)
print(r2)

      运行结果如下:

image

   r2的值为0.2非常接近于1,说明模型训练很成功,接下来我们使用matplotlib库进行图像绘制。

plt.figure(figsize=(10,6))
plt.xlabel("x")
plt.ylabel("y")
x_plot = np.linspace(0,13,100)#创建100个0-13的点
y_plot = model.predict(x_plot.reshape(-1,1))#重新将x_plot数组转换为二维数组
plt.plot(x_plot,y_plot)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.show()

  运行之后的结果:

image

  我们可以看到有一个直线去拟合了我们的数据点,这就是利用最小二乘法进行线性回归模型的最基础应用,具体的线性模型在生产生活中还有广泛应用。

  完整代码展示:

from sklearn.linear_model import LinearRegression#线性回归模型类
from sklearn.model_selection import train_test_split #区分训练集和测试集
from sklearn.metrics import r2_score #R2评估
import matplotlib.pyplot as plt
import numpy as np
x = [[1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13]]#注意必须要是二维数组
y = [1,4,9,16,25,36,49,64,81,100,121,144,169]
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state = 42,train_size = 0.8)model = LinearRegression()
model.fit(x_train,y_train)
y_pred = model.predict(x_test)
r2 = r2_score(y_test,y_pred)
print(r2)
plt.figure(figsize=(10,6))
plt.xlabel("x")
plt.ylabel("y")
x_plot = np.linspace(0,13,100)#创建100个0-13的点
y_plot = model.predict(x_plot.reshape(-1,1))#重新将x_plot数组转换为二维数组
plt.plot(x_plot,y_plot)
plt.scatter(x_train,y_train)
plt.scatter(x_test,y_test)
plt.show()

 

 

 

    

 

     

 

    

              

http://www.hskmm.com/?act=detail&tid=36128

相关文章:

  • 泰勒展开
  • MySQL 创建和授权用户
  • 因果机器学习算法新进展解析
  • 软件工程作业三
  • CF2127 Atto Round 1 (Codeforces Round 1041, Div. 1 + Div. 2) 游记(VP)
  • 一键生成爆款文章,并自动发布!
  • 机器学习到深度学习发展历程
  • Java数据类型
  • [CF 516 E] Drazil and His Happy Friends
  • NVIDIA Triton服务器漏洞危机:攻击者可远程执行代码,AI模型最高权限告急
  • 2025-10-21
  • 个人骗分导论
  • Java三大特性
  • 高级程序设计第二次作业
  • 10月21日日记
  • home-assistant.-Adding integrations
  • Windows系统内存占用过高,且任务管理器找不到对应进程
  • NOIP 二十五
  • 理想婚姻
  • equal和hashcode
  • Ancestral Problem 题解
  • AWS IAM角色最佳实践:构建云安全的核心防线
  • 正睿 2025 NOIP 20连测 Day6
  • Hetao P5593 删 题解 [ 蓝 ] [ 线性 DP ] [ DFS 序 ] [ 虚树 ]
  • o(N^2)找出所有回文子串
  • 第二次高级程序作业
  • 大学生需要认真听课的肌肉记忆(注意力训练)
  • 初始人工智能和机器学习
  • 10/21
  • 蛋白表达技术概述