机器学习中常用的线性回归问题

2023-10-30

一、线性回归的定义及矩阵运算

线性回归的定义是:目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

优点:结果易于理解,计算不复杂

缺点:对非线性的数据拟合不好

适用数据类型:数值型和标称型

房价例子中房子的大小预测房子的价格。f(x) = w1*x+w0,这样通过主要参数w1就可以得出预测的值。

通用公式为:

在这里插入图片描述

对于多变量回归,例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3*敲声,得出的值来判断一个瓜的好与不好的程度。

通用公式为:

在这里插入图片描述

线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。

因此可以通过向量的方式来表示W值与特征X值之间的关系:

在这里插入图片描述

两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值x_0x0=1,那么我们可以通过通用的向量公式来表示线性模型:

在这里插入图片描述

损失函数

损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,通过显性的公式来描述这个误差,并且将这个误差优化到最小值。

对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是就有了误差公式,模型与数据差的平方和最小:

在这里插入图片描述

为了使这个值最小,就有了梯度下降算法正规方程解法

二、线性回归策略和优化

梯度下降

上面误差公式是一个通式,我们取两个单个变量来求最小值,误差和可以表示为:

在这里插入图片描述

可以通过调整不同的w1w0的值,就能使误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的w1,w0 而这对(w1,w0)就是能最好描述你数据关系的模型参数。

找cost(w0+w1x1)的放法就是求解关于cost与w1的偏导数,当其为最小时即可

在这里插入图片描述

所以有:

在这里插入图片描述

个过程是按照某一点在w1上的偏导数下降寻找最低点。当然在进行移动的时候也需要考虑,每次移动的速度,也就是α的值,这个值也叫做(学习率),如下式:

在这里插入图片描述

LinearRegression

class LinearRegression(fit_intercept = True,normalize = False,copy_X = True,n_jobs = 1)
  """
  :param normalize:如果设置为True时,数据进行标准化。请在使用normalize = False的估计器调时用fit之前使用preprocessing.StandardScaler

  :param copy_X:boolean,可选,默认为True,如果为True,则X将被复制

  :param n_jobs:int,可选,默认1。用于计算的CPU核数
  """
    
reg = LinearRegression()

方法

method use detail
fit reg.fit(X,y,sample_weight = None) 使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵
predict reg.predict([[3,3]]) 预测提供的数据对应的结果

属性

属性 use detail
coef__ reg.coef_ 表示回归系数w=(w1,w2…)
intercept_ 表示w0

加入交叉验证

由于sklearn中另外两种回归岭回归、lasso回归都提供了回归CV方法,比如linear_model.Lasso,交叉验证linear_model.LassoCV; linear_model.Ridge, 交叉验证linear_model.RidgeCV。所以需要通过cross_validation提供的方法进行k-折交叉验证。

from sklearn.datasets.samples_generator import make_regression
from sklearn.model_selection import cross_val_score
from sklearn import linear_model
import matplotlib.pyplot as plt

lr = linear_model.LinearRegression()
X, y = make_regression(n_samples=200, n_features=5000, random_state=0)
result = cross_val_score(lr, X, y)
print result

三、线性回归的求解总结

使用scikit-learn中内置的回归模型对“美国波士顿房价”数据进行预测,网址:https://www.kaggle.com/datasets

1.美国波士顿地区房价数据描述

from sklearn.datasets import load_boston

boston = load_boston()

print boston.DESCR

2.波士顿地区房价数据分割

from sklearn.cross_validation import train_test_split
import numpy as np
X = boston.data
y = boston.target

X_train,X_test,y_train,y_test = train_test_split(X,y,random_state=33,test_size = 0.25)

3.训练与测试数据标准化处理

from sklearn.preprocessing import StandardScaler
ss_X = StandardScaler()
ss_y = StandardScaler()

X_train = ss_X.fit_transform(X_train)
X_test = ss_X.transform(X_test)
y_train = ss_X.fit_transform(y_train)
X_train = ss_X.transform(y_test)

4.使用最简单的线性回归模型LinearRegression和梯度下降估计SGDRegressor对房价进行预测

from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X_train,y_train)
lr_y_predict = lr.predict(X_test)

from sklearn.linear_model import SGDRegressor
sgdr = SGDRegressor()
sgdr.fit(X_train,y_train)
sgdr_y_predict = sgdr.predict(X_test)

5.性能评测

对于不同的类别预测,我们不能苛刻的要求回归预测的数值结果要严格的与真实值相同。一般情况下,我们希望衡量预测值与真实值之间的差距。因此,可以测评函数进行评价。其中最为直观的评价指标均方误差(Mean Squared Error)MSE,因为这也是线性回归模型所要优化的目标。

MSE的计算方法如式:

