简单线性回归模型介绍及python实现

  • 一、 基本概念
  • 二、模型训练
  • 三、应用
  • 四、优缺点
  • 五、Python示例
    • 1、示例一
    • 2、示例二
    • 3、 scatter函数详解
      • 基本用法
      • 参数详解
      • 高级用法
        • 改变点的大小和颜色
        • 添加标题和轴标签
        • 颜色条
      • 示例

简单线性回归是人工智能和统计学中一个基本的预测技术,用于分析两个连续变量之间的线性关系。在简单线性回归中,我们试图找到一个线性方程来最好地描述这两个变量之间的关系。

一、 基本概念

  1. 变量:简单线性回归涉及两个变量 – 自变量(independent variable)和因变量(dependent variable)。自变量通常是我们控制或选择的变量,而因变量是我们试图预测的变量。

  2. 线性关系:假设自变量(X)和因变量(Y)之间存在线性关系,可以表示为 Y = aX + b,其中a是斜率(slope),b是截距(intercept)。

二、模型训练

  • 最小二乘法:这是一种数学优化技术,用于找到最佳拟合线,使得所有数据点到回归线的垂直距离(即残差)的平方和最小。

  • 斜率和截距:通过数据计算得到的斜率和截距定义了最佳拟合线,可用于预测。

三、应用

简单线性回归在多个领域都有应用,例如:

  • 经济学:预测消费者支出、市场趋势。
  • 生物学:研究环境变化对物种的影响。
  • 工程:分析材料的压力和变形等。

四、优缺点

  • 优点:模型简单易懂;计算要求不高;可解释性强。
  • 缺点:仅适用于线性关系;对异常值敏感;不适用于复杂的关系或多个自变量的情况。

五、Python示例

1、示例一

在Python中,可以使用scikit-learn库来实现简单线性回归:

from sklearn.linear_model import LinearRegressionimport numpy as npimport matplotlib.pyplot as plt# 示例数据X = np.array([[1], [2], [3], [4]]) # 自变量Y = np.array([2, 4, 6, 8]) # 因变量# 创建模型并拟合数据model = LinearRegression()model.fit(X, Y)# 预测X_new = np.array([[5]])y_pred = model.predict(X_new)# 绘图plt.scatter(X, Y, color='blue')# 原始数据点plt.plot(X, model.predict(X), color='red')# 拟合的直线plt.scatter(X_new, y_pred, color='green')# 预测点plt.title("Simple Linear Regression")plt.xlabel("X")plt.ylabel("Y")plt.show()y_pred

2、示例二

比如你做了一个企业想要招人,但是不知道月薪应该定在多少,你做了一个月薪和收入的调研,并做一个y=w*x+b的工作年限和薪资的线性模型,来预估你可以每个月给员工发薪资在哪个区间

import pandas as pd# 导入url = "https://raw.githubusercontent.com/Salary_Data.csv"data = pd.read_csv(url)data# y = w*x + bx = data["YearsExperience"]y = data["Salary"]x

运行结果:

00.310.620.831.141.351.562.072.282.993.010 3.211 3.212 3.713 3.914 4.015 4.016 4.117 4.518 4.919 5.120 5.321 5.922 6.023 6.824 7.125 7.926 8.227 8.728 9.029 9.530 9.63110.33210.5Name: YearsExperience, dtype: float64
## 下载汉语!pip install wget import wgetwget.download("https://github.com/ChineseFont.ttf")
# 运行结果Collecting wgetDownloading wget-3.2.zip (10 kB)Preparing metadata (setup.py) ... doneBuilding wheels for collected packages: wgetBuilding wheel for wget (setup.py) ... doneCreated wheel for wget: filename=wget-3.2-py3-none-any.whl size=9655 sha256=24b9cab9f8aabad3e8e810a1a1322dd97d1b82b03d786e44d7b1a6401a23a8e8Stored in directory: /root/.cache/pip/wheels/8b/f1/7f/5c94f0a7a505ca1c81cd1d9208ae2064675d97582078e6c769Successfully built wgetInstalling collected packages: wgetSuccessfully installed wget-3.2ChineseFont.ttf

定义一个函数实现y=w*x+b模型

def plot_pred(w,b):y_pred = w*x + bplt.plot(x,y_pred,c="blue",label="预测线")plt.scatter(x,y,marker="x",color="red",label="真是数据")# 添加标题和轴标签plt.title("年资-薪水")plt.xlabel("年资")plt.ylabel("月薪(千)")plt.xlim([0, 12])plt.ylim([-60, 140])plt.legend()plt.show()plot_pred(3,10)


引入ipywidgets 模块 自动进行调整w b参数

from ipywidgets import interactinteract(plot_pred,w=(-100,200,1),b=(-100,200,1))

简单线性回归是了解机器学习的一个很好的起点,为理解更复杂的模型打下基础。

3、 scatter函数详解

在Python中,scatter 函数通常用于绘制散点图,它是matplotlib库中的一个功能。散点图是用来展示两个变量之间关系的图表类型,其中每个点的位置由两个变量的值决定。下面是关于scatter 函数的详细用法介绍:

基本用法

首先,你需要导入matplotlib库中的pyplot模块:

import matplotlib.pyplot as plt

基本的scatter 函数用法如下:

plt.scatter(x, y)plt.show()

这里,xy 是两个相同长度的列表或数组,分别代表散点图中每个点的X和Y坐标。

参数详解

scatter 函数提供了许多参数来自定义散点图:

  • s:点的大小。可以是单个值或与数据点数量相同的数组。
  • c:点的颜色。可以是颜色名称、RGB值或与数据点数量相同长度的颜色数组。
  • marker:表示点的形状,如’o’表示圆形,’s’表示方形等。
  • alpha:点的透明度,范围从0(完全透明)到1(完全不透明)。

高级用法

改变点的大小和颜色

你可以根据数据点的某些特性来改变点的大小和颜色。例如,假设你有另一个数组sizes,用于表示每个点的大小:

plt.scatter(x, y, s=sizes)plt.show()

同样,如果你有一个数组colors用于指定每个点的颜色:

plt.scatter(x, y, c=colors)plt.show()
添加标题和轴标签

为了使图表更加易于理解,你可以添加标题和轴标签:

plt.scatter(x, y)plt.title("Scatter Plot Example")plt.xlabel("X Axis Label")plt.ylabel("Y Axis Label")plt.show()
颜色条

如果你根据变量给点着色,你可能想添加一个颜色条来表示这种映射:

scatter = plt.scatter(x, y, c=colors)plt.colorbar(scatter)plt.show()

示例

以下是一个完整的例子,展示了如何创建一个自定义的散点图:

import matplotlib.pyplot as pltimport numpy as np# 创建数据x = np.random.rand(50)y = np.random.rand(50)colors = np.random.rand(50)sizes = 1000 * np.random.rand(50)# 绘制散点图plt.scatter(x, y, c=colors, s=sizes, alpha=0.5, cmap='viridis')plt.colorbar()# 显示颜色条# 添加标题和轴标签plt.title("Customized Scatter Plot")plt.xlabel("X Axis")plt.ylabel("Y Axis")# 展示图表plt.show()

这段代码创建了一个散点图,其中点的大小和颜色由随机数决定,使用了颜色映射(cmap)来指定颜色范围。