简单线性回归

简单线性回归(sklearn + tensorflow)

放肆的年华 提交于 2020-03-03 23:14:44
概述 最近学习机器学习(和深度学习),入门第一个接触的便是简单线性回归。 所谓线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。其形式可表示为:y = w1 x1 + w2 x2 + w3 x3 + ... + w_n x_n + b 而简单线性回归,是其最简单的形式:y = wx + b,即我们所熟知的一次函数,理解为给定权重w和偏置(或称为截距)b,结果y随变量x的变化而变化。 简单线性回归 机器学习中的简单线性回归,个人理解为给定一系列的x值和对应的y值,来确定权重w和偏置b的合理值(即根据某种方法,从数据中找规律)。 具体步骤可大致分为: 给定一个w和b的初始值 定义线性回归函数(即一次函数):y = wx + b 定义损失函数:n条数据,对每一次得到的y值和实际已知的y_true值相减后求平方,然后求和,再求平均值(所谓最小二乘法),用式子可表示为:loss = ( ∑( y - y_true )² ) / n 训练求损失最小值(即:loss最小时,预测的结果与真实值最接近):入门先不考虑太多,直接使用梯度下降法(一种可以自动更改w和b,使loss函数结果最小的方法) 示例一 以给定的每天来咖啡店人数(个)和咖啡店销售额(元)数据,来实现机器学习中的简单线性回归。 准备数据,并使用散点图显示

简单多元线性回归(梯度下降算法与矩阵法)

China☆狼群 提交于 2020-01-13 06:04:19
from:https://www.cnblogs.com/shibalang/p/4859645.html 多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测。 对应的模型如下: n: 特征数量。 一般选取残差平方和最小化作为损失函数,对应为: M: 训练样本数量。 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法( Gradient Descent ),第二种是矩阵法( The normal equations )。 梯度下降算法 给 一个初始值,然后逐步的迭代改变的值,是代价损失函数逐次变小,使每次都往梯度下降的方向改变: 表示下降速度。 为了求偏导数,当只有一个样本时,即 ; 即: 当有多个训练样本时,下降梯度算法即为: 由于每次迭代都需要计算所有样本的残差并加和,因此此方法也叫做批下降梯度法( batch gradient descent),当有大规模数据时,此方法不太适合,可采取它得一个变种,即每次更新权重时,不是计算所有的样本,而是选取其中一个样本进行计算梯度,这个方法叫做随机下降梯度法( stochastic gradient descent): 随机下降梯度法与下降梯度法对比可能收敛更快,但是可能找不到最优点而在最优点附近徘徊。 矩阵求解法 由于梯度下降算法需要多次迭代,并且需要指定下降速率

Keras上实现简单线性回归模型

亡梦爱人 提交于 2019-12-06 02:15:36
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/marsjhao/article/details/67042392 神经网络可以用来模拟回归问题 (regression) ,实质上是单输入单输出神经网络模型,例如给下面一组数据,用一条线来对数据进行拟合,并可以预测新输入 x 的输出值。 一、详细解读 我们通过这个简单的例子来熟悉Keras构建神经网络的步骤: 1.导入模块并生成数据 首先导入本例子需要的模块,numpy、Matplotlib、和keras.models、keras.layers模块。Sequential是多个网络层的线性堆叠,可以通过向Sequential模型传递一个layer的list来构造该模型,也可以通过.add()方法一个个的将layer加入模型中。layers.Dense 意思是这个神经层是全连接层。 2.建立模型 然后用 Sequential 建立 model,再用 model.add 添加神经层,添加的是 Dense 全连接神经层。参数有两个,(注意此处Keras 2.0.2版本中有变更)一个是输入数据的维度,另一个units代表神经元数,即输出单元数。如果需要添加下一个神经层的时候,不用再定义输入的纬度

线性回归模型

