机器学习基础之《回归与聚类算法(1)—线性回归》

一、线性回归的原理

1、线性回归应用场景

如何判定一个问题是回归问题的,目标值是连续型的数据的时候

房价预测

销售额度预测

贷款额度预测、利用线性回归以及系数分析因子

2、线性回归定义

线性回归(Linear regression)是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式

找到一种函数关系,来表示特征值和目标值之间的关系

3、函数关系

(1)首先假定特征值x1、x2、x3

(2)目标值是h(w)

(3)每个特征前还有个系数,w1、w2、w3,叫做权重值,也叫回归系数

(4)右边+b,叫做偏置系数

(5)只有一个自变量的情况称为单变量回归,大于一个自变量情况的叫做多元回归

用习惯的写法:

y = w1x1 + w2x2 + w3x3 + ... + wnxn + b

= wTx + b

PS:wT叫做w的转置

例子:

期末成绩:0.7×考试成绩 + 0.3×平时成绩

预测房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率

4、广义线性模型

线性回归当中的关系有两种,一种是线性关系,另一种是非线性关系。在这里我们只能画一个平面更好去理解,所以都用单个特征举例子

(1)线性关系

特征只有一个房屋面积,预测房屋价格,在一个平面当中,可以找到一条直线去拟合他们之间的关系,y = kx + b

如果有两个特征:

要拟合x1、x2和y之间的关系,y = w1x1 + w2x2 + b

如果在单特征与目标值的关系呈直线关系,或者两个特征与目标值呈现平面的关系

更高维度的我们不用自己去想,记住这种关系即可

(2)非线性关系

为什么非线性关系,也叫线性模型

线性模型

自变量一次

y = w1x1 + w2x2 + w3x3 + ... + wnxn + b

参数一次

y = w1x1 + w2x1^2 + w3x1^3 + w4x2^3 + ... + b

就是w和x有一个是一次的,不是多次的,都可以叫线性模型

(3)线性关系&线性模型

线性关系一定是线性模型,线性模型不一定是线性关系

二、线性回归的损失和优化原理

1、目标:求模型参数

模型参数能够使得预测准确

2、预测房屋价格

真实关系:真实房子价格 = 0.02×中心区域的距离 + 0.04×城市一氧化氮浓度 + (-0.12×自住房平均房价) + 0.254×城镇犯罪率

随意假定关系:预测房子价格 = 0.25×中心区域的距离 + 0.14×城市一氧化氮浓度 + 0.42×自住房平均房价 + 0.34×城镇犯罪率

当我们把特征值代入到假定的关系当中,预测价格和真实价格肯定有一个误差,如果我们有一种方法,将这个误差不断的减少,让它最终接近于0的话,是不是就意味着模型参数比较准确了

3、真实值和预测值之间的差距如何去衡量

衡量的关系,叫做损失函数/cost/成本函数/目标函数

目标:希望找到所有真实的样本,到预测的距离之和比较小,可以求出比较合适的权重和偏置

4、损失函数

y1:真实值

hw(x1):预测值

预测值-真实值,再求个平方,因为预测值有可能小于真实值

这个公式又叫最小二乘法,有计算平方,又希望这个损失越小越好

为什么不用绝对值:

(1)如果不加绝对值或者平方,距离是会相互抵消的,这是不正确的

(2)加绝对值也就是平方再开根号,而且绝对值求导麻烦,所以直接用了平方

如何去减少这个损失,使我们预测的更加准确些?既然存在了这个损失,我们一直说机器学习有自动学习的功能,在线性回归这里更是能够体现。这里可以通过一些优化方法去优化(其实是数学当中的求导功能)回归的总损失!

5、优化算法

正规方程和梯度下降,正规方程相当于一个天才,梯度下降相当于一个勤奋努力的普通人

6、正规方程(用的少)

通过一个矩阵运算,先求特征值转置,然后乘以它本身,再求一个逆,再乘以它的转置,再乘以y,直接求出w权重

理解:X为特征值矩阵,y为目标值矩阵。直接求到最好的结果

缺点:当特征过多过复杂时,求解速度太慢并且得不到结果

7、梯度下降(常用)

一开始随便给一组权重和偏置,不断的改进、试错

第二组的w1、w0等于上一组的w1、w0减去一个数

我们通过两个图更好理解梯度下降的过程:

理解:α为学习速率(步长),需要手动指定(超参数),α旁边的整体表示方向(坡度最陡的)

沿着这个函数下降的方向找,最后就能找到山谷的最低点,然后更新w值

使用:面对训练数据规模十分庞大的任务,能够找到较好的结果

8、动态图演示

三、线性回归API

1、sklearn.linear_model.LinearRegression(fit_intercept=True)

通过正规方程优化

fit_intercept:是否计算偏置(截距)

查看参数

LinearRegression.coef_:回归系数

LinearRegression.intercept_:偏置

