机器学习/数据分析--通俗语言带你入门线性回归(结合案例)

前言

  • 机器学习是深度学习和数据分析的基础,接下来将更新常见的机器学习算法
  • 注意:在打数学建模比赛中,机器学习用的也很多,可以一起学习
  • 欢迎收藏 + 点赞 + 关注

1、基础概念简介

1、什么是回归?

  • 回归的目的是预测,如我们高中学过的最小二乘回归,通过自变量(X)预测因变量(Y)。
  • 回归之所以能预测,是因为它通过大量的自变量(X)去拟合因变量(Y),寻找他们之间的线性关系。

2、什么是线性

  • 线性关系就是可以用一个线性方程来表示(通过一个或者多个变量来表示另外一个变量)
  • 如图一个最简单的一元线性回归:
  • 在这里插入图片描述

3、什么是线性回归?

一句话概括就是:通两个或者多个变量来预测结果

4、西瓜书中回归表达式

给定由d个属性描述的示例 x = ( x 1 ; x 2 ; … ; x d ) \boldsymbol{x}=(x_1;x_2;\ldots;x_d) x=(x1;x2;;xd) ,其中心是x在第i个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即

在这里插入图片描述

向量表达式为:

f ( x ) = w T x + b , ‾ \underline{f(\boldsymbol{x})=\boldsymbol{w}^\mathrm{T}\boldsymbol{x}+b ,} f(x)=wTx+b,

线性回归的求解就是解 w \boldsymbol{w} w 和 b参数

2、一元线性回归

1、表达式

f ( x ) = w x + b f(x)=wx+b f(x)=wx+b

  • w w w在高中学习中叫做斜率,b叫做截距,但是,在机器学习中 w w w叫做权重,b叫做偏置
  • 回归问题的求解就是求解 w \boldsymbol{w} w 和 b参数

2、案例求解

以一个成绩预测为例,步骤为:

  1. 导入库和数据
  2. 数据预处理
  3. 创建简单线性回归模型
  4. 预测结果
  5. 误差分析
  6. 模型展示

1、导入库

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_csv("./studentscores.csv")
data
HoursScores
02.521
15.147
23.227
38.575
43.530
51.520
69.288
75.560
88.381
92.725
107.785
115.962
124.541
133.342
141.117
158.995
162.530
171.924
186.167
197.469
202.730
214.854
223.835
236.976
247.886
259.193
269.293
279.593

2、数据预处理

# 获取数据和数据划分
from sklearn.model_selection import train_test_split

x = data.iloc[:, :1].values   # data.iloc[:, 1] 与 data.iloc[:, :1] 的区别,前者返回一维数组,后者返回二维数组
y = data.iloc[:, 1].values 

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=42)

3、创建简单的线性回归模型

from sklearn.linear_model import LinearRegression

model = LinearRegression()
model.fit(x_train, y_train)  # 模型拟合

4、预测结果

y_pred =  model.predict(x_test)
y_pred

结果:

array([29.72354202, 91.35223136, 83.64864519, 49.94545571, 27.79764548,
       47.0566109 , 22.01995585])

5、误差分析

from sklearn.metrics import mean_squared_error 
mse = mean_squared_error(y_test, y_pred)  # 计算均分误差,回归最常用的评价指标
print(mse)

结果:

19.327533697713523    

结合成绩数据,误差还可以,想要更直观,可以先对数据进行标准化

6、模型展示

from matplotlib import rcParams
# 设置字体为SimHei显示中文
rcParams['font.family'] = 'SimHei'

# 创建画布
plt.figure(figsize=(12, 3))
# 创建子图
plt.subplot(1, 2, 1)
plt.scatter(x_train, y_train, color='red')
plt.plot(x_train, model.predict(x_train), label='训练集拟合', color='blue')
plt.title('训练集拟合')
# 创建子图
plt.subplot(1, 2, 2)
plt.scatter(x_test, y_test, color='red')
plt.plot(x_test, model.predict(x_test), label='测试集拟合', color='blue')
plt.title('测试集拟合')

plt.show()

在这里插入图片描述

3、多元线性回归

1、表达式

在这里插入图片描述

  • 多元线性回归:影响Y的因素不唯一,有多个
  • 一元线性回归:影响Y的因素唯一,只有一个

2、案例求解

鸢尾花数据集,预测花瓣长度

  • 因变量Y:花瓣宽度
  • 自变量X:花萼长度,花萼宽度,花瓣长度

1、数据预处理

1、导入数据集
import numpy as np 
import pandas as pd 

# 网络下载 鸢尾花 数据集合
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"
name = ['花萼-length', '花萼-widget', '花瓣-length', '花瓣-widget', 'class']

data = pd.read_csv(url, names=name)
data
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
花萼-length花萼-widget花瓣-length花瓣-widgetclass
05.13.51.40.2Iris-setosa
14.93.01.40.2Iris-setosa
24.73.21.30.2Iris-setosa
34.63.11.50.2Iris-setosa
45.03.61.40.2Iris-setosa
..................
1456.73.05.22.3Iris-virginica
1466.32.55.01.9Iris-virginica
1476.53.05.22.0Iris-virginica
1486.23.45.42.3Iris-virginica
1495.93.05.11.8Iris-virginica

150 rows × 5 columns

2、数据分析
# 展示 不同 变量 对花瓣宽度的影响长度
import matplotlib.pyplot as plt 

plt.plot(data['花萼-length'], data['花瓣-widget'], 'x', label="marker='x'")
plt.plot(data['花萼-widget'], data['花瓣-widget'], 'o', label="marker='o'")
plt.plot(data['花瓣-length'], data['花瓣-widget'], 'v', label="marker='v'")

plt.legend()
plt.show()


在这里插入图片描述

通过观察发现:没有聚类特征,各变量之间没有什么关系,没有什么规律可言

3、划分测试集和训练集
from sklearn.model_selection import train_test_split

X = data.iloc[:, :2].values
y = data.iloc[:, 3].values

# 训练集:0.8,测试集:0.2
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
4、数据标准化
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
X_train_scaler = scaler.fit_transform(X_train)
X_test_sacler = scaler.transform(X_test)

2、模型创建和训练

from sklearn.linear_model import LinearRegression

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

3、模型预测

y_pred = model.predict(X_test_sacler)

4、误差计算

# 采用均方根误差计算
from sklearn.metrics import mean_squared_error

mse = mean_squared_error(y_pred, y_test)
print("mse", mse)
mse 0.12290992506217009

5、结果图示

# 展示预测值和真实值分布
plt.scatter(y_test,y_pred, color='red')

plt.xlabel("Prediction")
plt.ylabel("True");

plt.show()


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值