为了利用机器学习进行简单的线性回归,先理解机器学习和线性回归的概念,然后通过案例进行机器学习。本文主要目录如下:

一、机器学习的概念

二、线性回归的概念

三、机器学习线性回归模型

(一)导入数据集

(二)提取特征标签

(三)绘制原始数据散点图

(四)查看相关系数

(五)建立训练数据和测试数据

(六)构建线性回归模型

1、数据形状的转化

2、导入线性回归包,创建模型,训练模型

3、查看截距和相关系数

4、查看模型准确率(评估模型)

5、绘制训练数据单点图:通过训练数据预测值绘制最佳拟合曲线,绘制测试数据散点图

一、机器学习概念

(一)概念

从广义上来说,机器学习是一种能够赋予机器学习的能力以此让它完成直接编程无法完成的功能的方法。

从实践的意义上来说,机器学习是一种通过利用数据,训练出模型,然后使用模型预测的一种方法。

机器学习与人类思考的经验过程是类似的,不过它能考虑更多的情况,执行更加复杂的计算。事实上,机器学习的一个主要目的就是把人类思考归纳经验的过程转化为计算机通过对数据的处理计算得出模型的过程。通过计算机得出的模型能够以近似于人的方式解决很多灵活复杂的问题。

机器学习过程如下

首先,需要在计算机中存储历史数据;

其次,将存储的历史数据通过机器学习算法进行处理,这个过程在机器学习中叫做“训练”,处理的结果可以被用来对新的数据进行预测,这个结果一般称之为“模型”。对新数据的预测过程在机器学习中叫做“预测”。

“训练”与“预测”是机器学习的两个过程,“模型”则是过程的中间输出结果,“训练”产生“模型”,“模型”指导“预测”。

机器学习中的“训练”与“预测”过程可以对应到人类的“归纳”和“推测”过程。通过这样的对应,可以发现,机器学习的思想并不复杂,仅仅是对人类在生活中学习成长的一个模拟。由于机器学习不是基于编程形成的结果,因此它的处理过程不是因果的逻辑,而是通过归纳思想得出的相关性结论。

机器学习最通俗的解释就是让机器学会决策对于我们人来说,比如去菜市场里挑选芒果,从一堆芒果中拿出一个,根据果皮颜色、大小、软硬等属性或叫做特征,我们就会知道它甜还是不甜。类似的,机器学习就是把这些属性信息量化后输入计算机模型,从而让机器自动判断一个芒果是甜是酸,这实际上就是一个分类问题。

分类和回归是机器学习可以解决两大主要问题从预测值的类型上看,连续变量预测的定量输出称为回归;离散变量预测的定性输出称为分类。例如:预测明天多少度,是一个回归任务;预测明天阴、晴、雨,就是一个分类任务。

(二)机器学习的方法

机器学习中有众多算法,使用最多、影响最广、种类最全的典型算法包括:回归算法、神经网络、SVM(支持向量机)、聚类算法、降维算法、推荐算法这六种。另外,机器学习界还有其他的如高斯判别、朴素贝叶斯、决策树等等算法。

回归算法是后面若干强大算法的基石,如果不理解回归算法,无法学习那些强大的算法。

回归算法有两个重要的子类:线性回归和逻辑回归。

线性回归和逻辑回归区别在于:

1、线性回归处理的是数值问题,也就是最后预测出的结果是数字,例如房价;

2、逻辑回归属于分类算法,也就是说,逻辑回归预测结果是离散的分类,例如判断这封邮件是否是垃圾邮件,以及用户是否会点击此广告等等;

3、逻辑回归算法划出的分类线基本都是线性的(也有划出非线性分类线的逻辑回归,不过那样的模型在处理数据量较大的时候效率会很低),这意味着当两类之间的界线不是线性时,逻辑回归的表达能力就不足。

本文主要讲回归算法中的线性回归。

二、线性回归概念

在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析。

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

一般来说,线性回归都可以通过最小二乘法求出其方程,可以计算出对于y=bx+a (一元线性)的直线。需要做到的是拟合训练集数据找出合适的参数a和b,确定方程式,用于预测未知的样本。

三、机器学习线性回归模型

做案例模型前,先要完成如下两步操作 :

  • 使用conda命令安装机器学习包:sklearn,安装命令: conda install scikit-learn。
  • 在Jupyter notebook中引入有序字典的包和绘图包:
注意:1、在conda环境中要按照绘图包matploylib;2、导入有序字典的包和绘图包

机器学习线性回归模型案例,用于预测考试分数和学习时长的关系。

(一)导入数据集

(二)提取特征标签

