1 importjava.io.BufferedReader;2 importjava.io.File;3 importjava.io.FileReader;4 importjava.io.IOException;5

6 /**

7 * 线性回归8 *@authorCassieRyu9 *批量梯度下降法10 */

11 public classLinear {12

13 private double[][] trainData;//训练数据集

14 private int row; //训练集的行(样本数目)

15 private int column; //训练集的列(特征数目+2)第一行是人为添加的x0, 最后一列为y值

16

17 private double[] theta; //参数theta向量

18 private double alpha; //步长

19 private int iteration; //迭代次数20

21 //构造函数

22 public Linear(String fileName, double alpha, intite){23 int rowF=getRowFromFile(fileName);24 int columnF =getColumnFromFile(fileName);25

26 row =rowF;27 column = columnF+1; //为了计算方便,加上x0那行

28

29 trainData = new double[row][column];30 loadTrainData(fileName);31

32 this.alpha =alpha;33 this.iteration =ite;34

35 theta = new double[column-1];//减去y对应的那行

36 initializeTheta();//theta的初始化

37

38 trainedTheta();//训练后的theta值

39 }40

41 //返回训练集的样本数目row

42 public intgetRowFromFile(String fileName){43

44 int count=0;45 File file = newFile(fileName);46 BufferedReader br = null;47 try{48 br = new BufferedReader(newFileReader(file));49 String temp = null;50 while((temp = br.readLine())!=null){ //循环读取下一行

51 count++;52 }53 }catch(IOException e){54 e.printStackTrace();55 }finally{56 if(br!=null)57 try{58 br.close();59 }catch(IOException e1){60

61 }62 }63

64 returncount;65 }66

67 //返回训练集列数,不包含x0

68 public intgetColumnFromFile(String fileName){69

70 int count=0;71 File file = newFile(fileName);72 BufferedReader br = null;73 try{74 br = new BufferedReader(newFileReader(file));75 String temp = null;76 if((temp = br.readLine())!=null){77 String [] tempStr = temp.split(" ");//用空格将列分开

78 count = tempStr.length;//数组长度为列的数目

79 }80 }catch(IOException e){81 e.printStackTrace();82 }finally{83 if(br!=null)84 try{85 br.close();86 }catch(IOException e1){87

88 }89 }90

91 returncount;92 }93

94 //返回训练集

95 public voidloadTrainData(String fileName){96

97 //初始化x0为1

98 for(int i=0;i

101 File file = newFile(fileName);102 BufferedReader br = null;103 try{104 br = new BufferedReader(newFileReader(file));105 String temp = null;106 int count=0;107 while((temp = br.readLine())!=null){ //行循环

108 String [] tempStr = temp.split(" ");//用空格将列分开

109

110 for(int i=1;i

111 trainData[count][i] = Double.parseDouble(tempStr[i-1]);112 count++; //行号加1

113 }114 }catch(IOException e){115 e.printStackTrace();116 }finally{117 if(br!=null)118 try{119 br.close();120 }catch(IOException e1){121

122 }123 }124 }125

126 //初始化theta的值

127 public voidinitializeTheta(){128

129 for(int i=0;i

133 //训练theta的值

134 public voidtrainedTheta(){135

136 while((iteration--)>0){//迭代次数137

138 //每迭代一次需带入新的theta值重新计算一次h(xi)-y(i)

139 double[] temp = new double[row];140 temp=getDerivation(); //h(xi)-y(i)

141

142 for(int j=0;j

143 double []tep = new double[row];144 double result=0.0;145 for(int i=0;i

147 result+=tep[i];148 }149 theta[j]-= alpha*result;150 }151 }152 }153

154 //得到(theta(k)*X(ik)-Y(i))即(h(xj)-yj)

155 public double[] getDerivation(){156

157 double [] deff = new double[row];158

159 for(int i=0;i

166 //得到theta(k)*X(ik)

167 public double getHypothesisFunc(int i){ //i为具体的某一行

168

169 double result=0;170 for(int k=0;k

176 //打印训练集

177 public voidprintTrainData(){178

179 System.out.printf("\n训练集:\n");180

181 for(int i=0;i

184 for(int j=0;j

191 }192

193 //打印theta值

194 public voidprintTheta(){195

196 System.out.printf("Theta集:\n");197 for(int j=0;j

203 //预测过程,即将theta带入h函数

204 public double predict(double[] newData){205

206 double h=0.0;207 for(int i=0;i

java线性规划_线性规划的代码实现相关推荐

  1. java 整数规划_线性规划与整数规划求解速度对比

    文章发表于微信公众号[数据魔术师]:线性规划&整数规划求解速度PK线性规划&整数规划求解速度PK​mp.weixin.qq.com 相信大家对线性规划和整数规划应该不陌生,在开始今天的 ...

  2. python混合整数线性规划_【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现...

    相关知识点 LP线性规划问题 Linear Problem [百度百科]:研究线性约束条件下线性目标函数的极值问题的数学理论和方法. 学过运筹学的小伙伴,可以看这个LP问题的标准型来回顾一下: 不太熟 ...

  3. 堆排序java实例_堆排序(示例代码)

    前言:网上有很多堆排序的案例,我只想写自己堆排序. 一:堆结构 即:一个父节点最多只能有两个子节点(可以没有),如下图 图1        图2           图3       图4 二: 数组 ...

  4. dw java 编码_不写代码 用Dreamweaver轻松插入Java特效

    利用 Java 技术制作网页特效,可以使网页升动美观,然而, Java 命令并不是那么容易掌握的,很多读者看到编程语句就头晕.本实例将为读者介绍一个好东西 --Anfy Java ,有了它,可以不用编 ...

  5. cloc JAVA文件_工具-cloc代码行数统计工具

    cloc 代码行统计工具 计算代码行.注释行.空行量的工具.支持多种语言. 例如统计一下vue项目里的src文件夹下的代码: 安装方式 npm install -g cloc # https://ww ...

  6. java整人_整人“病毒”代码(一)

    前段时间看到大家对这种整人的代码兴趣还挺浓厚的,我最近就收集了一些和大家分享. PS:由于精力问题没有对代码的可用性进行一一验证,所以不保证全部可用,大家如果发现有不可用的或者需要改进的地方请提出来, ...

  7. java 静态代码块_关于Java你不知道的那些事之代码块

    前言 普通代码块:在方法或语句中出现的{},就被称为代码块 静态代码块:静态代码块有且仅加载一次,也就是在这个类被加载至内存的时候 普通代码块和一般语句执行顺序由他们在代码中出现的次序决定,先出现先执 ...

  8. 单纯形法只有两个约束条件_线性规划之单纯形法【超详解+图解】

    使用单纯型法来求解线性规划,输入单纯型法的松弛形式,是一个大矩阵,第一行为目标函数的系数,且最后一个数字为当前轴值下的 z 值.下面每一行代表一个约束,数字代表系数每行最后一个数字代表 b 值. 算法 ...

  9. 区块链 java 开源_详细介绍Java区块链开源代码背后的内容

    什么是Java区块链开源代码?它是一种分布式分类帐技术,将所有不同的属性放在一起.那么Java区块链开源代码就可以通过不同的共识机制,使所有添加的数据不变.2015年之前,估计大家都知道的区块链的申请 ...

  10. java bitset用途_浅谈Java BitSet使用场景和代码示例

    搜索热词 @H_502_0@一.什么是BitSet? @H_502_0@ 注:以下内容来自JDK API: @H_502_0@ BitSet类实现了一个按需增长的位向量.位Set的每一个组件都有一个b ...

最新文章

  1. 别太把图神经网络当回事儿
  2. opentracing
  3. 创新时代的管理:《创新赢天下》
  4. PostgreSQL 并行vacuum patch - 暨为什么需要并行vacuum或分区表
  5. SAP内存和ABAP内存的简单介绍说明
  6. CIKM 2021 | Google出品:将对比学习用于解决推荐系统长尾问题
  7. 中国男人何时回归家庭?(转)
  8. 为Lucene选择快速唯一标识符(UUID)
  9. linux内核cpu负载计算,CPU 负载 — The Linux Kernel documentation
  10. 第五课 机器学习中的特征工程
  11. 学生信息管理系统问题集锦(一)
  12. 0010-伪类选择器-前端学习笔记
  13. 190526每日一句,自律克制,告别懒惰
  14. 控制系统状态空间表达式的解(1)——求解线性定常系统零输入响应
  15. cie色度图matlab,带你解读 CIE1931色度图
  16. DM8 数据库连接Alibaba druid 提示:dbType not support
  17. 2022年考研计算机组成原理_4 指令系统
  18. random_state = 42
  19. Apache ECharts数据可视化(连接数据库)
  20. emacs 基本配置

热门文章

  1. LeetCode : 390. 消除游戏(Elimination Game)分析和解答
  2. 新媒体时代,内容为王已经走偏
  3. mac 无法删除用户
  4. PDA应用软件开发特点
  5. OA办公自动化系统作用
  6. 决策树算法原理——cart
  7. 计算机投针实验程序,蒲丰投针问题
  8. 郑立:一个80后神话的倒掉
  9. empty string mysql_Mysql中的null与empty string
  10. CTF_Web:长安杯-2021 Old But A Little New asuka题解