线性回归原理:

线性回归公式:y = b + w*x,w表示权重b表示偏置。

在实际实现中可以将公式写作:y = w[0] * x[0] + w[1] * x[1],x[0]=1,这样就可以很方便的进行参数求解,同样稍作修改将公式写成:y = w[0] * x[0] + w[1] * x[1] + ... + w[n]*x[n],就变成了多元回归。

采用梯度下降和多次迭代不断优化参数,梯度下降计算参数的梯度,计算流程分为以下几步:

1、根据当前参数和训练计算数据预测值

preY = sum(w[n] + x[n])

2、计算梯度

wright_gradient[n] = sum(2 * (preY - y) * x[n] / N),N为训练数据总行数

3、更新参数:

wright[n] = wright[n] - a * wright_gradient[n],a为学习率,学习率取值范围[0,1],根据训练数据和训练情况来定。

4、迭代

每迭代一次就多整个训练数据计算一次梯度和更新一次参数,通过迭代使函数不断逼近最小误差。

线性回归的实现(java实现,一元回归和多元回归通用):

1、读取数据,以csv格式存储,前面几列为x,最后一列为y。

public List<double[]> readTrainFile(String filepath) {File trainFile = new File(filepath);List<double[]> resultList = new ArrayList<double[]>();if (trainFile.exists()) {try {BufferedReader reader = new BufferedReader(new FileReader(trainFile));String line;while ((line = reader.readLine()) != null) {String[] strs = line.split(",");double[] lines = new double[strs.length];for (int i = 0; i < strs.length; i++) {lines[i] = Double.parseDouble(strs[i]);}resultList.add(lines);}reader.close();} catch (Exception e) {e.printStackTrace();}}return resultList;}

2、训练,需要设置学习率和迭代次数,返回参数数组。

public double[] train(String filepath, double learningRate, int iterationNum) {List<double[]> trainData = readTrainFile(filepath);double[] weights = new double[trainData.get(0).length];for(int i = 0; i < weights.length; i++) {weights[i] = 0;}weights = updateWeights(trainData, weights, learningRate, iterationNum);return weights;}

3、计算权重参数,对数据集每迭代一次,使用梯度下降计算梯度,通过学习率*梯度更新权重。

