一元线性回归

只含有一个自变量,对应的方程是一条直线

代价函数(损失函数)

  • 这个代价函数也称为平方误差代价函数
  • 思想:对于训练样本(x, y)来说,选择θ0,θ1 使h(x) 接近y
  • 选择合适的(θ0, θ1)使得代价函数最小
  • 每一个不同θ1的对应一条直线,我们的目的是找出最合适的θ1(最适合的直线)

梯度下降法

其实就是求导的过程

学习率不能太大也不能太小

梯度下降法的作用:最小化一个损失函数
 %matplotlib inline
import matplotlib.pyplot as plt
from sklearn import linear_model        #表示可以调用sklearn中的linear_model模块进行线性回归。
import numpy as np
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=Falsedef runplt(size=None):plt.figure(figsize=size)plt.axis([0, 25, 0, 25])plt.grid(True)return plt
plt = runplt()
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]
plt.plot(X, y, 'k.')
plt.show()model = linear_model.LinearRegression()   # 建立线性回归模型
model.fit(X, y)    # 建模
display(model.intercept_)  #截距
display(model.coef_)  #线性模型的系数
a = model.predict([[12]])
# a[0][0]
print("{:.2f}".format(model.predict([[12]])[0][0]))'''
array([1.96551724])array([[0.9762931]])13.68'''plt = runplt()
plt.plot(X, y, 'k.')
X2 = [[0], [10], [14], [25]]
model = linear_model.LinearRegression()
model.fit(X,y)
y2 = model.predict(X2)
plt.plot(X2, y2, 'g-')
plt.show()

多元线性回归

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import linear_model
# 下面两行代码用于显示中文
plt.rcParams['font.sans-serif']="Microsoft YaHei"
plt.rcParams['axes.unicode_minus']=False# 导入数据
data = pd.read_excel("D:/数据/运输.xlsx")
data = data.values  # 转化成列表类型# 切分数据
x_data = data[:,:-1]
y_data = data[:,-1]# 创建模型
model = linear_model.LinearRegression()
model.fit(x_data, y_data)print("系数>>>",model.coef_)
print("截距>>>",model.intercept_)# 测试
x_test = [[102, 4]]
predict = model.predict(x_test)
print("预测>>>",predict)# 画出3D图像
ax = plt.figure().add_subplot(111, projection="3d")
ax.scatter(x_data[:,0], x_data[:,1],y_data,c='r', marker='o', s=100)
x0 = x_data[:,0]
x1 = x_data[:,1]
# 生成网格矩阵
x0, x1 = np.meshgrid(x0, x1)
z = model.intercept_ + x0*model.coef_[0] + model.coef_[1]
# 画3d图
ax.plot_surface(x0, x1, z)
ax.set_xlabel("里程")
ax.set_ylabel("次数")
ax.set_zlabel("时间")plt.show()

特征缩放和交叉验证法

特征缩放

数据归一化

数据归一化就是把数据的取值范围处理为(0-1)或者(-1-1)之间

任意数据转化为0-1之间
newvalue = (oldvalue-min)/(max-min )

任意数据转化为-1-1之间
newvalue = ((oldvalue-main)/(max-min)-0.5)*2

均值标准化

newvalue = (oldvalue-平均值)/方差

交叉验证法

交叉验证是在机器学习建立模型和验证模型参数时常用的办法。交叉验证,顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集,用训练集来训练模型,用测试集来评估模型预测的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的某样本在下次可能成为测试集中的样本,即所谓“交叉”

那么什么时候才需要交叉验证呢?交叉验证用在数据不是很充足的时候。比如在我日常项目里面,对于普通适中问题,如果数据样本量小于一万条,我们就会采用交叉验证来训练优化选择模型。如果样本大于一万条的话,我们一般随机的把数据分成三份,一份为训练集(Training Set),一份为验证集(Validation Set),最后一份为测试集(Test Set)。用训练集来训练模型,用验证集来评估模型预测的好坏和选择模型及其对应的参数。把最终得到的模型再用于测试集,最终决定使用哪个模型以及对应参数

第一种是简单交叉验证,所谓的简单,是和其他交叉验证方法相对而言的。首先,我们随机的将样本数据分为两部分(比如: 70%的训练集,30%的测试集),然后用训练集来训练模型,在测试集上验证模型及参数。接着,我们再把样本打乱,重新选择训练集和测试集,继续训练数据和检验模型。最后我们选择损失函数评估最优的模型和参数。

第二种是S折交叉验证(S-Folder Cross Validation)。和第一种方法不同,S折交叉验证会把样本数据随机的分成S份,每次随机的选择S-1份作为训练集,剩下的1份做测试集。当这一轮完成后,重新随机选择S-1份来训练数据。若干轮(小于S)之后,选择损失函数评估最优的模型和参数。

第三种是留一交叉验证(Leave-one-out Cross Validation),它是第二种情况的特例,此时S等于样本数N,这样对于N个样本,每次选择N-1个样本来训练数据,留一个样本来验证模型预测的好坏。此方法主要用于样本量非常少的情况,比如对于普通适中问题,N小于50时,我一般采用留一交叉验证。