在这里插入图片描述

使用MSE评价机制对两种模型的回归性能作出评价

from sklearn.metrics import mean_squared_error

print '线性回归模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_tranform(lr_y_predict))
print '梯度下降模型的均方误差为:',mean_squared_error(ss_y.inverse_transform(y_test),ss_y.inverse_tranform(sgdr_y_predict))

通过这一比较发现,使用梯度下降估计参数的方法在性能表现上不及使用解析方法的LinearRegression,但是如果面对训练数据规模十分庞大的任务,随即梯度法不论是在分类还是回归问题上都表现的十分高效,可以在不损失过多性能的前提下,节省大量计算时间。根据Scikit-learn光网的建议,如果数据规模超过10万,推荐使用随机梯度法估计参数模型。

注意:线性回归器是最为简单、易用的回归模型。正式因为其对特征与回归目标之间的线性假设,从某种程度上说也局限了其应用范围。特别是,现实生活中的许多实例数据的各种特征与回归目标之间,绝大多数不能保证严格的线性关系。尽管如此,在不清楚特征之间关系的前提下,我们仍然可以使用线性回归模型作为大多数数据分析的基线系统。

四、过拟合以及欠拟合

在对训练数据进行拟合时,需要照顾到每个点,而其中有一些噪点,当某个模型过度的学习训练数据中的细节和噪音,以至于模型在新的数据上表现很差,这样的话模型容易复杂,拟合程度较高,造成过拟合。而相反如果值描绘了一部分数据那么模型复杂度过于简单,欠拟合指的是模型在训练和预测时表现都不好的情况,称为欠拟合。

在这里插入图片描述

欠拟合underfitting指的是模型在训练和预测时表现都不好的情况,欠拟合通常不被讨论,因为给定一个评估模型表现的指标的情况下,欠拟合很容易被发现。矫正方法是继续学习并且试着更换机器学习算法。

在这里插入图片描述

对于过拟合overfitting,特征集合数目过多,我们需要做的是尽量不让回归系数数量变多,对拟合(损失函数)加以限制。

(1)当然解决过拟合的问题可以减少特征数,显然这只是权宜之计,因为特征意味着信息,放弃特征也就等同于丢弃信息,要知道,特征的获取往往也是艰苦卓绝的。

(2)引入了 正则化 概念。

五、Ridge岭回归分析

岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。当数据集中存在共线性的时候,岭回归就会有用。

sklearn.linear_model.Ridge

class sklearn.linear_model.Ridge(alpha=1.0, fit_intercept=True, normalize=False, copy_X=True, max_iter=None, tol=0.001, solver='auto', random_state=None)**
  """
  :param alpha:float类型,正规化的程度
  """
from sklearn.linear_model import Ridge
clf = Ridge(alpha=1.0)
clf.fit([[0, 0], [0, 0], [1, 1]], [0, .1, 1]))

方法

method use detail
score score(X, y, sample_weight=None) clf.score()

属性

attribute detail
coef_ clf.coef_
intercept_ clf.intercept_

csdn不定期打包发送,微信每日一篇,快乐学习,赢在中国
欢迎大家关注这个微信公众号,尊重原创,转载请注明出处
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

机器学习中常用的线性回归问题 的相关文章