女生的网名这么多〃 提交于 2019-12-03 20:10:52
1、回归(regression)与 分类(Classification)区别,前者处理的是连续型数值变量。后者处理的是类别变量。 2、回归分析:建立方程模拟2个或多个变量之间关联关系。 3、简单线性回归:y=b1*x+b0 1) 参数b1,b0可以由如上公式计算出来,xi,yi为样本中各点。numpy实现简单线性回归方程。 # y = b1*x+b0 import numpy as np def fitSLR(x,y): n = len(x) fenzi = 0 fenmu = 0 for i in range(0,n): fenzi = fenzi + (x[i]- np.mean(x))*(y[i]- np.mean(y)) fenmu = fenmu + (x[i]- np.mean(x))**2 print(fenzi) print(fenmu) b1 = fenzi/float(fenmu) b0 = np.mean(y)- b1*np.mean(x) print(“b0:”,b0,"b1:",b1) return b0,b1 def predict(x,b0,b1): return b0+b1*x x = [1,3,2,1,3] y = [14,24,18,17,27] b0,b1 = fitSLR(x,y) x_test = 6 y_test = predict(x

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

喜欢而已 提交于 2019-11-28 18:58:46
实验环境:Python 3.6 编辑器:Jupyter Notebook 6.0.1 实验要求:可以调用numpy、pandas基础拓展程序包,不可以调用sklearn机器学 ——————————————————我是分割线喵———————————————————— ————————————(如果想要代码可以直接下拉到最后)———————————— 线性模型的一般形式:    向量形式:    线性模型的优点:   1、形式简单、易于建模   2、可解释性   3、是非线性模型的基础,可以在线性模型的基础上引入层级结构或高维映射 举个西瓜书里的例子:   系数可以反应该属性对该瓜是否是好瓜的影响因素大小    单一属性的线性回归目标:    参数/模型估计:最小二乘法    最小化均方误差: 分别对ω和b求导,得: 得到闭式解: ——————————————————我是分割线喵———————————————————— 在jupyter notebook中的代码实现:      1、先用一个例子,模拟出点:              2、通过最小二乘法得到线性回归,红色标出: ——————————————————代码——————————————————— 二元的简单线性回归算法代码 ,可以作为自定义包留着以后用,我在sublime里面写的。   (如何在jupyter中导入自定义包?)

2.线性回归

☆樱花仙子☆ 提交于 2019-11-28 07:10:57
(一)简单线性回归 和之前介绍的KNN不同,KNN主要是解决分类问题,而线性回归顾名思义显然是用来解决回归问题的。线性回归具有如下特征: 解决回归问题 思想简单,实现容易 许多强大的非线性模型的基础,比如逻辑回归、多项式回归、svm等等 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 图中是房屋的面积与价格之间的对应关系,不同的面积对应不同的价格,由此在二维平面中便形成了多个点。我们的目的就是要找到一条直线,最大程度上来拟合这些点。 但是在之前的KNN,分类问题中,横轴和纵轴都是样本的特征,而标签则是由这个点是红色还是蓝色决定的。 但是在线性回归中,由于是房产数据,我们必须要预测出一个具体的数值,而不能像分类问题那样,用简单的颜色来代表类别。而这些数据显然是在一个连续的样本空间中,因此需要一个坐标轴来表示。也正因为如此,在二维平面中只能有一个特征,要是多个特征,我们就要更高的维度上进行观察了。 如果样本的特征只有一个,我们称之为简单线性回归 我们的目的是要找到一个直线来尽可能多的拟合这些点,而在二维平面上显然是y = ax + b,那么每一个样本x,都会有一个真实值y和用拟合曲线预测出来的预测值ŷ,因此我们的真实值和预测值就会有一个差距 既然有真实值和预测值,那么评价一个直线的拟合程度,就看所有样本的真实值和预测值之差。如果只是简单的相减,那么两者之差可能有正有负,会抵消掉

sklearn 线性回归简单实现

风流意气都作罢 提交于 2019-11-28 04:01:24
一个使用sklearn实现线性回归的简单实例,主要包括数据准备,以及预测部分。 数据准备 def loadDataSet(filename): file=open(filename,'r') dataMat=[] labelMat=[] filelines=file.readlines() #读取文件 for line in filelines: linearr=[] #对文件内容进行处理 curline=line.strip().split('\t') for i in range(1,len(curline)): linearr.append(float(curline[i])) dataMat.append(linearr) labelMat.append(float(curline[0])) #归一化处理 min_max_scaler = preprocessing.MinMaxScaler() dataMat = min_max_scaler.fit_transform(dataMat) #对训练数据进行分批,用于检验预测的争取性 return cross_validation.train_test_split(dataMat,labelMat,test_size=0.25,\ random_state=random.randint(1,5)) 2.预测部分 def