机器学习——简单线性回归(原理推导+算法描述+代码实现)

实验环境:Python 3.6

编辑器:Jupyter Notebook 6.0.1

实验要求:可以调用numpy、pandas基础拓展程序包,不可以调用sklearn机器学

——————————————————我是分割线喵————————————————————

————————————(如果想要代码可以直接下拉到最后)————————————

线性模型的一般形式:

  

 

向量形式:

  

线性模型的优点:

  1、形式简单、易于建模

  2、可解释性

  3、是非线性模型的基础,可以在线性模型的基础上引入层级结构或高维映射

举个西瓜书里的例子:

  系数可以反应该属性对该瓜是否是好瓜的影响因素大小

  

单一属性的线性回归目标:

  

参数/模型估计:最小二乘法

  

最小化均方误差:

分别对ω和b求导,得:

 得到闭式解:

——————————————————我是分割线喵————————————————————

在jupyter notebook中的代码实现:

    1、先用一个例子,模拟出点:    

  

    2、通过最小二乘法得到线性回归,红色标出:

——————————————————代码———————————————————

二元的简单线性回归算法代码,可以作为自定义包留着以后用,我在sublime里面写的。

  (如何在jupyter中导入自定义包?)

 1 import numpy as np
 2
 3 class SimpleLinearRegression1:
 4     def __init__(self):
 5         """初始化Simple Linear Regression 模型"""
 6         self.a_ = None
 7         self.b_ = None
 8         #a和b不是用户送来的参数,是得出的结果
 9     #x_train和y_train只用来提供训练,训练得出所需参数之后,数据就没用了
10
11     def fit(self, x_train, y_train):
12         """根据训练数据集x_train,y_train训练Simple Linear Regression 模型"""
13         assert x_train.ndim == 1, 14             "Simple Linear Regressor can only solve simple feature training data"
15         assert len(x_train) == len(y_train), 16             "the size of x_train must be equal to the size of y_train"
17         #算法实现代码
18         x_mean = np.mean(x_train)
19         y_mean = np.mean(y_train)
20
21         num = 0.0
22         d = 0.0
23         for x, y in zip(x_train, y_train):
24             num += (x - x_mean) * (y - y_mean)
25             d += (x - x_mean) ** 2
26
27         self.a_ = num / d
28         self.b_ = y_mean - self.a_ * x_mean
29
30         return self
31
32     def predict(self, x_predict):
33         """给定待预测数据集x_predict, 返回表示x_predict的结果向量"""
34         assert x_predict.ndim == 1, 35             "Simple Linear Regressor can only solve single feature training data"
36         assert self.a_ is not None and self.b_ is not None, 37             "must fit before predict"
38
39         return np.array([self._predict(x) for x in x_predict])
40
41     def _predict(self, x_single):
42         """给定单个待预测数据x_single, 返回x_single的预测结果值"""
43         return self.a_ * x_single + self.b_
44
45     def __repr__(self):
46         return "SimpleLinearRegression1()"

接着在jupyter notebook测试一下刚刚写好的算法:

(myMachineLearningCode是我自定义的文件夹,上面的代码文件命名为SimpleLinearRegression.py)

  

这样简单的线性回归算法就实现了,但是用for循环去得到最小二乘法的分子分母效率很低,可以改成使用向量法得到分子分母。

(机器学习——简单线性回归之向量法(代码实现))

原文地址:https://www.cnblogs.com/miaoqianling/p/11421531.html

时间: 2024-08-29 09:04:08

机器学习——简单线性回归(原理推导+算法描述+代码实现)的相关文章

02_有监督学习--简单线性回归模型(梯度下降法代码实现)

有监督学习--简单线性回归模型(梯度下降法代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.定义模型的超参数4.定义核心梯度下降模型函数5.测试:运行梯度下降算法,计算最优的 w 和 b6.画出拟合曲线7.附录-测试数据 有监督学习--简单线性回归模型(梯度下降法代码实现) 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt 1.导入数据(data.csv) points = np.genfromtxt('da

机器学习-简单线性回归(二)

一.简单线性回归模型举例 汽车卖家做电视广告数量与卖出去的汽车数量: 1.1 列出适合简单线性回归模型的最佳回归线? 使sum of squares最小 1.2 计算 1.3 预测 假设有一周的广告数为6.预测的汽车销售量为多少? 代码: # -*- coding:utf-8 -*- #简单线性回归:只有一个自变量 y=k*x+b 预测使得(y-y*)^2最小 import numpy as np def fitSLR(x, y): n = len(x) dinominator = 0 #分母

简单的选择排序算法实现代码

1 #include<stdio.h> 2 #define N 12 3 //length统计数组的长度 返回最后元素的下标 4 int length(int a [N]){ 5 for(int i = 0;i<=N;i++){ 6 if(a[i]==0) return i-1; 7 8 } 9 } 10 //打印输出数组元素 11 void show(int a[N]){ 12 for(int i= 0;i<N;i++){ 13 if(a[i]!=0) printf("

深入理解机器学习:从原理到算法pdf

下载地址:网盘下载 本书涵盖了机器学习领域中的严谨理论和实用方法,讨论了学习的计算复杂度.凸性和稳定性.PAC-贝叶斯方法.压缩界等概念,并介绍了一些重要的算法范式,包括随机梯度下降.神经元网络以及结构化输出. 全书讲解全面透彻,适合有一定基础的高年级本科生和研究生学习,也适合作为IT行业从事数据分析和挖掘的专业人员以及研究人员参考阅读. David的专著<Understanding Machine Learning:From Theory to Algorithms>是机器学习领域一部具有里

一个简单的伪随机数发生算法(转)

源:一个简单的伪随机数发生算法 //此代码纯属交流目的,如用作安全领域,后果自负 #include <stdint.h> #include <stdlib.h> //! \brief random seed static uint16_t s_hwRandomSeed = 0xAA55; static uint8_t s_chRandomTable[] = { 0x12,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, 0xF1,0xE2,0xD3,0xC4,

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

十三种基于直方图的图像全局二值化算法原理.实现.代码及效果(转) http://www.cnblogs.com/carekee/articles/3643394.html 图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产生了数以百计的阈值选取方法,但如同其他图像分割算法一样,没有一个现有方法对各种各样的图像都能得到令人满意的结果. 在这些庞大的分

机器学习与Tensorflow(1)——机器学习基本概念、tensorflow实现简单线性回归

一.机器学习基本概念 1.训练集和测试集 训练集(training set/data)/训练样例(training examples): 用来进行训练,也就是产生模型或者算法的数据集 测试集(testing set/data)/测试样例 (testing examples):用来专门进行测试已经学习好的模型或者算法的数据集 2.特征向量 特征向量(features/feature vector):属性的集合,通常用一个向量来表示,附属于一个实例 3.分类问题和回归问题 分类 (classific

03_有监督学习--简单线性回归模型(调用 sklearn 库代码实现)

有监督学习--简单线性回归模型(调用 sklearn 库代码实现)0.引入依赖1.导入数据(data.csv)2.定义损失函数3.导入机器学习库 sklearn4.测试:运行算法,从训练好的模型中提取出系数和截距5.画出拟合曲线6.附录-测试数据 有监督学习--简单线性回归模型(调用 sklearn 库代码实现) 0.引入依赖 import numpy as npimport matplotlib.pyplot as plt 1.导入数据(data.csv) points = np.genfro