- 本文为🔗365天深度学习训练营 中的学习记录博客
 - 原作者:K同学啊
 
任务:
 ●1. 通过本文学习LinearRegression简单线形回归模型。
 ●2. 模仿本文代码,通过鸢尾花花瓣长度预测花瓣宽度。
一、概念
- 什么是回归
 
回归的目的是为了预测,比如在通过鸢尾花花瓣长度预测花瓣宽度。
回归之所以能预测,是因为它通过大量的花瓣长度与宽度数据,“弄懂了”花瓣长度与宽度之间的线性关系,在这个基础之上就可以通过花瓣长度预测花瓣宽度了。
- 什么是线性
 
线性就是关系可以用线性方程来表示,通过一个或多个变量来表示另外一个变量。
通俗的说符合“越…,越…”这种说法的可能就是线性关系,比如
●“房子”越大,“租金”就越高。
●“汉堡”买的越多,花的“钱”就越多。
●杯子里的“水”越多,“重量”就越大。
但是也并非所有“越…,越…”都是线性的,比如“弹簧的弹力与位移的关系”。
 
- 什么是线性回归
 
通过两个或多个变量之间的线性关系来预测结果。
通过鸢尾花的花瓣长度与宽度的线性关系来预测花瓣宽度,通过杯子里水的体积就可以知道(预测)水的重量。
二、代码实现
我的环境:
 ●语言环境:Python3.9
 ●编译器:Jupyter Lab
这里我们采用“学习时长-成绩”数据集,采用LinearRegression简单线形回归模型,通过学习时长去预测学生成绩。
第1步:数据预处理
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
dataset = pd.read_csv('./L2/studentscores.csv')
X = dataset.iloc[ : , :1].values
Y = dataset.iloc[ : ,1].values
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, 
                                                    test_size=1/4, 
                                                    random_state=0)
 
dataset
 
代码输出:
| Hours | Scores | |
|---|---|---|
| 0 | 2.5 | 21 | 
| 1 | 5.1 | 47 | 
| 2 | 3.2 | 27 | 
| 3 | 8.5 | 75 | 
| 4 | 3.5 | 30 | 
| 5 | 1.5 | 20 | 
| 6 | 9.2 | 88 | 
| 7 | 5.5 | 60 | 
| 8 | 8.3 | 81 | 
| 9 | 2.7 | 25 | 
| 10 | 7.7 | 85 | 
| 11 | 5.9 | 62 | 
| 12 | 4.5 | 41 | 
| 13 | 3.3 | 42 | 
| 14 | 1.1 | 17 | 
| 15 | 8.9 | 95 | 
| 16 | 2.5 | 30 | 
| 17 | 1.9 | 24 | 
| 18 | 6.1 | 67 | 
| 19 | 7.4 | 69 | 
| 20 | 2.7 | 30 | 
| 21 | 4.8 | 54 | 
| 22 | 3.8 | 35 | 
| 23 | 6.9 | 76 | 
| 24 | 7.8 | 86 | 
| 25 | 9.1 | 93 | 
| 26 | 9.2 | 93 | 
| 27 | 9.5 | 93 | 
train_test_split()函数详解:
train_test_split():将数据集划分为测试集与训练集。
●X:所要划分的整体数据的特征集;
●Y:所要划分的整体数据的结果;
●test_size:测试集数据量在整体数据量中的占比(可以理解为X_test与X的比值);
●random_state:
○①若不填或者填0,每次生成的数据都是随机,可能不一样。
○②若为整数,每次生成的数据都相同。
第2步:简单线性回归模型
sklearn.linear_model包实现了广义线性模型,包括线性回归、Ridge回归、Bayesian回归等。LinearRegression是其中较为简单的线性回归模型。
from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)
 
第3步:预测结果
Y_pred = regressor.predict(X_test)
 
Y_pred
 
代码输出:
array([33.40062313, 39.26803909, 12.86466728, 20.68788856, 16.77627792,
       59.80399493, 78.38414546])
 
第4步:可视化
- 训练集可视化
 
plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='blue')
plt.show()
 
代码输出:
 
- 测试集预测结果可视化
 
plt.scatter(X_test, Y_test, color='red')
plt.plot(X_test, regressor.predict(X_test), color='blue')
plt.show()
 
代码输出:

三、鸢尾花数据集导入
这里的任务需要使用到的数据集,你可以这样导入:
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class'] 
dataset = pd.read_csv(url, names=names)
dataset
 
代码输出:
| 花萼-length | 花萼-width | 花瓣-length | 花瓣-width | class | |
|---|---|---|---|---|---|
| 0 | 5.1 | 3.5 | 1.4 | 0.2 | Iris-setosa | 
| 1 | 4.9 | 3.0 | 1.4 | 0.2 | Iris-setosa | 
| 2 | 4.7 | 3.2 | 1.3 | 0.2 | Iris-setosa | 
| 3 | 4.6 | 3.1 | 1.5 | 0.2 | Iris-setosa | 
| 4 | 5.0 | 3.6 | 1.4 | 0.2 | Iris-setosa | 
| ... | ... | ... | ... | ... | ... | 
| 145 | 6.7 | 3.0 | 5.2 | 2.3 | Iris-virginica | 
| 146 | 6.3 | 2.5 | 5.0 | 1.9 | Iris-virginica | 
| 147 | 6.5 | 3.0 | 5.2 | 2.0 | Iris-virginica | 
| 148 | 6.2 | 3.4 | 5.4 | 2.3 | Iris-virginica | 
| 149 | 5.9 | 3.0 | 5.1 | 1.8 | Iris-virginica | 
150 rows × 5 columns



