public double[] updateWeights(List<double[]> trainData, double[] weights, double learningRate, int iterationNum) {for (int i = 0; i < iterationNum; i++) {double[] weights_gradient = new double[weights.length];for (int j = 0; j < trainData.size(); j++) {double[] line = trainData.get(j);double[] x = new double[line.length];x[0] = 1;double y = line[line.length - 1];for(int n = 1; n < x.length; n++) {x[n] = line[n - 1];}//根据当前参数和数据预测preYdouble preY = 0.0;for(int n = 0; n < weights.length; n++) {preY += x[n] * weights[n];}for(int n = 0; n < weights.length; n++) {weights_gradient[n]+=2 * (preY - y) * x[n] / (double)trainData.size();}}//更新参数for(int j = 0; j < weights.length; j++) {weights[j] = weights[j] - learningRate * weights_gradient[j];}//每迭代1次,输出lossif (i % 100 == 0) {double loss = computeError(trainData, weights);System.out.println(loss);}}return weights;
}

4、计算error

public double computeError(List<double[]> trainData, double[] weights) {double error= 0.0;for(int i = 0; i < trainData.size(); i++) {double[] line = trainData.get(i);double preY = 0.0;double[] x = new double[line.length];x[0] = 1;double y = line[line.length - 1];for(int n = 1; n < x.length; n++) {x[n] = line[n - 1];}for(int j = 0; j < line.length; j++) {preY +=  weights[j] * x[j];}error += (y - preY) * (y - preY);}return error / (double)trainData.size();}

5、测试程序,输出计算后参数

public static void main(String[] args) {MultiLineRegression lineRegression = new MultiLineRegression();double[] weights = lineRegression.train("E:/index/traindata.csv", 0.001, 1000);for(double w : weights) {System.out.print(w + ",");}}

机器学习入门04-线性回归原理与java实现多元线性回归相关推荐

  1. 机器学习入门学习笔记:(2.2)线性回归python程序实现

      上一篇博客中,推导了线性回归的公式,这次试着编程来实现它.(机器学习入门学习笔记:(2.1)线性回归理论推导 )   我们求解线性回归的思路有两个:一个是直接套用上一篇博客最后推导出来的公式:另一 ...

  2. 机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程

    机器学习入门系列二(关键词:多变量(非)线性回归,批处理,特征缩放,正规方程) 目录(?)[+] 一多变量的线性回归 二批处理 三特征缩放 四正规方程 五多变量非线性回归 一.多变量的线性回归 在#机 ...

  3. 机器学习入门系列一(关键词:单变量线性回归,梯度下降法)

    机器学习入门系列一(关键词:单变量线性回归,梯度下降法) 如上图所示,我们的目标是希望通过这些数据得到城市人口数和利润可能的对应关系,并可以通过城市人口数(利润)来预测它的利润(城市人口数),在这里我 ...

  4. 【机器学习个人笔记】part3——用sklearn实现多元线性回归

    [机器学习个人笔记]part3--用sklearn实现多元线性回归 简单线性回归可以看做是y = ax + b的函数,多元线性函数则可以看做是y = ax1 + bx2 + cx3 + d的函数. 简 ...

  5. 梯度下降算法c语言实现,机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现...

    本文讲梯度下降(Gradient Descent)前先看看利用梯度下降法进行监督学习(例如分类.回归等)的一般步骤: 1, 定义损失函数(Loss Function) 2, 信息流forward pr ...

  6. 机器学习入门01-K临近(KNN)的java实现

    K临近(KNN)算法是一种原理比较简单的机器学习算法,其原理是将待分类数据与所有样本数据计算距离,根据距离由近到远选取K个临近点,根据临近点占比和距离权重对待分类点进行分类. 由于需要做距离计算,样本 ...

  7. python多元线性回归模型案例_Python 实战多元线性回归模型,附带原理+代码

    原标题:Python 实战多元线性回归模型,附带原理+代码 作者 | 萝卜 来源 | 早起Python( ID:zaoqi-python ) 「多元线性回归模型」非常常见,是大多数人入门机器学习的第一 ...

  8. 原理 + 代码 | Python 实现多元线性回归模型 (建模 + 优化,附源数据)

    前言 多元线性回归模型非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方.其中多元共线性这个问题将贯穿所有的机器学习模型,所以本文会将原理知识穿插于代码段中,争 ...

  9. 【机器学习】线性回归之梯度下降、多元线性回归概述

    线性回归是一种监督学习方法.  对每个样本来说: Hypothesis: 即: 其中, 为预测值, 为样本的第i个特征,且:  为该特征下的权重,bias偏差.线性回归就是要在已有的样本特征和标签下学 ...

最新文章

  1. asp.net 解码gb2312下urlencode后的字符串
  2. 二项式反演(非详细)
  3. Java中的装箱和拆箱剖析
  4. 今晚8点不见不散!余承东Vlog如此夸赞华为Mate30系列新机
  5. Facebook正在追踪你,哪怕你不是用户丨扎克伯格国会听证第二日
  6. matlab复杂网络仿真,matlab在复杂网络上的应用
  7. 消息中间件→产生原因、JMS与AMQP、主流消息中间件、基本概念、ActiveMQ、集群、实际场景问题解决方案、集成rabbitMQ与kafka
  8. 在Android应用中实现Google搜索的例子
  9. 【愚公系列】2022年02月 Django商城项目 26-搜索引擎功能实现
  10. grep/awk/sed查指定时间段日志
  11. 为什么电脑屏幕会横过来_电脑屏幕横过来了怎么办
  12. 五子棋java毕业设计论文_Java五子棋毕业设计论文
  13. mysql3306端口被占用无法终止_Mysql3306端口被占用无法启动解决办法.doc
  14. MAC电脑修改ssh端口
  15. 计算机的真正发明者,楚泽真正的“计算机之父”
  16. 印象笔记如何取消首字母大写
  17. 【VOLTE】SIP leg
  18. 初入计算机专业,编程语言怎么选?大学生活如何度过?
  19. react如何控制全局loading_ReactJS实践(一)—— FrozenUI React化之Loading组件
  20. 【官方正版】2021外卖cps返利系统/外卖小程序公众号/外卖红包裂变系统/美团/饿了么

热门文章

  1. 浙江省第6届程序设计竞赛结题报告汇总 zoj3202-3212
  2. 【一起去大厂系列】什么是回表查询?怎么优化回表查询?
  3. 测试点解析:1049 数列的片段和_12行代码AC
  4. 1040 有几个PAT (25分)——18行代码AC
  5. 5行代码满分:L1-053 电子汪 (10分)
  6. (*长期更新)软考网络工程师学习笔记——Section 2 数字传输系统
  7. Error from server (Forbidden): Forbidden (user=system:anonymous, verb=get, resource=nodes, subresour
  8. 运用java语言提取数据库信息
  9. 部署LVS-DR(LVS+Keepalived)群集
  10. LeetCode题库第2题 两数相加