2、sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='invscaling', eta0=0.01)

通过梯度下降优化,它支持不同的loss函数和正则化惩罚项来拟合线性回归模型

loss:损失函数

loss="squared_loss",普通最小二乘法

fit_intercept:是否计算偏置

learning_rate:学习率(步长),指定学习率算法

'constant':eta = eta0

'optimal':eta = 1.0 / (alpha * (t + t0)) [default]

'invscaling':eta = eta0 / pow(t, power_t),看动态图演示,步长一开始很长,越接近最低点,越小

power_t=0.25:存在父类当中

对于一个常数值的学习率来说,可以使用learning_rate='constant' ,并使用eta0来指定学习率

查看参数

SGDRegressor.coef_:回归系数

SGDRegressor.intercept_:偏置

四、波士顿房价预测

1、数据集地址

下载数据集:https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data

该数据集统计了13种可能影响房价的因素和该类型房屋的均价,期望构建一个基于13个因素进行房价预测的模型

2、分析流程

流程:

1)获取数据集

2)划分数据集

3)特征工程

无量纲化 - 标准化

4)预估器流程

fit() --> 模型

coef_ intercept_

5)模型评估

3、代码 day03_machine_learning.py

python 复制代码
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, SGDRegressor

def linear1():
  """
  正规方程的优化方法对波士顿房价进行预测
  """
  # 1、获取数据
  boston = load_boston()

  # 2、划分数据集
  x_train,x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=10)

  # 3、标准化
  transfer = StandardScaler()
  x_train = transfer.fit_transform(x_train)
  x_test = transfer.transform(x_test)
  
  # 4、预估器
  estimator = LinearRegression()
  estimator.fit(x_train, y_train)

  # 5、得出模型
  print("正规方程-权重系数为:\n", estimator.coef_)
  print("正规方程-偏置为:\n", estimator.intercept_)

  # 6、模型评估
  
  return None

def linear2():
  """
  梯度下降的优化方法对波士顿房价进行预测
  """
  # 1、获取数据
  boston = load_boston()

  # 2、划分数据集
  x_train,x_test, y_train, y_test = train_test_split(boston.data, boston.target, random_state=10)

  # 3、标准化
  transfer = StandardScaler()
  x_train = transfer.fit_transform(x_train)
  x_test = transfer.transform(x_test)
  
  # 4、预估器
  estimator = SGDRegressor()
  estimator.fit(x_train, y_train)

  # 5、得出模型
  print("梯度下降-权重系数为:\n", estimator.coef_)
  print("梯度下降-偏置为:\n", estimator.intercept_)

  # 6、模型评估
  
  return None

if __name__ == "__main__":
  # 代码1:正规方程的优化方法对波士顿房价进行预测
  linear1()
  # 代码2:梯度下降的优化方法对波士顿房价进行预测
  linear2()

运行结果:

python 复制代码
正规方程-权重系数为:
 [-1.16537843  1.38465289 -0.11434012  0.30184283 -1.80888677  2.34171166
  0.32381052 -3.12165806  2.61116292 -2.10444862 -1.80820193  1.19593811
 -3.81445728]
正规方程-偏置为:
 21.93377308707127
梯度下降-权重系数为:
 [-1.10621345  1.29133856 -0.27846867  0.33474439 -1.69384501  2.4135466
  0.29053621 -3.08390938  2.01002437 -1.44580391 -1.77085656  1.20016946
 -3.77661902]
梯度下降-偏置为:
 [21.9475731]
相关推荐
静心问道37 分钟前
WGAN算法
深度学习·算法·机器学习
Kenneth風车1 小时前
【机器学习(五)】分类和回归任务-AdaBoost算法-Sentosa_DSML社区版
人工智能·算法·低代码·机器学习·数据分析
鸽芷咕1 小时前
【Python报错已解决】python setup.py bdist_wheel did not run successfully.
开发语言·python·机器学习·bug
aWty_3 小时前
机器学习--卷积神经网络(包括python实现)
人工智能·机器学习·cnn
5pace3 小时前
机器学习(西瓜书)第 14 章 概率图模型
人工智能·机器学习
阿利同学4 小时前
热成像目标检测数据集
人工智能·目标检测·机器学习·目标跟踪·数据集·热成像目标检测数据集·机器学习 深度学习
AI完全体6 小时前
AI小项目4-用Pytorch从头实现Transformer(详细注解)
人工智能·pytorch·深度学习·机器学习·语言模型·transformer·注意力机制
Alluxio官方6 小时前
Alluxio Enterprise AI on K8s 部署教程
人工智能·机器学习·kubernetes
Alluxio官方6 小时前
Alluxio Enterprise AI on K8s FIO 测试教程
人工智能·机器学习
AI大模型知识分享6 小时前
Prompt最佳实践|指定输出的长度
人工智能·gpt·机器学习·语言模型·chatgpt·prompt·gpt-3