(三)绘制原始数据散点图

  • 导入绘图包:import matplotlib.pyplot as plt(导入数据集前已导入,此处重复仅用于说明保持步骤完整性)
  • 绘制散点图:plt.scatter(横轴,纵轴,颜色,标题)

(四)查看相关系数

注意:1、相关系数r等于x和y的协方差/(x的标准差*y的标准差);2、相关系数函数:.corr(),corr返回结果是一个数据框存放的是相关系数矩阵。

(五)建立训练数据和测试数据

注意:1、先要导入测试数据、训练数据分离包,记住导入语句:from sklearn.model_selection import train_test_split
  • train_test_split是交叉验证中常用的函数,功能是从样本中随机的按比例选取训练数据(train)和测试数据(test)
  • 第1个参数:所要划分的样本特征
  • 第2个参数:所要划分的样本标签
  • train_size:训练数据占比,如果是整数的话就是样本的数量

在图上看下具体哪几个点被作为训练数据,哪几个点作为测试数据了:

  • 导入绘图包:import matplotlib.pyplot(导入数据集前已导入,此处重复仅用于说明保持步骤完整性)
注意:图中4个红点点作为测试数据,其他蓝点点点作为训练数据。

(六)建立线性回归模型

1、数据形状的转化

注意:由于本文案例中输入的数据只有1个特征,所以需先用array.reshape(-1,1)函数改变数组的形状。

关于reshape()用法的说明:

  • 如果你输入的数据只有1个特征,需要用array.reshape(-1, 1)来改变数组的形状;
  • reshape行的参数是-1表示什么呢?例如reshape(-1,列数)。如果行的参数是-1,就会根据所给的列数,自动按照原始数组的大小形成一个新的数组,例如reshape(-1,1)就是改变成1列的数组,这个数组的长度是根据原始数组的大小来自动形成的。原始数组总共是2行*3列=6个数,那么这里就会形成6行*1列的数组;
  • reshape列的参数是-1表示什么呢?例如reshape(行数,-1)。如果列的参数是-1,就会根据所给的行数,自动按照原始数组的大小形成一个新的数组,例如reshape(1,-1)就是改变成1行的数组,这个数组的列数是根据原始数组的大小来自动形成的。原始数组总共是2行*3列=6个数,那么这里就会形成1行*6列的数组;

2、 导入线性回归包,创建模型,训练模型

  • 第1步:导入线性回归,from sklearn.linear_model import LinearRegression
  • 第2步:创建模型,线性回归模型,model = LinearRegression()
  • 第3步:训练模型,model.fit(X_train , y_train),fit函数

3、查看截距和相关系数

  • 最佳拟合线:z= + x
  • 截距intercept:a
  • 回归系数coef:b
注意:截距a=modle.intercept_和回归系数b=modle.coef_中的下划线不能少。

画出那条最佳拟合线,看看用训练数据训练出来的是怎样的一条线:

  • 第1步:训练数据散点图:plt.scatter(X_train, y_train, color='blue', label="train data")
  • 第2步:训练数据的预测值:y_train_pred = model.predict(X_train)
  • 第3步:绘制最佳拟合线:plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")

4、查看模型准确率(评估模型)

  • 评估1相关系数和协方差都可以看两变量的相关性程度,但相关系数剔除了协方差易受变量变化幅度影响的问题。
注意:1、相关系数矩阵解读:按对角线划分,两侧的数据是对称的,所以只看对角线一侧就可以了;2、相关系数在0~0.3为弱相关;0.3~0.6中等相关;0.6~1强相关;
  • 相关系数矩阵解读:按对角线划分,两侧的数据是对称的,所以只看对角线一侧就可以了;
  • 相关系数在0~0.3为弱相关;0.3~0.6中等相关;0.6~1强相关
  • 图中相关系数较高,说明相关线是可信的。

评估2:回归系数是看回归线拟合程度:有多少百分比的y的波动可以由回归线描述,值越高,回归模型越精确,取值范围0~1。

  • 线性回归的scroe方法得到的是决定系数R平方
  • 决定系数R平方=1-误差平方和/总波动
  • 评估模型:决定系数R平方model.score(X_test,y_test)
注意:结果说明98%的数据都可以被回归线描述

将测试数据画到图上,看下情况怎么样:

  • 第1步:训练数据散点图,plt.scatter(X_train, y_train, color='blue', label="train data")
  • 第2步:训练数据的预测值,y_train_pred = model.predict(X_train)
  • 第3步:绘制最佳拟合线标签用的是训练数据的预测值y_train_pred,
  • plt.plot(X_train, y_train_pred, color='black', linewidth=3, label="best line")
  • 第4步:测试数据散点图,plt.scatter(X_test, y_test, color='red', label="test data")