随机推荐

  • MATLAB中fillmissing函数用法

    目录 语法 说明 示例 包含 NaN 值的向量 由 NaN 值组成的矩阵 插入缺失数据 使用移动中位数方法 使用自定义填充方法 包含缺失端点的矩阵 包含多个数据类型的表 fillmissing函数的功能是填充缺失的条目 语法 F fillm
  • 【Educoder作业】冯·诺依曼体系结构及工作原理理解

    Educoder作业 冯 诺依曼体系结构及工作原理理解 所有的那个实际场景模拟的题就不更了 没难度 趣味性更高 这个题和我们之前的一篇博客里面的题只一模一样的 链接 我们这里就不做任何讲解了 要说的那一篇里已经说过了 几天过去 有些程序的实
  • STM32F1软件仿真

    MDK 的一个强大的功能就是提供软件仿真 通过软件仿真 我们可以发现很多将要出现 的问题 避免了下载到 STM32 里面来查这些错误 这样最大的好处是能很方便的检查程序存 在的问题 因为在 MDK 的仿真下面 你可以查看很多硬件相关的寄存器
  • 1.Kubernetes(K8S)架构1(Master,Node和Pod)

    简介 K8S是当前主流的容器编排系统 服务编排系统要想实现服务的自动化部署和运行离不开容器编排系统 容器目的是解决服务器的异构问题 解决了部署的时候无需在考虑底层系统环境是否能够满足服务的需要 但是单独的容器并没有生产的价值 因为他只是提供
  • Jupyter Notebook的使用01—三种打开方式以及修改默认打开文件夹

    首先安装Anaconda 成功后 打开开始菜单会出现下图所示 方法一 1 点击 Anaconda Prompt 2 输入jupyter notebook 方式二 直接点击 Jupyter Notebook 也可以 创建桌面快捷方式 以后就可
  • js工具类合集(utils.js)

    目录 1 验证URL格式 2 获取当前日期或时间type date 获取日期 time 获取时间 3 日期 时间选择框转换字符串 4 格式化时间 5 随机生成32位数 6 前端分页展示数据 7 判断日期是不是今天 昨天 明天 8 坐标转化
  • GridControl 列合并(自定义分组条件)

    说明 当前方式不提倡 最好还是使用 1 主从表 或 2 分组 一 数据源 DataTable dta new DataTable dta Columns Add A dta Columns Add B dta Columns Add C d
  • Zookeeper伸缩性,Observer

    https blog csdn net gangsijay888 article details 82426540
  • C# 中分享重试控制

    1 首先 我想标准化处理 因为存在重试的情况 例如数据库相关处理 方法有返回值 所以我想两者都支持 我希望能够设置重试次数和重试间隔 public class RetryExecteUtil public static T Execute
  • ElasticSearch版本控制--java实现

    一 前言 最近工作中有这样一个ElasticSearch 以下简称ES 写入的场景 Flink处理完数据实时写入ES 现在需要将一批历史数据通过Flink加载到到ES 有两个点需要保证 对于历史数据 ES已有文档 则舍弃旧数据 ES没有则插
  • Unity 5 中的全局光照技术详解

    全局光照 简称GI 是一个用来模拟光的互动和反弹等复杂行为的算法 要精确的仿真全局光照非常有挑战性 付出的代价也高 正因为如此 现代游戏会先一定程度的预先处理这些计算 而非游戏执行时实时运算 同一场景里 没有照明 左 只有直接光源 中 和有
  • mapreduce编程实验报告

    MapReduce分布式计算系统 1 HDFS 分布式存储系统 2 MapReduce 分布式计算系统 3 YARN hadoop 的资源调度系统 Common 以上三大组件的底层支撑组件 提供基础工具包和 RPC 框架等 Map处理 pu
  • 算法篇-面试必刷Top2-链表内指定区间反转

    BM2 链表内指定区间反转 解题思路 头插法 在学会了BM1 反转链表之后 要解决这个问题就很简单了 前一题是整个链表反转 这一题是部分反转 这上一题就是这道题的前置问题啊 那我们肯定是要先找到了第m个位置才能开始反转链表 而反转的部分就是
  • 选择排序——堆排序

    一 堆排序的相关概念 1 堆的定义 从堆的定义可以看出 堆实质是满足如下性质的完全二叉树 二叉树中任一非叶子结点均小于 大于 它的孩子结点 2 堆排序的定义 若在输出堆顶的最小值 最大值 后 使得剩余n 1个元素的序列重又建成一个堆 则得到
  • Deep Learning(深度学习)简要介绍

    转载自 https blog csdn net liulina603 article details 44216677 二 背景 机器学习 Machine Learning 是一门专门研究计算机怎样模拟或实现人类的学习行为 以获取新的知识或
  • org.elasticsearch.search.SearchContextMissingException: No search context found for id

    org elasticsearch transport RemoteTransportException datanode63 10 65 209 163 9300 indices data read search phase query
  • 7-7 模拟出拳游戏

    编写程序 模拟石头 剪刀 布的出拳游戏 提示程序输入一个数 这个数为2 1或0 分别表示石头 剪刀和布 提示用户输入值2 1或0 然后显示一条消息 表明用户和计算机谁赢了游戏 输入格式 输入两个范围在0 1 2之间的整数值 中间用空格分隔
  • Ngnix 反向代理服务器 安装方法记录

    一 nginx window下的安装和简单使用 下载地址 http nginx org en download html 将ngnix zip 解压到 E ngnix nginx 1 15 10 进入conf 更改ngnix conf文件
  • 跨平台桌面应用的开发框架——Electron

    一 背景 在团队中 我们因业务发展 需要用到桌面端技术 如离线可用 调用桌面系统能力 什么是桌面端开发 一句话概括就是 以 Windows macOS 和 Linux 为操作系统的软件开发 对此我们做了详细的技术调研 桌面端的开发方式主要有
  • 机器学习中常用的线性回归问题

    一 线性回归的定义及矩阵运算 线性回归的定义是 目标值预期是输入变量的线性组合 线性模型形式简单 易于建模 但却蕴含着机器学习中一些重要的基本思想 线性回归 是利用数理统计中回归分析 来确定两种或两种以上变量间相互依赖的定量关系的一种统计分