简单线性回归模型介绍及python实现
- 一、 基本概念
- 二、模型训练
- 三、应用
- 四、优缺点
- 五、Python示例
- 1、示例一
- 2、示例二
- 3、 scatter函数详解
- 基本用法
- 参数详解
- 高级用法
- 改变点的大小和颜色
- 添加标题和轴标签
- 颜色条
- 示例
简单线性回归是人工智能和统计学中一个基本的预测技术,用于分析两个连续变量之间的线性关系。在简单线性回归中,我们试图找到一个线性方程来最好地描述这两个变量之间的关系。
一、 基本概念
变量:简单线性回归涉及两个变量 – 自变量(independent variable)和因变量(dependent variable)。自变量通常是我们控制或选择的变量,而因变量是我们试图预测的变量。
线性关系:假设自变量(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()
这里,x
和 y
是两个相同长度的列表或数组,分别代表散点图中每个点的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)来指定颜色范围。