线性回归以及非线性回归相关推荐

  1. 一文看懂线性回归和非线性回归

    一文看懂线性回归和非线性回归 1. 非线性回归 2. 线性回归 3. 总结 1. 非线性回归 我们首先来看维基百科中对于非线性回归的定义: In statistics, nonlinear regre ...

  2. 第二章.线性回归以及非线性回归—LASSO算法

    第二章.线性回归以及非线性回归 2.13 LASSO算法 1.前期导入: 通过构造一个一阶惩罚函数获得一个精炼的模型:通过最终确定一些指标(变量)的系数为零,解释力很强 岭回归估计系数等于0的机会微乎 ...

  3. 回归分析详解:一文说清回归、线性回归、非线性回归、Logistic回归

    回归分析详解:一文说清回归.线性回归.非线性回归.Logistic回归 文章大纲 回归分析是什么? 回归.线性回归.非线性回归.Logistic回归的不同? 实际例子解释不同回归方法的应用场景 文章大 ...

  4. 第二章.线性回归以及非线性回归—一元线性回归,代价函数,相关系数,决定系数

    第二章.线性回归以及非线性回归 2.1 一元线性回归 1.概念: 1).自变量: 被用来进行预测的变量,相当于输入 2).因变量: 被预测的变量,相当于输出 3).回归分析: 用来建立方程模拟两个或者 ...

  5. 第二章.线性回归以及非线性回归—多项式回归

    第二章.线性回归以及非线性回归 2.7 多项式回归 1.举例: 1).特征数不同对应的曲线不同 2).假设我们不是找值(或者超平面),而是需要找到一个用多项式所表示的曲线(或者超平面),例如二次曲线: ...

  6. PyTorch基础-线性回归以及非线性回归-02

    线性回归 import torch import numpy as np import matplotlib.pyplot as plt %matplotlib inline from torch i ...

  7. 线性回归与非线性回归

    相关关系问题 在现实问题中,处于同一过程中的一些变量,往往是相互依赖和相互制约的,他们之间的相互关系大致可以分为两种: 1. 确定性关系--函数关系 2. 非确定性关系--相关关系 相关关系表现为这些 ...

  8. 机器学习(三)线性回归、广义线性回归、非线性回归

    机器学习(三)线性回归模型.广义线性回归模型.非线性回归模型 线性回归(数据集要满足正态分布) 一元线性回归模型: 在这里会想到,如何确定方程中的系数呢?我们先来了解最小二乘法,简单来说就是这个点作y ...

  9. 模型树——就是回归树的分段常数预测修改为线性回归 对于非线性回归有较好的预测效果...

    说完了树回归,再简单的提下模型树,因为树回归每个节点是一些特征和特征值,选取的原则是根据特征方差最小.如果把叶子节点换成分段线性函数,那么就变成了模型树,如(图六)所示: (图六) (图六)中明显是两 ...

  10. 机器学习:线性回归以及非线性回归

    回归分析Regression: 回归Regression: 回归一词最早由英国科学家弗朗西斯·高尔顿(Francis Galton)提出,他还是著名 的生物学家.进化论奠基人查尔斯·达尔文(Charl ...

最新文章

  1. 三角测量计算三维坐标的代码_浅谈三维扫描仪的由来
  2. 【CV】10种轻量级人脸检测算法大PK | 代码集合开源
  3. c语言s开头的函数以及作用,C语言函数大全-s开头-完整版.doc
  4. 轻松解决(,|)和(and,or)之间的区别
  5. 无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。...
  6. jdk8 获取上一个月时间_JDK 10:FutureTask获取一个toString()
  7. java invoke 泛型_利用Java反射机制和泛型,全自动解析json
  8. [导入]asp.net2.0乱记(33)vista下使用vs2005及一些软件
  9. Android编译判定BoardConfig.mk的宏控是否打开或者有效的验证方法
  10. MFC学习--文本框
  11. matlab假设网格颜色,MATLAB 画颜色网格图
  12. 几个实用又好看的纯css 按钮样式
  13. CTP接口python实现跨品种套利策略源码
  14. python面向对象编程实例pdf_Python面向对象编程指南 ([美]StevenFLott洛特) 中文pdf扫描版[52MB]...
  15. 使用Xamarin实现跨平台移动应用开发(转载)
  16. AVFoundation–简介
  17. ubuntu安装有道词典
  18. 2019 年 Google 编程之夏活动报告
  19. 简单易懂的汉明码(海明码)校验原理
  20. element-ui dialog遮罩层在最上层,关掉dialog遮罩层还在

热门文章

  1. 深入浅出java web_深入浅出javaWeb实战第1讲Web的概念及其演变(上)
  2. 数据结构银行排队系统c语言,数据结构-银行排队系统.doc
  3. tushare复权数据使用
  4. csgo连接到任意官方服务器失败删除文件,CSGO连接到官方任意
  5. 公司企业邮箱开通使用,收不到邮件怎么办?
  6. html屏幕3分,使用CSS3的background-size优化苹果的Retina屏幕的图像显示
  7. python分号_在Python中拆分分号分隔的字符串
  8. 洛谷p5710答案C语言,洛谷题单 101【入门2】分支结构
  9. 优动漫PAINT小技巧——描边功能的使用
  10. 旋转跳跃加后空翻,波士顿动力机器人Atlas的“变态程度”又升级了