PS:整个机器学习的步骤如下,本文案例中重点j分析构建模型和评估。

  • 1.提出问题
  • 2.理解数据
  • 3.数据清洗
  • 4.构建模型
  • 5.评估(通过测试数据评估预测准确与否)

机器学习线性回归算法实验报告_机器学习之简单线性回归相关推荐

  1. 机器学习线性回归算法实验报告_机器学习笔记 线性回归

    一.线性回归找到最佳拟合直线 1. 定义 线性回归是通过现有数据,让训练模型生成一个拟合公式,从而计算目标数据的预测值. 在统计学中,线性回归(Linear Regression)是利用称为" ...

  2. 机器学习线性回归算法实验报告_从零实现机器学习算法(九)线性回归

    1. 回归简介 在客观世界中普遍存在着变量与变量之间的关系.变量之间的关系一般可以分为确定关系和不确定关系.确定关系是指变量之间的关系可以通过函数关系来表达.非确定关系即所谓的相关关系.而回归分析是研 ...

  3. 线性回归算法python实现_用python实现线性回归算法

    本文是根据https://blog.csdn.net/dqcfkyqdxym3f8rb0/article/details/79767043这篇博客写出来的.其中的公式什么的能够去这个博客里面看. 本文 ...

  4. python手写数字识别实验报告_机器学习python实战之手写数字识别

    看了上一篇内容之后,相信对K近邻算法有了一个清晰的认识,今天的内容--手写数字识别是对上一篇内容的延续,这里也是为了自己能更熟练的掌握k-NN算法. 我们有大约2000个训练样本和1000个左右测试样 ...

  5. 动态规划算法实验报告_强化学习之动态规划算法

    如今的强化学习研究大体分为了两个研究学派:一个是以Sutton,Sliver等人为代表的value-based学派,他们主要从值函数近似角度入手去研究强化学习,这也是强化学习早期最初发展起来时沿用的路 ...

  6. 数据结构排序算法实验报告_数据结构与算法-堆排序

    堆排序 堆排序是指利用堆这种数据结构所设计的一种排序算法.堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点,堆排序的时间复杂度为O(nlogn).( ...

  7. 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)

    我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...

  8. 动态规划算法实验报告_搞懂这几点,动态规划算法就是那么简单

    动态规划(Dynamic programming,简称DP),是大家都觉得比较难以掌握的算法.为了应付面试,我们经常会背诵一下斐波那楔数列或者背包问题的源码,其实,只要理解了思想,掌握基本的模型,然后 ...

  9. 作业1:ID3 算法实验报告

    作业1:ID3 算法实验报告 1. 算法介绍 信息增益:特征 A 对训练数据集 D 的信息增益 g(D, A),定义为集合 D 的经验熵 H(D) 与特征 A 给定条件下 D 的讲演条件熵 H(D|A ...

最新文章

  1. Android中Handler的使用
  2. UIRefreshControl使用总结
  3. mysql函数包含的意思_MYSQL函数
  4. The 'microsoft.jet.oledb.4.0' provider is not registered on the local machin
  5. 吉林省第二条国际铁路联运大通道“长珲欧”启动测试
  6. TypeScript 2.5 发布,增加语言级重构
  7. Mac OS X下安装nvm的方法
  8. Visual Studio 2010 - 推荐的扩展[关闭]
  9. 报错:1130-host ... is not allowed to connect to this MySql server
  10. i7 8750h支持linux,开启游戏本六核时代!酷睿i7-8750H处理器性能实测
  11. 微信小程序测试自学文档
  12. 从CentOS7默认安装的/home中转移空间到根目录/ - LVM操作简明教程
  13. Xcode8 最快最方便的安装插件方案
  14. zencart的html文件,zen cart模板文件介绍
  15. 英语学习第5篇_并列句
  16. 华为手机修改dns服务器,手机更改服务器dns地址
  17. Python Open3D点云配准点对点,点对面ICP(Iterative Closest Point)
  18. 现在怎么不生产5寸大小的手机了?
  19. 牛啊,全国DNS服务器IP地址都在这里了
  20. 神经网络控制与matlab仿真,matlab神经网络拟合预测

热门文章

  1. StringTokenizer使用
  2. 在 iPhone 静音情况下,播放 MP3 文件的代码
  3. java 八进制_java中表示二进制、八进制、十进制、十六进制
  4. Mac笔记本电脑电池完全充电
  5. 对于计算机领域知识了解程度,中学信息素养调查问卷
  6. 线性数据结构之队列(Queue)
  7. 企业如何有效预防合规风险?
  8. 「州晖」关于J1型T形管托支架
  9. 最好的个人品牌策略是什么样的
  10. FFmpeg使用GPU转码如何更改分辨率